在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() # 第二步 X_opt = X[:, [0,1,,3,4,5]] regressor_OLS = sm.OLS(endog = y, exog = X_opt).fit() regressor_OLS.summary()  # 依此类推

现在我在练习时使用了一个较大的数据集(2938, 214),我是否需要自己手动消除所有的列?因为这工作量很大,有没有某种算法或方法可以自动完成?

这可能是一个愚蠢的问题,但我是一个机器学习的新手,所以任何帮助都会被感激。谢谢


回答:

你正在尝试做的事情被称为“递归特征消除”,简称RFE

来自sklearn.feature_selection.RFE的例子:

from sklearn.datasets import make_friedman1from 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值,你可以消除所有大于阈值的(假设原假设是这个系数没有意义,例如为零),但请看下面的内容。

请记住,通常当一些系数被移除时,系数的权重会发生变化(如这里或在RFE中),所以这只是一个依赖于许多因素的近似值。你可以进行其他预处理,比如移除相关特征,或使用带L1惩罚的OLS,这将只选择最有信息量的因素。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注