weixin_40140746
weixin_40140746
2018-07-06 07:03
采纳率: 20%
浏览 827

【提问】请教python调用sklearn完成特征工程问题

b_model = pd.read_csv('C:/Users/USER/Desktop/b_model.csv')

b_model_skip = b_model.drop(['borrower_index','begin_time','withhold_time_first','num_period_percent',

                   'f01','f02','f03','f04','f05','f06','f07','f08','f09','f10'],axis=1)

b_model_dropnan = b_model_skip.dropna()

b_model_dropnan_independentvariable = b_model_dropnan.drop(['target'],axis=1)

b_model_dropnan_label = b_model_dropnan.target

x, y = b_model_dropnan_independentvariable, b_model_dropnan_label

图片说明
这时候,b_model_dropnan_independentvariable 是Dataframe数据框格式,具有列名。

from sklearn.feature_selection import VarianceThreshold

sel = VarianceThreshold(threshold=(.8 * (1 - .8)))

b_model_dropnan_variancethreshold = sel.fit_transform(b_model_dropnan_independentvariable)

当我使用sklearn移除低方差特征后,b_model_dropnan_variancethreshold 是arrat数组格式,是没有列名的。

图片说明
这种情况下,首先,我确认是可以通过算法建立模型的,但数组没有列名的情况下,我后面如何确认feature importance呢?只确认留下是哪些与target高度相关的变量。

也无法转换为dataframe格式,然后重命名,毕竟特征数量过多,无法一一比对重新命令,而且有的低相关性变量也会变删除,很难进行比对。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • PIPIXIU
    PIPIXIU 2018-07-09 09:04
    已采纳

    筛选后的列名可以获取到的啊

      sel.get_support()
    

    会返回一个布尔数组(array([ True, False, False, True])),
    再通过下面的代码就把列名去除来了啊

     cols = [b_model_dropnan_independentvariable.columns.values[i] for i,j in enumerate(sel.get_support()) if j]
    
    点赞 评论

相关推荐