sklearn RFE with pandas get_dummies

时间:2015-07-09 06:33:21

标签: pandas scikit-learn categories linear rfe

当我使用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)

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

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

与R相比,sklearn学习曲线看起来要高得多:/

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

还有一个问题,如果我不确定我能想到的最佳功能是什么,我可以创建一个循环选择器R ^ 2 / R ^ 2 adj / MSE并打印出来但是因为我有那些额外的月份列将我的循环转到16,因为基本上有16个功能,有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

对于你的问题的第一部分,每个虚拟变量被认为是一个独特的特征(以你的12个月假人为例,它将产生11/12虚拟变量。以Jan为基准常数,其他11的系数假人告诉你某个月的平均常数是否与Jan不同,所以RFE为你选择两个月的虚拟特征是完全合理的。

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