• 特征工程(Feature Engineering)


    一、什么是特征工程?

    "Feature engineering is the process of transforming raw data into features that better represent the underlying problem to the predictive models, resulting in improved model accuracy on unseen data."  

    简而言之,就是将原始数据转换为模型更容易理解的数据类型,从而提高模型的预测准确率。我认为包含三个方面:特征处理、特征选择、特征生成

    数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程尤其是特征选择在机器学习中占有相当重要的地位

    二、特征工程的作用?

    1)Better features means flexibility。伸缩性比较好,可以让你使用不太复杂的模型,运行速度更快,更容易理解,更容易维护。

    2)Better features means simpler models. 就是说你即使没有选择最正确的模型和最优化的参数,依然能得到相当满意的效果。省去了大量去研究模型的时间。

    3)Better features means better results。

     为什么特征工程能产生这么好的效果呢?我从Jason Brownlee那里得到了启发,因为特征工程把特征之间、特征与目标变量之间的潜在关系统统挖掘并完整地展示出来了。所以,对模型来讲就很容易理解了,效果自然不错了!相当于你把一个难题已经分解的很透彻了,即使小学生也能很好的理解并给出答案了。

    Jason Brownlee的主页:http://machinelearningmastery.com

    三、特征工程的处理过程。

    • Remove unnecessary features-去掉无用的特征
    • Remove redundant features-去掉冗余的特征,如:共线特征
    • Create new features-创造新特征

        1)Combine existing features
        2)Transform features
        3)Use features from the context
        4)  Integrate external sources

    • Modify feature types

        e.g. from binary to numeric

    • Modify feature values-修改特征的值,如特征的极大值、异常值、缺失值

    四、特征工程举例

    This is might be a foreign idea, so here are three examples:

    • Categorical: You have a categorical attribute that had the values [red, green blue], you could split that into 3 binary attributes of red, green and blue and give each instance a 1 or 0 value for each.
    • Real: You have a real valued quantity that has values ranging from 0 to 1000. You could create 10 binary attributes, each representing a bin of values (0-99 for bin 1, 100-199 for bin 2, etc.) and assign each instance a binary value (1/0) for the bins.

    常见做法 :

    1. 单一变量的基础转换:x, x^2,sqrt x ,log x, 缩放

    2. 如果变量的分布是长尾的,应用Box-Cox转换,包括:对数转换、平方根转换、倒数转换、平方根后再取倒数、幂转换

    3. 你也可以检查残差(Residuals)或是log-odds(针对线性模型),分析是否是强非线性。

    4. 对于基数比较大的数据,对于分类变量,创造一个表示每种类别发生频率的特征是很有用的。当然,也可以用占总量的比率或是百分比来表示这些类别。

    5. 对变量的每一个可能取值,估计目标变量的平均数,用结果当做创造的特征。

    6. 创造一个有目标变量比率的特征。

    7. 选出最重要的两个变量,并计算他们相互之间、以及与其它变量之间的二阶交叉作用并放入模型中,比较由此产生的模型结果与最初的线性模型的结果。

    8. 如果你想要的解决方案更平滑,你可以应用径向基函数核(Kadial Basis function kernel) 。这就相当应用一个平滑转换。

    9. 如果你觉得你需要协变量(Covariates ),你可以应用多项式核,或者明确添加它们的协变量。

    10.高基数特征:在预处理阶段,通过out-of-fold平均转换成数值变量。

    两个变量组合而成的特征转换 以下为一些常见的由两个变量组合而成的特征转换:

    11.加法转换

    12. 相对于基数的差值

    13. 乘法转换:交互效果

    14. 除法转换:缩放/归一化

    15. 对数值型特征设定阈值以获取其布尔值

    16.笛卡儿积变换

    17. 特征向量积:所有特征的向量积

    试想一个特征A,它有两个可能的值:{ A1,A2 } 。假设B是一个具有两种可能性{ B1,B2 }的另一特征。那么, A和B之间的向量积(我们称之为AB)将采取以下值之一: { (A1 , B1),(A1 , B2),(A2 , B1),(A2 , B2) } 。你基本上可以赋予这些”组合”你喜欢的任何名称。但要记住,每个组合都表示一个由A和B的相应值包含的信息之间的协同作用。

    18. 归一化/数据标准化变换

    在机器学习算法中提出的隐含假设(对朴素贝叶斯而言,在某种程度上是显性假设)之一是:该特征服从正态分布。不过,有时我们可能会发现该特征不遵循正态分布,而是对数正态分布。那么在这种情况下常见的手段之一是取特征值的对数(即表现出对数正态分布的那些特征值),使得它展现出正态分布。如果在使用中的算法做出了正态分布的隐含/显性假设的话,则这种转化,即将一个服从对数正态分布的特征转化为正态分布,可以帮助改善该算法的性能

    19. 分位数分级转换 (Quantile Binning Transformation)

    20. 白化数据 (Whitening the Data)

    21. 窗体压缩化 (Windowing) 如果所有的点都分布在时间轴上,那么在同一个窗口里的先前的点往往包含丰富的信息。

    22. 最小-最大归一化:不一定保留顺序

    23. S型/正切/对数转换 (Sigmoid / Tanh / Log Transformations)

    24. 用特殊方法处理0:对于计数特征有可能很重要

    25. 去相关性/转换变量

    26. 重构数量

    27.将不频繁的分类变量划分到新的/独立的类别中。

    28.按顺序应用一系列转换。

    29.独特的编码方式

    30.靶值率编码 (Target rate encoding)

    31.哈希技巧 (Hash Trick) 常见的多个变量的特征转换 以下为一些常见的多个变量的特征转换:

    32.主成分分析 (PCA)

    33. 模型集成

    34. 压缩感知 (Compressed Sensing)

    35.“猜平均值”或是“猜通过变量X分段后的平均值”

    36. 处理映射(hack projection):

  • 相关阅读:
    hostapd AP模式 2.4G/5G
    hostapd挂载不上驱动bcmdhd.ko以及SDIO读写错误
    C++入门 -- const用法(转载)
    C++ 入门 -- size_t
    C++ 入门 -- 全局变量的使用(转载)
    C++ 入门 -- const用法小结
    大数据揭示的10个常见JAVA编程错误
    jsfiddle
    ionic
    React native android 最常见的10个问题
  • 原文地址:https://www.cnblogs.com/gczr/p/6949904.html
Copyright © 2020-2023  润新知