【问题标题】:Backward Elimination on large datasets in pythonpython中大型数据集的反向消除
【发布时间】:2020-05-16 07:50:48
【问题描述】:

我参加了一个在线课程,讲师使用数据集 (50,5) 解释了反向消除,您可以通过查看列的 p 值手动消除列。

 import statsmodels.api as sm
 X = np.append(arr = np.ones((2938, 1)).astype(int), values = X, axis = 1)
 X_opt = X[:, [0,1,2,3,4,5]]
 regressor_OLS = sm.OLS(endog = y, exog = X_opt).fit()
 regressor_OLS.summary()

 # Second Step
 X_opt = X[:, [0,1,,3,4,5]]
 regressor_OLS = sm.OLS(endog = y, exog = X_opt).fit()
 regressor_OLS.summary() 
 # and so on

现在在我拥有的 (2938, 214) 等大型数据集上练习时,我是否必须自己消除所有列?因为这是很多工作,或者有某种算法或方法可以做到这一点。

这可能是一个愚蠢的问题,但我是机器学习的初学者,因此感谢任何帮助。谢谢

【问题讨论】:

  • 更好的方法是将 PCA(主成分分析)应用于您的 m 预测变量,并且只保留您获得的 n 最重要的新功能。看看this answer
  • @VictorDeleau 这取决于,他的特征可能(并且可能确实)存在多重共线性、低特征方差或不为他的任务提供判别信息等问题。 PCA 仅创建解释内在数据差异的基础。特征选择至少是重要的第一步,不应该随意挥手。

标签: python machine-learning linear-regression


【解决方案1】:

你要做的就是所谓的“递归特征消除”,简称RFE

来自sklearn.feature_selection.RFE的示例:

from sklearn.datasets import make_friedman1
from sklearn.feature_selection import RFE 
from sklearn.svm import SVR 

X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)
estimator = SVR(kernel="linear")
selector = RFE(estimator, 5, step=1)
selector = selector.fit(X, y)

这将删除使用SVR 的功能,直到只剩下最重要的5。您可以使用任何提供feature_importances_ 对象成员的算法。

当涉及到p-values 时,您可以消除所有大于阈值的内容(假设零假设是该系数没有意义,例如为零),但请参见下文。

请记住,通常系数权重会随着其中一些被删除(如此处或 RFE 中的)而改变,因此它只是取决于许多因素的近似值。您可以进行其他预处理,例如删除相关特征或使用带有 L1 惩罚的 OLS,这将只选择信息量最大的因素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-08
    • 2018-10-10
    • 1970-01-01
    • 2023-03-07
    • 2020-10-09
    • 1970-01-01
    • 2019-01-04
    • 2023-03-15
    相关资源
    最近更新 更多