【问题标题】:Sklearn RFE with pandas get_dummiesSklearn RFE with pandas get_dummies
【发布时间】:2015-09-27 08:57:35
【问题描述】:

当我有使用 pandas get_dummies 创建的分类列时,我试图了解如何将 sklearn RFE 用于线性回归模型

我有一个数据集,布局是:

y = Carsales
X = Unemployment, Queries, CPI_energy, CPI_all, Month(comes in as an int)

我做的第一件事是将月份转换为对象,然后是类别(直接转换为类别类型在 pandas 中不起作用)。

df['MonthFac'] = df['Month'].astype('object')
df['MonthFac'] = df['MonthFac'].astype('category')

然后我创建我的 X,y:

from sklearn.linear_model import LinearRegression
cols = ['Unemployment','Queries','CPI_energy','CPI_all']
X = pd.concat([train[cols],(pd.get_dummies(train['MonthFac']))], axis = 1)
y = train['ElantraSales'].values

lm1 = LinearRegression()

lm1.fit(X,y)

那我想用RFE:

from sklearn.feature_selection import RFE

selector = RFE(lm1,step=1, n_features_to_select = 2)
selector.fit(X,y)

寻找 2 个功能的简单 RFE,但结果是它将月份列中的 2 个列为 1,从技术上讲,我只需要仅当月份列中的 1 个为 1 时,我才会使用“MonthFac”变量对于构建我的模型很重要,我想知道要使用的其他排名靠前的变量是什么。

或者我只是应该使用我的演绎推理来根据selector.ranking_ 输出找出要使用的其他变量吗?

与 R 相比,sklearn 的学习曲线似乎要高很多。

我也在 pandas/sklearn 中做分类值吗?在 R 中,我所要做的就是 as.factor 和 BAM,它完成了所有这些。

还有一个问题,如果我不确定最适合的功能数量是多少,我认为我可以创建一个循环选择器 R^2/R^2 adj/MSE 并将它们打印出来,但是因为我还有额外的一个月列会我的循环转到 16,因为基本上有 16 个功能,有没有更好的方法来做到这一点?

【问题讨论】:

  • 如果能帮助您解决问题,您能接受我的回答吗?非常感谢。 :-)
  • 抱歉,再次感谢!
  • 完全没有问题。 :-) 很高兴它有帮助。

标签: pandas scikit-learn categories rfe


【解决方案1】:

对于您问题的第一部分,每个虚拟变量都被视为一个独特的特征(以您 12 个月的虚拟变量为例,它会产生 11/12 的虚拟变量。以 Ja​​n 作为基准常数,其他 11 dummies 会告诉您某个特定月份的平均常数是否与 Jan 不同),因此 RFE 为您选择两个月的虚拟特征非常有意义。

但是,由于您在RFE 中使用了默认的LinearRegression,而RFE 使用.coef_ 对特征重​​要性进行排序,因此您应该设置LinearRegression(normalize=True)。否则,基于线性回归系数选择特征是没有意义的。

【讨论】:

  • 如何将 RFE 改为使用 R^2?
  • @Neil 你不能。 RFE 将根据.coef_(回归)或.feature_importances_(基于树)对特征进行排名。但是,当您在 LinearRegression 中标准化您的特征时,.coef_ 非常接近由该特定特征解释的方差,即 R2。其实这就是RFE会根据.coef_进行特征选择的原因。
  • 啊,好吧,所以一般来说,对于这样的数据集,是否有确定使用哪些特征的最佳实践方法?喜欢看 P 值吗? AIC(我认为我无法在线性回归模型上使用 sklearn 计算)?
  • @Neil 您可以使用GridSearchCV 来确定有多少功能可以为您提供最佳交叉验证结果。或者,将其设置为某个固定数字,例如 10 或 20,以保持模型简洁也是可以接受的。
猜你喜欢
  • 2021-04-12
  • 1970-01-01
  • 2017-02-25
  • 2017-04-11
  • 2018-05-21
  • 2020-07-04
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多