Re: [闲聊] 菜鸟上Kaggle: 房价预测

楼主: pipidog (如果狗狗飞上天)   2018-03-08 05:42:17
再补充一下昨天那篇文章的第一点,关于特征选取的一些心得:
如果feature很多,那是如何减少是个大学问. 不然维度诅咒一下来,模型就gg了.
这种如何建构好的特征的问题,被统称叫"feature engineering". 各种神技可能
几天几夜都说不完. 坦白说我知道的也不多,只能分享一些"我认为"(所以可能错)
大致上的做法.常用的特征选取法有三大类: filter, wrapper, embedding.
1). filter:
这是最简单的也最基本的特征选取方法,尤其在数据样本数很大的时候,这是最代价
最低的做法. 基本上就是统计一下哪些feature跟target的correlation高.
然后你人为设个阀值把correlation低的feature通通丢掉.
例如一个极端的情况,如果有一个数据,不管target data是啥,某个feature几乎都是1,
只有少数,例如2%是0,很明显的这个feature根本和target没太大关联性,这基本上就
可以删去. 看这篇:
https://tinyurl.com/ycoqh28u
2). wrapper:
wrapper简单的就是你用一个简单的模型去测试,用那些feature来训练出来的模型准
确率最高,差的feature就丢掉. 这作法满合理的,算是透过实证来找出好的特征.但这
有两个大问题. 1.你等于在训练很多模型,如果资料量很大满耗时间的. 2.你用A模型
来估计特征的重要性,并不表示你把选出的特征用在B模型时表现就会比较好.所以如果
要用这种方法,你要考虑的问题比较多. 用来选特征的模型跟日后训练的模型要尽可能
在原理上接近.但如果选得好,那表现应该会比filter好得多.
看这篇:
https://tinyurl.com/ycgbwv5c
3). embedding:
embedding算是第一种跟第二种方法的一种平衡,它既不是透过第一种,单纯的从统计
给结果,也不是如第二种挑一个专一性高的模型直接做测试. 它主要是透过一些通用
性的模型来自动挑出特征权重.最常用的一种就是Lasso了. Lasso,基本上就是在线
性回归里面加入L1正规化,尽可能的强迫大多数的线性回归系数是0,或接近0,所以你
可以透过查看每个特征在线性回归下被赋予的权重是多少,以此为依据来挑选重要的
特征. 这方法的好处是,它是基于一个实测的模型给答案,缺点是,它也就只是个简单
的模型. 另外tree也是一个常用的手段,它也可以帮你筛出那些特征比较重要.
用tree来筛特征最大的好处是,tree对特征的取值范围不敏感,所以你不用考虑把特
征归一化的问题,甚至也可以对catagorical的特征来做.对特征差异性大的问题,这
也是一个好方法.
在sklearn里面给出了一个用Lasso挑特征的范例:
https://tinyurl.com/y74er3r5
* 洋洋洒洒提了一些方法,也只是一些肤浅的概述,如何建构好的特征是一门大学问,
但功力有限,也就只能说到这了. 其他还有很多方法,例如用PCA降维等等,因为用
这种方式做完的特征意义已经不明,那就是另一个故事了.我想也偏离了这篇的主
题,就不提了. 如果还有好的方法也欢迎分享,相互交流.
作者: b24333666 (比飞笨)   2018-03-08 06:39:00
作者: aaaba (小强)   2018-03-08 13:41:00
你不要那么专业好不好
作者: bestchiao (呼拉拉)   2018-03-08 16:06:00
感谢分享 不晓得有没有分享在github的习惯
作者: stoltzman (......)   2018-03-09 15:52:00
推!对初学者给了一些方向!!
作者: smartree (阿路)   2018-03-09 16:46:00
大神有 GIThub 可以 follow 吗?
作者: wallrose (墙玫瑰)   2018-03-10 03:55:00

Links booklink

Contact Us: admin [ a t ] ucptt.com