weixin_40140746 2018-07-06 07:03 采纳率: 0%
浏览 851
已采纳

【提问】请教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 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]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料