首页 > 解决方案 > python中大型数据集的反向消除

问题描述

我参加了一个在线课程,讲师使用数据集(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) 等大型数据集上练习时,我是否必须自己消除所有列?因为这是很多工作,或者有某种算法或方法可以做到这一点。

这可能是一个愚蠢的问题,但我是机器学习的初学者,所以任何帮助表示赞赏。谢谢

标签: pythonmachine-learninglinear-regression

解决方案


简而言之,您尝试做的事情称为“递归特征消除” 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,这将只选择信息量最大的因素。


推荐阅读