我参加了在线课程,讲师使用数据集(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.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,这只会选择最有用的因素。
关于python - 向后消除python中的大型数据集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59990400/