作者aaaba (小强)
看板deeplearning
标题[转录] [闲聊] 菜鸟上Kaggle: 房价预测
时间Sat Mar 10 08:48:22 2018
作者: pipidog (如果狗狗飞上天) 看板: Python
标题: Re: [闲聊] 菜鸟上Kaggle: 房价预测
时间: Thu Mar 8 05:42:17 2018
再补充一下昨天那篇文章的第一点,关於特徵选取的一些心得:
如果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降维等等,因为用
这种方式做完的特徵意义已经不明,那就是另一个故事了.我想也偏离了这篇的主
题,就不提了. 如果还有好的方法也欢迎分享,相互交流.
--
★人生中最温暖的夏天是在纽约的冬天★
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 73.66.168.95
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1520458944.A.357.html
※ 编辑: pipidog (73.66.168.95), 03/08/2018 05:50:53
1F:推 b24333666: 推 03/08 06:39
2F:推 aaaba: 你不要那麽专业好不好 03/08 13:41
3F:推 bestchiao: 感谢分享 不晓得有没有分享在github的习惯 03/08 16:06
4F:推 stoltzman: 推!对初学者给了一些方向!! 03/09 15:52
5F:推 smartree: 大神有 GIThub 可以 follow 吗? 03/09 16:46
6F:推 wallrose: 推 03/10 03:55
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 101.8.6.231
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/deeplearning/M.1520642904.A.947.html
7F:推 Rprogramming: 请教一下 feature一般是如何得到的? 03/12 01:39
8F:→ Rprogramming: 如果是linear regression的话 03/12 01:39
9F:推 poiuy8568: 推 PCA基本是用变异数的想法去剔除掉差异不大的特徵去 03/14 01:15
10F:→ poiuy8568: 做降维处理 此外也会用梯度递减的方式去测试杂讯的剔 03/14 01:15
11F:→ poiuy8568: 除效果 03/14 01:15
12F:推 Gaji: 推 03/16 06:26