我参加了在线课程,讲师使用数据集(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)这样的大型数据集时,我是否必须自己消除所有列?因为那是很多工作,或者有某种算法或方法可以做到。
这可能是一个愚蠢的问题,但是我是机器学习的初学者,所以请您多多帮助。谢谢
您要尝试做的事情称为“递归特征消除”,简称RFE
。
sklearn.feature_selection.RGE
中的示例:
sklearn.feature_selection.RGE
这将消除使用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_
,您可以消除所有大于阈值的情况(假设零假设是该系数没有意义,例如为零),但请参见下文。
[请记住,通常系数权重会随着其中一些权重的去除而发生变化(如此处或在RFE中),因此,这只是一个近似值,取决于许多因素。您可以进行其他预处理,例如删除相关特征或使用带有L1罚分的OLS,这只会选择最有用的因素。