非深度学习,有哪些特征提取方案呢?

2016-06-06 17:12:14 +08:00
 hujianxin

小弟最近做的一个题目,有拧螺丝过程的转角,扭矩,时间之间的曲线。想这样的数据分类,如何提取特征呢?深度学习可以自动提取特征,普通机器学习方法,对于这种非图像,非语音数据,有哪些特征提取的方式呢?

特来求老司机带一带,不胜感激!

3365 次点击
所在节点    程序员
8 条回复
yuyang1110
2016-06-06 17:14:57 +08:00
这个。。。输入特征直接是那条曲线就好了。。
zjj2008se
2016-06-06 17:16:23 +08:00
线性回归? k-mean 聚类?
qcts33
2016-06-06 22:55:38 +08:00
这些有明确物理含义的数据之间一般都有明确的数学关系,这种时候我觉得手动推导一下反而更有效……
menc
2016-06-07 00:19:35 +08:00
我不懂你的问题是什么,但是举一个差不多的例子。

一个开在电影院旁边的奶茶店卖奶茶和果汁,让你预测明天的销量,应该怎么找特征呢?

第一步,用脑子想,有什么因素可能影响销量呢?恩,考虑饮品销量可能不会突变,会平滑变化,那么过去几天的销量可能和明天的销量相关;恩,夏天果汁和奶茶会卖的多一些;恩,旁边电影院放大片的时候顾客多,销量会多一些;恩星期六星期日销量会多一些;法定节假日人也会多,卖的也会多一些等等等等。。。
然后去搜集相关的数据。

那么已知:
今天的总销售量
昨天的总销售量
前天的总销售量
今天的奶茶销售量
今天的果汁销售量
今天的天气(阴晴雨雪雾霾冰雹大风)
今天是星期几
明天是星期几
今天是否是节假日
明天是否是节假日
今天电影院上映的电影过去七天的票房
....
林林总总的数据。


第二步,要把相关的特征去掉,取特征尽量取正交的特征,这样训练起来不会在 loss function 那里飘忽不定。也不会让特征有一个钦定的初始权重,假设你使用 LR 模型,选用了两个基本一样的特征,那么该特征的权重就天然是其他特征的二倍了。
比如饮品店里,有三个特征,今日销售额,今日奶茶销售额,今日其他饮品销售额,显然今日销售额是今日奶茶销售额和其他饮品销售额的现行叠加,第一个特征和第二,第三个特征成相关性,那么就应该将其舍弃,至于舍弃特征一还是舍弃特征二三,看你的取舍咯,或者各自做一下实验看看效果。

第三步,上一步经过选择后,得到一系列原始特征,下一步要做的是数值化。
数值化又分这几种:
第一种,离散的。 比如预测奶茶销售额的 case ,明天是星期几可能非常影响销售量,星期六星期日最高,星期一星期五次之,星期二到星期四最低,那么可以采用 one hot representation 的方式,把 weekday 拆分成一个 7 维的向量,明天是星期几就在星期几置 1 ,比如明天是星期日,那么 weekday 特征就是[0,0,0,0,0,0,1]七维。
第二种, scale 非常大的数值特征,但又不能舍弃的。比如假设淡季每天只卖 1k 元,节假日每天能卖 20k 元,而一般的时候能卖 10k ,那么这个特征的范围就过大,在 normalization 中会大大影响特征的表示能力,会影响特征的权重。这时候应该做的是,将特征拆分开,即使特征是连续的。
那么销售额就拆分成一个 n 维的 01 特征: 0-4k,4-8k,8-12k,12-16k,16-20k;然后每一个销售额都是一个五维向量,当然你也可以分得更细,不要害怕, LR 模型里面几万维度都有可能。
比如一个 17k 的销售额,特征向量就是[0,0,0,0,1]五维。
第三种,很平凡的数值特征, scale 也不太大,比如门口过路的游客数量,如果固定在 10k-20k ,且分布均匀,就可直接当数值特征。

第四步,现在你拥有了一系列的数值特征,我们大可以抽象掉他们,叫特征 1 ,特征 2 ,特征 3 , f4, f5...
f1:1800
f2:[0,0,0,0,0,0,1]
f3:[0,0,0,1,0]
f4:2k
...

下一步要做的是 normalization ,用脚趾想想值为 1800 的特征对结果的贡献是值为 1 的特征的一千八百倍,而 1800 在这个特征中可能表示一个非常弱的结果(比如游客数量,日均 5k ,今天只有 1k8 ),我们要尽量缩小这种特征表示上的差距,而让对结果的贡献显示在特征本身的含义和特征的权重上,而不让数值来影响,这个就叫做 normalization ,

对每个数值特征(就是还没被打散的特征),取所有数据中最大和最小的,然后映射到[0,1]区间内,[-1,1]也可以,[-0.5-0.5]也能接受,总之就是一个小区间内,让数值特征的数量级和其他数值特征大致等同。

那么现在,你可能得到了
f1:0.18
f2:[0,0,0,0,0,0,1]
f3:[0,0,0,1,0]
f4:0.66


第五步,拉伸成一个特征向量( f1,f2,f3,f4,f5)
[0.18,0,0,0,0,0,0,1,0,0,0,1,0,0.66]

这个就是你的输入特征咯,特征工程到此结束,下一步训练模型。

不论是分类还是回归,都是这么个路数,分类和回归的区别就是放的模型不一样。
你要用 LR 或者 SVM ,就放到 LR 或者 SVM 中,要是 DART 就放到 DART 中,特征都是一样的。
hujianxin
2016-06-07 09:17:29 +08:00
@menc 多谢回复,非常收益
heliumhgy
2016-06-07 11:37:13 +08:00
传统方法中,特征工程是很重要的一个过程,一般都是手工构造特征。
SlipStupig
2016-06-07 12:34:52 +08:00
@menc 大神能留个联系方式么,想跟你交流一些问题
menc
2016-06-08 11:59:58 +08:00
@SlipStupig
在这里说就好了,没事的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/283893

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX