V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hujianxin
V2EX  ›  程序员

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

  •  
  •   hujianxin · 2016-06-06 17:12:14 +08:00 · 3393 次点击
    这是一个创建于 3076 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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


    第二步,要把相关的特征去掉,取特征尽量取正交的特征,这样训练起来不会在 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
        5
    hujianxin  
    OP
       2016-06-07 09:17:29 +08:00
    @menc 多谢回复,非常收益
    heliumhgy
        6
    heliumhgy  
       2016-06-07 11:37:13 +08:00
    传统方法中,特征工程是很重要的一个过程,一般都是手工构造特征。
    SlipStupig
        7
    SlipStupig  
       2016-06-07 12:34:52 +08:00
    @menc 大神能留个联系方式么,想跟你交流一些问题
    menc
        8
    menc  
       2016-06-08 11:59:58 +08:00
    @SlipStupig
    在这里说就好了,没事的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2050 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:15 · PVG 00:15 · LAX 08:15 · JFK 11:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.