数据预处理你好
我想在我的数据集上应用非参数方法,例如决策树、随机森林、朴素贝叶斯、SVM、神经网络和提升树。在应用这些模型之前,我应该执行哪些预处理步骤?
基础数据分析与建模预测模型和机器学习回复:数据预处理你好@maryam_nourmand ,
如果您谈论的是使用 K 折交叉验证方法制作验证列,则可以在分层列面板中使用所有预测变量(X 变量)(以确保折叠对于 X 变量的分布是同质的),并在 Y 面板中使用您的响应:JMP 将根据响应值对折叠之间的行进行排序和分配,以确保折叠对于响应是同质的,从而避免在交叉验证期间出现有偏见的学习和评估: 启动制作验证列平台 (jmp.com)
如果有多行对应于相同的 ID/组,请使用“分组列”面板中的此 ID/组列来保留此数据结构。
希望这能回答你的问题,
回复:数据预处理你好
感谢您的回答
如果我想使用(K 折交叉验证)并且我的响应类型是分类的
当我想选择 y 列时,我应该将所有预测变量和响应变量放入其中,还是仅将响应变量放入其中?
回复:数据预处理嗨@maryam_nourmand ,
谈到预处理,通常有几个步骤来准备数据以供分析:
0.划分数据:将数据划分为训练集、验证集和测试集,或者规划验证(K 折交叉验证、留一法等)和测试策略。首先应完成此操作,以确保之后进行的任何数据转换不会导致数据泄露,这意味着在模型训练期间可以找到预处理步骤中验证集和测试集中的部分信息(数据范围、分布、插补技术等)。您可以使用“制作验证列”(jmp.com)执行此步骤。
- 数据清理:我识别并纠正数据集中的错误或不一致性,以确保数据质量高且适合分析或模型训练。
- 缺失值:可以排除行、进行数据插补或不执行任何操作。请小心使用探索缺失值 (jmp.com)平台分析您的缺失值,以检查它们是 MAR(随机缺失)、MCAR(完全随机缺失)还是 MNAR(非随机缺失)。根据您拥有的缺失值类型/模式,某些选项可能比其他选项更可取。
- 与您提到的其他算法相比,基于树的模型对缺失值更加灵活,并且可以将缺失值视为信息: 信息缺失(jmp.com) 。
- 对于神经网络平台,您可以在启动平台时勾选“信息缺失”选项,以启用缺失值填补和编码。如果您不勾选此选项,则该行将被排除在分析之外。
- 当仅有少数缺失值时,朴素贝叶斯不会出现数据缺失的问题。
- 默认情况下,SVM 将排除至少有一个缺失值的行。
- 异常值:可以排除它们、平衡/加权它们(使用频率或通过转换)或不采取任何措施。您可以使用探索异常值 (jmp.com)平台使用多种方法来检测它们。
- 重复:可以排除它们、降低它们的频率或不采取任何措施。您可以使用探索模式 (jmp.com)平台检测它们(和其他模式)。
- 重复可能会影响所有算法,因为它会通过偏向或强制重复点中发现的特定模式(与其他点相比)来影响学习。如果在将数据拆分为训练、验证和测试集时没有考虑到这些因素,它还可能导致过度拟合和模型性能的错误评估。机器学习方法与统计建模非常不同,在统计建模中,重复用于评估方差和不确定性。
- 变量缩放/标准化:将所有特征/变量值纳入相似的范围内,而不会扭曲值范围的差异,以避免范围较大的特征主导范围/变化较小的特征。
这对于基于距离或相似性的算法很有帮助,例如 SVM、KNN、神经网络、(线性和逻辑)回归,并且 JMP 已默认完成(KNN 示例: https://community.jmp.com/t5/India-JMP-Users-Group-Library/Predictive-modelling-with-machine-learning-in-JMP-K-Nearest/ta-p/720639 )
基于树的模型和基于概率的算法(例如朴素贝叶斯)可能不需要缩放。
- 处理分类数据:编码时,您需要使用标签编码、独热编码、虚拟编码对分类数据进行编码......幸运的是,在 JMP 中,这已经完成并准备好了,无需自己动手(以回归模型为例):
名义效应编码的统计细节 (jmp.com)
序数因子 (jmp.com)
Stackexchange 中的类似问题和答案:
机器学习 - 除了 SVM 之外,还有哪些算法需要特征缩放? - 交叉验证(stackexchange.com)
异常值和缺失值如何影响这些分类器? - 数据科学 Stack Exchange
因此,正如我在另一个主题(以及 LinkedIn 上)所写的那样,如果您想使用 ML 算法进行第一次快速测试,请尝试使用随机森林:
- 对异常值具有鲁棒性
- 对噪声的敏感度较低(装袋有助于降低方差)
- 由于采用引导程序和可用的“袋外”(每个引导程序样本中未使用的样本)性能验证,因此不太容易过度拟合
- 良好的泛化性能
- 由于决策树集合能够使用“if-else”规则处理非线性边界,因此可以轻松处理非线性情况
- 通过在每个节点上随机选择特征子集来控制变量之间的多重共线性
- 可调谐性低:性能对超参数调整不太敏感(请参阅我关于使用 DoE 调整随机森林超参数的最新文章)
- 处理稀疏数据的能力
- 与其他算法相比更容易解释(使用“内置”特征重要性)
- 相对快速且高效的计算(取决于所使用的树的数量和深度):由于各个树彼此独立,因此训练过程可以并行化。
因此,如果您正在寻找一种准确、稳健、通用、可扩展且过拟合倾向较低的算法来分析您的数据集,那么随机森林可以是一个很好的起点和基准。始终先从简单的算法开始,然后采用良好的验证策略来评估和比较您的模型,然后再使用可能需要多层验证(构建和微调模型)的复杂算法(如神经网络)。
我希望这个长答案能对你有所帮助,