我有50个预测变量和1个目标变量。所有我的预测变量和目标变量都是二进制数字0和1。我使用R进行分析。
我将实施四种算法。1. 随机森林 2. 逻辑回归 3. 支持向量机 4. 线性判别分析
我有以下问题:
我将它们全部转换为因子。在将它们输入到其他算法之前,我应该如何预处理我的变量?
我使用caret包来训练我的模型,耗时很长。我定期进行机器学习实践,但不知道如何处理所有变量都是二进制的情况。
如何移除共线变量?
回答:
我不是主要的R用户,而是Python用户。但应该有通用的方法:1. 检查你的列。如果零或一的数量超过总数的95%(你可以后来尝试2.5%或甚至1%),就移除该列。2. 运行默认的简单随机森林并获取特征重要性。可以用LDA处理不需要的列。3. 检查目标列。如果它高度不平衡,尝试过采样或欠采样。或者使用可以处理不平衡目标列的分类方法(如XGBoost)。
对于线性回归,你需要计算相关矩阵并移除相关列。其它方法可以不这样做。
请检查SVM(或SVC)是否支持所有特征为布尔值。如果通常它对二元分类表现很好。
我还建议尝试神经网络。
PS 关于共线变量。我为我的项目在Python上写了一段代码。这很简单 – 你可以这样做:- 绘制相关矩阵 – 找出相关性超过某个阈值的对 – 移除与目标变量相关性较低的列(你还可以检查你想要移除的列是否不重要,否则尝试其他方法,可能需要合并列)
在我的代码中,我对不同的阈值从0.99到0.9迭代运行这个算法。效果很好。