python - 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) 等大型数据集上练习时,我是否必须自己消除所有列?因为这是很多工作,或者有某种算法或方法可以做到这一点。
这可能是一个愚蠢的问题,但我是机器学习的初学者,所以任何帮助表示赞赏。谢谢
解决方案
简而言之,您尝试做的事情称为“递归特征消除” 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,这将只选择信息量最大的因素。
推荐阅读
- html - 如何将 SVG 作为内容添加到 ::after 伪元素并对其进行缩放?
- html - Bootstrap Toggler 阻止 Accordion Toggler?
- python - 通过 Python 脚本自动更新 GitHub 存储库上的本地 CSV
- laravel - 在特定日期时间发送 webhook laravel 8
- java - 如何读取 txt 文件并将其输入到对象数组中
- windows - 使用 PowerShell 在 Windows 中更改字体设置
- ubuntu - 当我指定它使用 587 时,Postfix 正在使用端口 25
- python - 二维循环在 python 中不能按预期工作
- c++ - 当使用虚拟继承时,为什么类的大小会以某种不一致(模式化)的方式增加?
- django-rest-framework - DRF 将 2 个字段序列化为数组