当我使用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个功能,有更好的方法吗?
答案 0 :(得分:0)
对于你的问题的第一部分,每个虚拟变量被认为是一个独特的特征(以你的12个月假人为例,它将产生11/12虚拟变量。以Jan为基准常数,其他11的系数假人告诉你某个月的平均常数是否与Jan不同,所以RFE
为你选择两个月的虚拟特征是完全合理的。
但是,由于您在LinearRegression
中使用默认RFE
,而RFE
使用.coef_
对要素重要性进行排名,因此您应设置LinearRegression(normalize=True)
。否则,基于线性回归系数选择特征是没有意义的。