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 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决