精华内容
下载资源
问答
  • 机器学习 特征工程之特征选择

    千次阅读 2017-03-25 11:20:16
    机器学习和统计学中,特征选择 也被称为变量选择、属性选择 或变量子集选择 。它是指:为了构建模型而选择相关特征(即属性、指标)子集的过程。 在机器学习中,每个特征对于目标类别的影响并不相同,所以需要从...

    概念

    首先看一下维基百科中关于特征选择的介绍:

    在机器学习和统计学中,特征选择 也被称为变量选择、属性选择 或变量子集选择 。它是指:为了构建模型而选择相关特征(即属性、指标)子集的过程。

    在机器学习中,每个特征对于目标类别的影响并不相同,所以需要从特征集中挑选出一组最具统计意义的特征子集,把其他无用数据删掉,达到降维的目的。

    特征选择的目标是寻找最优特征子集。特征选择能剔除不相关(irrelevant)或冗余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目的。另一方面,选取出真正相关的特征简化模型,协助理解数据产生的过程。

    常用的特征选择方法分为过滤法(Filter)、包装法(Wrapper)和集成法(Embedded)

    下面有个清晰的特征工程的思维导图:

    这里写图片描述
    图片源自(http://www.csuldw.com/2015/10/24/2015-10-24%20feature%20engineering/

    过滤法(Filter)

    按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征

    方差选择法

    使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。默认设置下,它将移除所有方差为0的特征,即那些在所有样本中数值完全相同的特征。

    相关系数法

    使用相关系数法,先要计算各个特征对目标值的相关系数以及相关系数的P值。

    卡方检验

    经典的卡方检验是检验定性自变量对定性因变量的相关性。

    互信息法

    经典的互信息也是评价定性自变量对定性因变量的相关性的

    filter(刷选器)优缺点

    上面提到的这种特征子集选择的方法属于filter(刷选器)方法,它主要侧重于单个特征跟目标变量的相关性。优点是计算时间上较高效,对于过拟合问题也具有较高的鲁棒性。缺点就是倾向于选择冗余的特征,因为他们不考虑特征之间的相关性,有可能某一个特征的分类能力很差,但是它和某些其它特征组合起来会得到不错的效果。

    包装法(Wrapper)

    根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。有逐步回归(Stepwise regression)、向前选择(Forward selection)和向后选择(Backward selection)

    递归特征消除法

    递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练

    wrapper(封装器)优缺点

    封装器用选取的特征子集对样本集进行分类,分类的精度作为衡量特征子集好坏的标准,经过比较选出最好的特征子集。常用的有逐步回归(Stepwise regression)、向前选择(Forward selection)和向后选择(Backward selection)。它的优点是考虑了特征与特征之间的关联性,缺点是:当观测数据较少时容易过拟合,而当特征数量较多时,计算时间又会增长。

    集成法(Embedded)

    集成法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。Regularization,或者使用决策树思想,Random Forest和Gradient boosting等

    基于惩罚项的特征选择法

    使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。

    基于树模型的特征选择法

    树模型中GBDT也可用来作为基模型进行特征选择

    特征选择-有效性分析

    对特征的有效性进行分析,得到各个特征的特征权重,根据是否与模型有关可以分为1.与模型相关特征权重,使用所有的特征数据训练出来模型,看在模型中各个特征的权重,由于需要训练出模型,模型相关的权重与此次学习所用的模型比较相关。不同的模型有不同的模型权重衡量方法。例如线性模型中,特征的权重系数等。2.与模型无关特征权重。主要分析特征与label的相关性,这样的分析是与这次学习所使用的模型无关的。与模型无关特征权重分析方法包括(1)交叉熵,(2)Information Gain,(3)Odds ratio,(4)互信息,(5)KL散度等

    资料引用

    本文是自己在学习过程中,阅读博客整理而来,大部分是直接摘取自他人内容,如有侵权,请告知删除,有些引用内容有所遗漏,没有注明,请告知。

    http://www.csuldw.com/2015/10/24/2015-10-24%20feature%20engineering/

    https://www.zhihu.com/question/29316149

    展开全文
  • 机器学习特征工程

    千次阅读 2018-07-10 15:42:33
    1. 为什么做特征工程 我们学习编程语言时被告知程序=数据结构+算法,那么对于机器学习,我认为也可以类比为机器学习=大数据+机器学习算法+运行平台。面对一个机器学习问题,一般有两种解题思路:传统机器学习...

    1. 为什么做特征工程

           我们学习编程语言时被告知程序=数据结构+算法,那么对于机器学习,我认为也可以类比为机器学习=大数据+机器学习算法+运行平台。面对一个机器学习问题,一般有两种解题思路:传统机器学习算法或者深度学习算法。一般而言,传统机器学习需要的样本数量相对少、算法运行快、内存开销小、算法的运行和部署难度小,但困难是对数据的表示:特征工程,也可以形容为沙里淘金;而深度学习算法,可以让算法自己学习数据的特征表示,因此易上手但需要海量的数据样本、需要的计算资源和内存大、算法模型的调参难度大。

          就我个人的感觉,传统机器学习算法的运用需要仔细构建数据特征,数据和特征工程决定了算法容量的上限。深度学习的算法容量上限主要受限于数据的规模和计算能力,对人的要求比传统机器学习相对低一些,降低了机器学习问题解决的门槛。不幸的是,很多时候运用机器学习算法的问题领域数据受限或者计算资源受限,较为适宜于运用传统机器学习算法,此时做特征工程尤为重要。

    2. 什么是特征工程

          特征工程就是挖掘对数据的特征表示,寻找表征数据内在特点的性质,将其用用特征向量的形式表示,这一步骤被称为特征提取。例如一条数据的特征向量是x=<x1,x2,..., xn>,即数据有n个特征,特征xi的取值是连续的实数或者描述型的整数。以文本分类为例,文本数据中所有的词就是文本的特征,一个文本中词出现的频率可以作为该文本的特征取值,这种方法在文本分类中被称为词袋法,寓意是文本是由词袋中抽取的一个个词构成的。

        数据被抽取特征生成特征向量后,我们获得了数据的内在特征表示,需要进一步对特征进行分析:对数据进行量纲上的统一、看看特征的内在相关性、特征是否对所要解决问题有用,数据特征能否进行直观的展示等。以上这些可以被归纳为特征工程的步骤包括:特征提取、特征清洗、特征选择、特征降维、数据特征可视化,下面一一介绍。

    3. 怎么做特征工程

    3.1 特征提取

        特征工程的第一步是特征提取,提取数据内在表征的性质,将其转换为数值表示的特征向量。假设有N个数据样本,每个数据样本提取M个特征,则数据集进行特征提取后得到N*M维度的特征向量。

        那么如何提取数据的特征呢?一种方法是通用型的方法,将数据进行某种散列式的处理,得到数据散列后的所有特征,然后进行数值化的表示,例如文本分类时对文本数据进行分词,将文本中出现的词作为文本的特征,然后将词在文本中的统计特征作为该词的数值化表示。另一种方法是根据数据要解决的问题,寻找对要解决该问题有针对性的特征,将其进行数值化。这要求机器学习的应用者对所要解决的问题的领域有很深的理解,具有较深的专家知识才能做到,一种取巧的方法是看该问题领域内的学术论文,让专家帮助咱们寻找特征,但这只能帮助帮助我们将机器学习模型调到不错的性能,机器学习算法性能的上界还是取决于我们自己对真正所要应用数据的特征挖掘。

        特征提取是用机器学习算法解决应用问题的基础,会占用了我们机器学习实施过程的大部分时间和精力,也没有系统性的通用方法,只能由我们不断迭代的优化提取。但在有些研究领域,也有一些指向性的方法,例如文本分类,提取文本数据特征的方法一般是将文本散列化,有两种较通用方法:1)词袋法,先将文本分词,然后将所有的词作为文本的特征;2)N-Gram语言模型,文本中的每个词只与其之前的N个词有关,我们按照N=2或3将文本散列成每2或3个字(对于中文是字,对于英文是字符)组成的字组,然后将所有的字组作为文本的特征。得到文本特征之后需要进行数值化,也有两类方法:a)一种是统计型数值方法,统计一个文本数据中每个特征词(或者字组)出现的词频、文档频、在文本不同类别中出现的次数,构成一个特征权重计算公式,计算特征词的权重作为数值化表示,例如TF-IDF; b)将词(或者字组)进行词嵌入表示,例如word2vec/gloVe,词嵌入能够表示词之间的语义相关性,是一种词的稠密表示,即将一个特征值数值化为一个K维的向量(k=50,100,200等)。据我个人的经验,如果文本数据样本较多,且每个文本数据的长度较大,直接用词袋法+统计型数值化方法即可;对于数据样本有限,且文本多为短文本时,用N-Gram+词嵌入方法可能更好。更一般的做法是,将以上方法进行两两组合,然后放到不同算法模型中迭代,寻找最优的组合。

    3.2 特征清洗

        数据特征被提取后,需要对特征进行统计分析,然后做如下处理:

        3.2.1. 缺失值填充

        有些数据样本中的特征可能由于某些原因存在缺失值,对于缺失值存在三种处理方法:

             a) 如果某个特征的缺失值比较多:可能就直接舍弃。
           b) 如果缺失值不是很多,而且是连续特征:可以考虑用回归方法去拟合,或者直接用众数、中位数、平均数等具体的值去替代即可。

             c) 如果缺失值不是很多,而且是非连续特征:可以尝试把缺失值当做一个新的类目去处理,可能也揭示了一定的客观现实。

      Python的sklearn库也有缺失值处理的功能:

    from numpy import vstack, array, nan
    from sklearn.preprocessing import Imputer
    #缺失值计算,返回值为计算缺失值后的数据
    #参数missing_value为缺失值的表示形式,默认为NaN
    #参数strategy为缺失值填充方式,默认为mean(均值)
    Imputer().fit_transform(vstack((array([nan, nan, nan, nan]), iris.data)))

         3.2.2. 移除固定值的特征

         3.3.3. 移除低方差的特征

         3.3.4. 描述性变量转换

            对于描述性的变量,要看变量的性质:

       a)对于有序变量,例如非常满意、满意、不满意、非常不满意,变量的不同取值有内在顺序关系,可以用公式转换:Value=(i-1/2)/N且i=1,2,...,N,这里N表示变量取值的总数,这个公式保留了变量取值的顺序关系;

       b)对于无序变量,可以采用one-hot编码的方式。例如特征取值范围是{春、夏、秋、冬},则一个数据的特征取值为“夏”,则one-hot编码是0100,若特征取值为"秋"则one-hot编码是0010。python的sklearn库支持one-hot编码转换:

    from sklearn import preprocessing
    import numpy as np
    label = preprocessing.LabelEncoder()
    one_hot = preprocessing.OneHotEncoder(sparse = False)
    cat_data =([1,3,2], 
               [2,1,1],
              [4,2,2])
    print one_hot.fit_transform(cat_data)

         3.2.5. 连续特征离散化

            连续特征可以当非连续特征来用,非连续特征可以当连续特征来用。比方说年龄特征是一个连续的特征,但是把年龄层分成5-18岁(中小学生),19-23岁(大学生),24-29岁,30-40岁(成家立业),40-60岁(中年人),更容易理解不同年龄层人的特性。典型的离散化步骤:对特征做排序-> 选择合适的分割点-> 作出区间的分割 -> 作出区间分割-> 查看是否能够达到停止条件。python的sklearn库也支持这种离散化:

    from sklearn.preprocessing import Binarizer
    #二值化,阈值设置为3,返回值为二值化后的数据
    Binarizer(threshold=3).fit_transform(iris.data)

        3.2.6. 特征标准化或者归一化

      特征标准化有两种方法:

           1. 去均值的标准化。


            当S表示所有样本的标准差时,Python的sklearn库提供了标准化方法:

    from sklearn.preprocessing import StandardScaler
     #标准化,返回值为标准化后的数据
    StandardScaler().fit_transform(iris.data)

      2 区间缩放的标准化方法

         计算公式:x'=x-min/max-min,max和min分别表示特征x取值的最大值和最小值。Python的sklearn库提供了这种标准化方法:

    from sklearn.preprocessing import MinMaxScaler
    #区间缩放,返回值为缩放到[0, 1]区间的数据
    MinMaxScaler().fit_transform(iris.data)

      特征归一化的方法

      归一化是有别与标准化的:标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,将样本的同一特征的不同取值转换到同一量纲下。归一化是依照特征矩阵的行处理数据,将同一数据的不同特征的取值转换到同一量纲下,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。

          归一化的好处:   1) 归一化为什么能提高梯度下降法求解最优解的速度。归一化前的梯度下降轨迹是弯曲的曲线;而归一化后梯度下降的轨迹是类似直线。2) 归一化有可能提高精度。一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。

    3.3 特征选择

        特征经过处理后,一般还需要进行特征选择,原因是:1)避免或减轻维度灾难,维度灾难是由于特征过多造成机器学习算法模型容纳能力超过上限;2)去除数据中的噪声,以及对所要解决的问题无关的特征,降低机器学习算法学习的难度。按照周志华《机器学习》书籍中的划分,特征选择的方法有三种:过滤式、包裹式和嵌入式的。

    3.3.1过滤式特征选择

      过滤式的特征选择,按照重要性、发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。比较常见的是词频法TF,TF-IDF法、方差选择法、相关系数法、卡方检验、互信息等特征选择方法。Python的sklearn库提供了如下的方法:

     1)方差选择法:先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。代码如下:

    from sklearn.feature_selection import VarianceThreshold
    #方差选择法,返回值为特征选择后的数据
    #参数threshold为方差的阈值
    VarianceThreshold(threshold=3).fit_transform(iris.data)

     2) 相关系数法:先要计算各个特征对目标值的相关系数以及相关系数的P值。

    from sklearn.feature_selection import SelectKBest
    from scipy.stats import pearsonr
    #选择K个最好的特征,返回选择特征后的数据
    #第一个参数为计算评估特征是否好的函数,该函数输入特征矩阵和目标向量,输出二元组(评分,P值)的数组,数组第i项为第i个特征的评分和P值。在此定义为计算相关系数
    #参数k为选择的特征个数
    SelectKBest(lambda X, Y: array(map(lambda x:pearsonr(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)

     3) 卡方检验,检验定性自变量对定性因变量的相关性。

    from sklearn.feature_selection import SelectKBest
    from sklearn.feature_selection import chi2
    #选择K个最好的特征,返回选择特征后的数据
    SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)

        4)互信息法,也是评价定性自变量对定性因变量的相关性的,为了处理定量数据,最大信息系数法被提出。

    from sklearn.feature_selection import SelectKBest
    from minepy import MINE
    #由于MINE的设计不是函数式的,定义mic方法将其为函数式的,返回一个二元组,二元组的第2项设置成固定的P值0.5
    def mic(x, y):
        m = MINE()
        m.compute_score(x, y)
        return (m.mic(), 0.5)
    #选择K个最好的特征,返回特征选择后的数据
    SelectKBest(lambda X, Y: array(map(lambda x:mic(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)

    3.3.2 包裹式特征选择

        包裹式特征选择,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。包裹式特征选择直接针对给定学习算法进行优化,将最终要使用的学习器性能作为特征子集的评价标准,优点是选择的特征子集最适合学习器,缺点是在特征选择过程中需要多次训练学习器,计算开销大于过滤式特征选择。

           Python的sklearn库提供了递归特征消除法,使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。

    from sklearn.feature_selection import RFE
    from sklearn.linear_model import LogisticRegression
    #递归特征消除法,返回特征选择后的数据
    #参数estimator为基模型
    #参数n_features_to_select为选择的特征个数
    RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)

    3.3.3 嵌入式特征选择

        嵌入式特征选择将特征选择过程和学习器的训练过程融为一体,在学习器的训练过程中自动地进行特征选择。我们知道机器学习算法优化目标中添加L1正则项,更易于获得稀疏解,即特征集合中有更少的非零特征。使用带L1正则项的机器学习模型,除了筛选出特征外,同时也进行了降维。使用Python的sklearn库使用带L1惩罚项的逻辑回归模型,来选择特征的代码如下:

    from sklearn.feature_selection import SelectFromModel
    from sklearn.linear_model import LogisticRegression
    #带L1惩罚项的逻辑回归作为基模型的特征选择
    SelectFromModel(LogisticRegression(penalty="l1", C=0.1)).fit_transform(iris.data, iris.target)

        基于树模型机器学习算法,例如随机森林在训练过程中能够输出特征对模型的重要性排序结果,这也可以作为特征选择的依据。例如:

    from sklearn.ensemble import RandomForestClassifier
    def do_randomForest(x_train, x_test, y_train, y_test):
        clf = RandomForestClassifier(n_estimators=10, criterion='entropy', max_depth=None,min_samples_split=2, random_state=0)
        clf.fit(x_train,y_train)
        y_pred=clf.predict(x_test)
        #计算特征的重要性
        importances = clf.feature_importances_
        indices = np.argsort(importances)[::-1]
        with open(rf_feats_importance, 'w') as wf:
           wf.write("Feature Importances are as follows:")
           for f in range(x_train.shape[1]):
              wf.write("\t%2d) %-*s %f\n" % (f + 1, 30, feat_labels[f], importances[indices[f]]))

    3.4 特征降维

        特征降维可能出于两个原因:1)当特征选择完成后,可以直接训练模型了,但是可能由于特征矩阵过大,导致计算量大,训练时间长的问题,因此降低特征矩阵维度也是必不可少的;2)我们希望查看数据的分布视图,看看数据的实际分布情况,此时需要将数据的特征降低到二维空间才能进行数据可视化。

    3.4.1 PCA降维

        最常用的特征降维方法是PCA降维,PCA降维的前提是特征之间存在关联。所谓关联,例如我们测量飞行员时,有两个指标一个是飞行技术(x1),另一个是对飞行的喜好程度(x2),这两者之间是有关联的,即correlated的。PCA降维的大致思想就是: 挑选特征明显的、显得比较重要的信息保留下来。选择标准有两个:

           a) 同一个维度内的数据,方差大的比较明显,因为方差大表示自己和平均水平差异大,有个性,降维后也最可能分的开。

          b)两个不同维度间关联度越小越好,因为关联度小表示这两个维度表征共同信息的量比较少,最理想就是两个维度不相关,相关度为0(相关度可以用协方差cov(a,b)表示),在线性空间内表现为两个维度正交。

        PCA的几何解释:PCA是将数据往低维空间投影,寻找数据点在投影平面上行投影点方差最大的投影平面。也可以理解为寻找数据点到投影平面直线距离之和最短的投影平面。

           PCA是如何计算的呢?

    1. 将m个样本n个特征的训练集组成m*n列的矩阵X。
    2. 将矩阵X进行归一化: 因为在降维映射的过程中, 存在映射误差, 所有在对高维特征降维之前, 需要做特征归一化(feature normalization), 这个归一化操作包括: (1) feature scaling (让所有的特征拥有相似的尺度,标准化X-X的均值) (2) zero mean normalization (零均值归一化)。 
    3. 计算矩阵X的协方差矩阵S。
    4. 对协方差矩阵S进行特征分解,求得特征值和特征向量。有两种求解方法:
        a) 存在特征值组成的对角矩阵D且该矩阵是方阵,即S=QDQT,D是代表特征值的对角矩阵,Q是特征向量=[u1,u2,...., un]。
      b) 否则,用SVD(奇异值分解)方法,计算代价很大,svd(S)=[U, D, V], 则求得U是所有的特征向量U=[u1,u2,..., un], ui是第i个特征的特征向量(n行1列)。注意D是一个m*n列的对角矩阵,不要求是方阵。
    5. 如果我们降维到k维,则从特征向量中取出前k个Uk=[u1,u2,...,uk]。
    6. 根据Uk对训练数据X降维:第i个样本(1*n)降维之后是UkTXi,其中UkT是Uk的转置。

        如何选择PCA降维后的维度k呢?使用公式:


           即用降维前后样本的欧几里得距离来表示降维的损失,如果error<0.01,也就是说保留了系统的99%的不确定性。需要计算的就是, 找到一个最小的 k 使得上面的公式成立, 但是计算上面公式, 由于样本太多而导致计算量太大, 并且对于每一个 k 取值都需要重新计算降维矩阵。 可以近似的使用协方差特征分解产生的特征值对角矩阵D来代替,则:
    error=sum(dii), 1<=i<=k / sum(dii),1<=i<=n。

        使用Python的sklearn库如下:

    from sklearn.decomposition import PCA
    #主成分分析法,返回降维后的数据
    #参数n_components为主成分数目
    PCA(n_components=2).fit_transform(iris.data)

    3.4.2 线性判别分类器LDA降维

          线性判别分类器,将待分类数据从高维空间向低维的线性空间投影,使得相同类别的样本投影后在线性空间的距离尽可能的小,而不同类别的样本投影后在线性空间的距离尽可能的大。使用Python的sklearn库如下:

    from sklearn.lda import LDA
    #线性判别分析法,返回降维后的数据
    #参数n_components为降维后的维数
    LDA(n_components=2).fit_transform(iris.data, iris.target)

    3.4.3 流形学习降维

        流形学习的前提是数据符合流形假设:我们所能观察到的数据实际上是由一个低维流形映射到高维空间上的。由于数据内部特征的限制,一些高维中的数据会产生维度上的冗余,实际上只需要比较低的维度就能唯一地表示。

        流形学习的作用是:a) 流形学习的一个主要应用就是“非线性降维” (参见Wikipedia: Nonlinear dimensionality reduction)。而非线性降维因为考虑到了流形的问题,所以降维的过程中不但考虑到了距离,更考虑到了生成数据的拓扑结构。b)流形能够刻画数据的本质。我们希望我们的模型能够学习到“数据在流行空间中的表示”。

        流形学习的常用方法:

            1. MDS(Multidimensional Scaling)多维尺度变换
    PCA和MDS是相互对偶的两个方法。MDS就是理论上保持欧式距离的一个经典方法,MDS最早主要用于做数据的可视化。由于MDS得到的低维表示中心在原点,所以又可以说保持内积。也就是说,用低维空间中的内积近似高维空间中的距离。经典的MDS方法,高维空间中的距离一般用欧式距离。
            2. Isomap等距映射方法
    他的理论框架就是MDS,但是放在流形的理论框架内,原始的距离换成了流形上的测地线(geodesic)距离。其它一模一样。所谓的测地线,就是流形上加速度为零的曲线,等同于欧式空间中的直线。流形上两点之间距离最短的线是测地线。在Isomap中,测地线距离就是用两点之间图上的最短距离来近似的,这方面的算法是一般计算机系中用的图论中的经典算法。
            3. 局部改线嵌入(Local Linear Embedding, LLE)
    假设数据中每个点可以由其近邻的几个点重构出来。降到低维,使样本仍能保持原来的重构关系,且重构系数也一样。
            4. 拉普拉斯特征映射(Laplacian Eigenmaps, LE)
    将数据映射到低维,且保持点之间的(相似度)距离关系。即在原空间中相距较远的点,投影到低维空间中,希望它们之间仍相距较远。反之亦然。说白了,就是保持图的局部邻接关系的情况把这个图从高维空间中重新画在一个低维空间中(graph drawing)。

        Python的sklearn库包含的manifold模块可以用于模型学习,上面所述的大部分算法都已经被包含,详细用法请参考:

            http://scikit-learn.org/stable/modules/manifold.html

        流形学习的缺点是:

            1.对噪音的处理能力不足,对数据的要求比较高;
            2. 流型的结构学习,需要不断发展统计学习理论;
            3. 流型学习算法往往要求一个整体的矩阵分解,很难处理大规模数据。

    其余的特征降维方法还包括聚类、文档主题模型LDA(如果数据是文本),以及之前说的基于特征提取的降维、文本词嵌入等方法。

    4. 数据不平衡的工程化方法

        有些机器学习算法对数据的平衡性有较高要求,即要求分类器输入的正类样本数量与负类样本数量要大致比例均衡。如果我们获得的数据样本是不均衡的,则需要在特征工程里针对数据不平衡做处理。个人总结,处理数据不平衡有以下几种方法:

       1. 训练一个生成模型,仅仅针对一类样本的单分类器,例如OneClassSVM。如果数据比例相差很大,例如正类数据样本占比90%,则可以只训练一个识别正类样本的单分类器,尽可能学习正类样本的分类特性,其最终效果可能好于二分类器。

          2. 在分类之前先做一遍聚类分析。可以考察一下其中是否有一些聚类簇明显的不包含正样本。这样我们可以先做一个粗的分类器,将这一些样本分开,然后再看剩下来的数据是否不均衡的状况会减轻很多。在剩余的数据上再做一个分类器。

          3.采样分析。包括上采样和下采样,通过采样和人工合成数据重构样本比例达到均衡。Python中imbalanced-learn库就是用采样的方法来解决数据不平衡问题的。详情请参考:http://contrib.scikit-learn.org/imbalanced-learn/stable/,基本功能线下表:


           4.机器学习算法选择对样本比例不敏感的算法,例如随机森林这类bagging采样方法的算法。

    5. 数据

    特征工程作为机器学习项目的一个重要环节,相对机器学习的算法而言,特征工程的工作看起来比较low,但是特征工程在机器学习中非常重要。特征工程,是机器学习系列任务中最耗时、最繁重、最无聊却又是最不可或缺的一部分。本文总结了一些特征工程中的一般步骤和少许经验,但仍然远远不够,以后还需要多多总结。

    展开全文
  • 机器学习中的特征工程

    千次阅读 多人点赞 2018-12-06 20:26:04
    数据和特征决定了机器学习的上限,而模型和算法则是逼近这个上限。因此,特征工程就变得尤为重要了。特征工程的主要工作就是对特征的处理,包括数据的采集,数据预处理,特征选择,甚至降维技术等跟特征有关的工作。...

    目录

    一、特征工程——概述

    二、特征工程——数据预处理

    三、特征工程——特征选择

    四、特征工程——降维


    一、特征工程——概述

    特征工程是数据分析中最耗时间和精力的一部分工作。数据和特征决定了机器学习的上限,而模型和算法则是逼近这个上限。因此,特征工程就变得尤为重要了。特征工程的主要工作就是对特征的处理,包括数据的采集,数据预处理,特征选择,甚至降维技术等跟特征有关的工作。

    1、特征(Feature)

    特征是数据中抽取出来的对结果预测有用的信息。

    2、特征工程(Feature Engineering)

    特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

    3、特征工程的意义

    (1)特征工程是将原始数据转化为特征,能更好表示预测模型处理的实际问题,提升对于未知数据预测的准确性。

    (2)更好的特征意味着更强的灵活度、更好的特征意味着只需要用简单模型、更好的特征意味着更好的结果。

    二、特征工程——数据预处理

    1、缺失值处理

    (1) 连续值:可以选择该特征值的所有样本的均值中位数来填充缺失值

    (2) 离散值:选择该特征值的所有样本中最频繁出现的类别值来填充缺失值

    注:不可信的样本丢掉,缺省值极多的字段考虑不用(即删掉)

    from sklearn.preprocessing import Imputer

    2、离散特征的连续化处理

    (1)独热编码(one-hot encoding)(哑变量)

    处理方法比较简单,比如某特征的取值是高,中和低,那么我们就可以创建三个取值为0或者1的特征,将高编码为1,0,0,中编码为0,1,0,低编码为0,0,1。也就是说,之前的一个特征被我们转化为了三个特征。

    from sklearn.preprocessing import LabelEncoder
    from sklearn.preprocessing import OneHotEncoder

    (2)特征嵌入(embedding)

    这个一般用于深度学习中。比如对于用户的ID这个特征,如果要使用独热编码,则维度会爆炸,如果使用特征嵌入维度就低很多了。对于每个要嵌入的特征,我们会有一个特征嵌入矩阵,这个矩阵的行很大,对应我们该特征的数目。比如用户ID,如果有100万个,那么嵌入的特征矩阵的行就是100万。但是列一般比较小,比如可以取20。这样每个用户ID就转化为了一个20维的特征向量,进而参与深度学习模型。

    在tensorflow中,我们可以先随机初始化一个特征嵌入矩阵,对于每个用户,可以用tf.nn.embedding_lookup找到该用户的特征嵌入向量。特征嵌入矩阵会在反向传播的迭代中优化。

    3、连续特征的离散化处理

    连续特征的离散化就是在数据的取值范围内设定若干个离散的划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或整数值代表落在每个子区间中的数据值。

    首先要确定分类数,然后将连续特征值映射到这些分类值(等宽法、等频法、一维聚类)。

    (1)根据阈值进行分组

    比如我们根据连续值特征的分位数,将该特征分为高,中和低三个特征。将分位数从0~0.3的设置为低,0.3~0.7的设置为中,0.7~1的设置为高。

    (2)基于聚类分析的方法

    一维聚类的方法包括两个步骤,首先将连续特征的值用聚类算法(如K-Means算法)进行聚类,然后再将聚类得到的簇进行处理,合并到一个簇的连续特征值并做同一标记。聚类分析的离散化方法也需要用户指定簇的个数,从而决定产生的区间数。

    (3)使用梯度提升树(GDBT)将连续值转化为离散值

    在sklearn中,我们可以用GradientBoostingClassifier的 apply方法很方便的得到样本离散化后的特征,然后使用独热编码即可

    4、特征的标准化和归一化(数值型数据)

    数据规范化处理是数据挖掘的一项基础工作。不同的评价指标往往具有不同的量纲,数值间的差别可能很大,不进行处理可能会影响到数据分析的结果。为了消除指标之间的量纲和取值范围差异的影响,需要进行标准化处理,将数据按照比例进行缩放,使之落入一个特定的区域,便于进行综合分析。

    (1)零 - 均值标准化(Z - score)

    具体的方法是求出样本特征x的均值mean和标准差std,然后用(x-mean)/std来代替原特征。这样特征就变成了均值为0,方差为1。该方法是当前用的最多的数据标准化方法。

    from sklearn.preprocessing import StandardScaler

    (2)最小 - 最大标准化(min - max)

    最小 - 最大标准化也成为离差标准化,是对原始数据的线性变换,将数值映射到[0,1]之间。

    具体的方法是求出样本特征x的最大值max和最小值min,然后用(x-min)/(max-min)来代替原特征。如果我们希望将数据映射到任意一个区间[a,b],而不是[0,1],那么也很简单。用(x-min)(b-a)/(max-min)+a来代替原特征即可。

    from sklearn.preprocessing import MinMaxScaler

    (3)L1/L2范数标准化

    from sklearn.preprocessing import Normalizer

    5、时间类型的数据处理

    (1)连续的时间差值法

    即计算出所有样本的时间到某一个未来时间之间的数值差距,这样这个差距是UTC的时间差,从而将时间特征转化为连续值。

    (2)将一个时间转化为离散特征

    根据时间所在的年,月,日,星期几,小时数,将一个时间特征转化为若干个离散特征,这种方法在分析具有明显时间趋势的问题比较好用。

    6、文本类型的数据预处理

    参看文本预处理

    (1)词袋

    直接把文本数据丢给模型,模型是无法解释的,因此需要把文本型的数据用数值表示。去掉停用词,标点符号,留下表达实际含义的词组成列表,在词库中映射稀疏向量。

    from sklearn.feature_extraction.text import CountVectorizer

    (2)把词袋中的词扩充到 n-gram

    它的思想是:在整个语言环境中,句子T的出现概率是由组成T的N个词组成的。

    (3)使用TF-IDF方法

    参看TF-IDF算法

    from sklearn.feature_extraction.text import TfidfVectorizer

    (4)word2vec将词转化为词向量(NLP)

    7、异常特征样本清洗

    异常数据的清洗,目标是将原始数据中异常的数据清除。

    (1)偏差检测(  聚类(KMeans)和最近邻(KNN))

    比如我们可以用KMeans聚类将训练样本分成若干个簇,如果某一个簇里的样本数很少,而且簇质心和其他所有的簇都很远,那么这个簇里面的样本极有可能是异常特征样本了。我们可以将其从训练集过滤掉。

    (2)异常点检测(iForest,one class SVM)

    主要是使用iForest或者one class SVM,使用异常点检测的机器学习算法来过滤所有的异常点。

    (3)基于统计的异常点检测

    例如极差,四分位数间距,均差,标准差等,这种方法适合于挖掘单变量的数值型数据。全距(Range),又称极差,是用来表示统计资料中的变异量数(measures of variation) ,其最大值与最小值之间的差距;四分位距通常是用来构建箱形图,以及对概率分布的简要图表概述。

    (4)基于距离的异常点检测

    主要通过距离方法来检测异常点,将数据集中与大多数点之间距离大于某个阈值的点视为异常点,主要使用的距离度量方法有绝对距离 ( 曼哈顿距离 ) 、欧氏距离和马氏距离等方法。

    (5)基于密度的异常点检测

    考察当前点的周围密度,可以发现局部异常点,例如LOF算法

    8、处理不平衡数据

          不平衡数据集介绍和处理方法

    三、特征工程——特征选择

    1、过滤法选择特征(Filter)

    它按照特征的发散性或者相关性指标对各个特征进行评分,设定评分阈值或者待选择阈值的个数,选择合适的特征。

    (1)方差筛选法

    使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。(方差越大的特征,那么我们可以认为它是比较有用的。如果方差较小,比如小于1,那么这个特征可能对我们的算法作用没有那么大。最极端的,如果某个特征方差为0,即所有的样本该特征的取值都是一样的,那么它对我们的模型训练没有任何作用,可以直接舍弃。在实际应用中,我们会指定一个方差的阈值,当方差小于这个阈值的特征会被我们筛掉。)

    from sklearn.feature_selection import VarianceThreshold

    (2)相关系数

    这个主要用于输出连续值的监督学习算法中。我们分别计算所有训练集中各个特征与输出值之间的相关系数,设定一个阈值,选择相关系数较大的部分特征。即使用相关系数法,先要计算各个特征对目标值的相关系数以及相关系数的P值。

    from sklearn.feature_selection import SelectKBest
    from scipy.stats import pearsonr

    (3)假设检验法(卡方检验、F检验、t检验)

    卡方检验可以检验某个特征分布和输出值分布之间的相关性。

    经典的卡方检验是检验定性自变量对定性因变量的相关性。假设自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望的差距。

    我们还可以使用F检验和t检验,它们都是使用假设检验的方法,只是使用的统计分布不是卡方分布,而是F分布和t分布而已。

    from sklearn.feature_selection import SelectKBest
    from sklearn.feature_selection import chi2

    (4)互信息

    即从信息熵的角度分析各个特征和输出值之间的关系评分。在决策树算法中我们讲到过互信息(信息增益)。互信息值越大,说明该特征和输出值之间的相关性越大。

    经典的互信息也是评价定性自变量对定性因变量的相关性。

    熵与信息增益算法详解

    from sklearn.feature_selection import SelectKBest 
    from minepy import MINE

    注:过滤法特征选择的缺点:没有考虑到特征之间的关联作用,可能把有用的关联特征误踢掉。

    2、包装法选择特征(Wrapper)

    根据目标函数,通常是预测效果评分,每次选择部分特征,或者排除部分特征。

    (1)递归消除特征算法(recursive feature elimination algorithm)

    递归消除特征法使用一个机器学习模型来进行多轮训练,每轮训练后,消除若干权值系数的对应的特征,再基于新的特征集进行下一轮训练。

    from sklearn.feature_selection import RFE 
    from sklearn.linear_model import LogisticRegression

    3、嵌入法选择特征(Embedded)

    先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据权值系数从大到小来选择特征。(类似于Filter方法,但是是通过训练来确定特征的优劣。)

    (1)基于惩罚项的特征选择法

    使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。

    最常用的是使用L1正则化和L2正则化来选择特征。正则化惩罚项越大,那么模型的系数就会越小。当正则化惩罚项大到一定的程度的时候,部分特征系数会变成0,当正则化惩罚项继续增大到一定程度时,所有的特征系数都会趋于0. 但是我们会发现一部分特征系数会更容易先变成0,这部分系数就是可以筛掉的。也就是说,我们选择特征系数较大的特征。常用的L1正则化和L2正则化来选择特征的基学习器是逻辑回归。(L1惩罚项降维的原理在于保留多个对目标值具有同等相关性的特征中的一个,所以没选到的特征不代表不重要。故,可结合L2惩罚项来优化。具体操作为:若一个特征在L1中的权值为1,选择在L2中权值差别不大且在L1中权值为0的特征构成同类集合,将这一集合中的特征平分L1中的权值,故需要构建一个新的逻辑回归模型)

    from sklearn.feature_selection import SelectFromModel 
    from sklearn.linear_model import LogisticRegression

    (2)基于树模型的特征选择法

    可以使用决策树或者GBDT。一般来说,可以得到特征系数coef或者可以得到特征重要度(feature importances)的算法才可以做为嵌入法的基学习器。

    树模型中GBDT也可用来作为基模型进行特征选择,使用feature_selection库的SelectFromModel类结合GBDT模型。

    from sklearn.feature_selection import SelectFromModel
    from sklearn.ensemble import GradientBoostingClassifier

    4、寻找高级特征(特征构造)

    在数据挖掘的过程中,为了提取更有用的信息,挖掘更深层次的模式,提高挖掘结果的精度,我们需要利用已有的特征集构造出新的特征,并加入到现有的特征集合中。(即我们从业务特征中自己去寻找高级数据特征)

    在Kaggle之类的算法竞赛中,高分团队主要使用的方法除了集成学习算法,剩下的主要就是在高级特征上面做文章。所以寻找高级特征是模型优化的必要步骤之一。当然,在第一次建立模型的时候,我们可以先不寻找高级特征,得到基准模型后,再寻找高级特征进行优化。(比如有车的路程特征和时间间隔特征,我们就可以得到车的平均速度这个二级特征。根据车的速度特征,我们就可以得到车的加速度这个三级特征等)

    寻找高级特征最常用的方法有:若干项特征加和,若干项特征之差,若干项特征乘积,若干项特征除商。

    寻找高级特征它是根据业务和模型需要而得,而不是随便的两两组合形成高级特征,这样容易导致特征爆炸,反而没有办法得到较好的模型。

    一般而言,聚类的时候高级特征尽量少一点,分类回归的时候高级特征适度的多一点。

    四、特征工程——降维

    当特征选择完成后,可以直接训练模型了,但是可能由于特征矩阵过大,导致计算量大,训练时间长的问题,因此降低特征矩阵维度也是必不可少的。常见的降维方法除了以上提到的基于L1惩罚项的模型以外,另外还有主成分分析法(PCA)和线性判别分析(LDA),线性判别分析本身也是一个分类模型。PCA和LDA有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。

    (1)主成分分析法(PCA)

    from sklearn.decomposition import PCA

    (2)线性判别分析法(LDA)

    from sklearn.lda import LDA

    (3)奇异值分解(SVD)-文本降维

    在对文本数据进行向量化以后,由于是稀疏矩阵太稀疏,同样可以使用降维技术,这里使用的是奇异值分解。

    from sklearn.decomposition import TruncatedSVD

     

    注:降维技术不是特征选择,降维是把高维数据的特征映射到低维空间中,而特征选择是在高维空间中直接剔除部分特征,选出重要特征。

     

    参考资料:特征工程方法

    交流学习资料共享欢迎入QQ群:955817470​​​​​​​

    展开全文
  • 机器学习特征工程

    千次阅读 2016-11-06 17:41:04
    原文地址引言在之前学习机器学习技术中,很少关注特征工程(Feature Engineering),然而,单纯学习机器学习的算法流程,可能仍然不会使用这些算法,尤其是应用到实际问题的时候,常常不知道怎么提取特征来建模。...

    原文地址

    引言

    在之前学习机器学习技术中,很少关注特征工程(Feature Engineering),然而,单纯学习机器学习的算法流程,可能仍然不会使用这些算法,尤其是应用到实际问题的时候,常常不知道怎么提取特征来建模。
    特征是机器学习系统的原材料,对最终模型的影响是毋庸置疑的。

    特征工程的重要意义

    数据特征会直接影响你使用的预测模型和实现的预测结果。准备和选择的特征越好,则实现的结果越好。
    影响预测结果好坏的因素: 模型的选择、可用的数据、特征的提取 。
    优质的特征往往描述了数据的固有结构。
    大多数模型都可以通过数据中良好的结构很好的学习,即使不是最优的模型,优质的特征也可以得到不错的效果。优质特征的灵活性可以让你使用简单的模型运算的更快,更容易理解,更容易维护。
    优质的特征可以在使用不是最优的模型参数的情况下得到不错的预测结果,这样你就不必费力去选择最适合的模型和最优的参数了。

    特征工程定义

    特征工程是将原始数据转化为特征,更好表示预测模型处理的实际问题,提升对于未知数据的准确性。它是用目标问题所在的特定领域知识或者自动化的方法来生成、提取、删减或者组合变化得到特征。

    特征工程的子问题

    • 机器学习中的特征(Feature)
      在机器学习和模式识别中,特征是在观测现象中的一种独立、可测量的属性。选择信息量大的、有差别性的、独立的特征是模式识别、分类和回归问题的关键一步。
      最初的原始特征数据集可能太大,或者信息冗余,因此在机器学习的应用中,一个初始步骤就是选择特征的子集,或构建一套新的特征集,减少功能来促进算法的学习,提高泛化能力和可解释性。
      在表格数据中,观测数据或实例(对应表格的一行)由不同的变量或者属性(表格的一列)构成,这里属性其实就是特征。但是与属性一词不同的是,特征是对于分析和解决问题有用、有意义的属性。
      在机器视觉中,一幅图像是一个观测,但是特征可能是图中的一条线;在自然语言处理中,一个文本是一个观测,但是其中的段落或者词频可能才是一种特征;在语音识别中,一段语音是一个观测,但是一个词或者音素才是一种特征。

    • 特征的重要性(Feature Importance)
      你可以客观的评价特征的实用性。判别特征的重要性是对特征进行选择的预先指标,特征根据重要性被分配分数,然后根据分数不同进行排序,其中高分的特征被选择出来放入训练数据集。
      如果与因变量(预测的事物)高度相关,则这个特征可能很重要,其中相关系数和独立变量方法是常用的方法。
      在构建模型的过程中,一些复杂的预测模型会在算法内部进行特征重要性的评价和选择,如多元自适应回归样条法(Multivariate Adaptive Regression Splines, MARS)、随机森林(Random Forest)、梯度提升机(Gradient Boosted Machines)。这些模型在模型准备阶段会进行变量重要性的确定。

    • 特征提取(Feature Extraction)
      一些观测数据如果直接建模,其原始状态的数据太多。像图像、音频和文本数据,如果将其看做是表格数据,那么其中包含了数以千计的属性。特征提取是自动地对原始观测降维,使其特征集合小到可以进行建模的过程。
      对于表格式数据,可以使用主元素分析(Principal Component Analysis)、聚类等映射方法;对于图像数据,可以进行线(line)或边缘(edge)的提取;根据相应的领域,图像、视频和音频数据可以有很多数字信号处理的方法对其进行处理。

    • 特征选择(Feature Selection)
      不同的特征对模型的准确度的影响不同,有些特征与要解决的问题不相关,有些特征是冗余信息,这些特征都应该被移除掉。
      特征选择是自动地选择出对于问题最重要的那些特征子集的过程。
      特征选择算法可以使用评分的方法来进行排序;还有些方法通过反复试验来搜索出特征子集,自动地创建并评估模型以得到客观的、预测效果最好的特征子集;还有一些方法,将特征选择作为模型的附加功能,像逐步回归法(Stepwise regression) 就是一个在模型构建过程中自动进行特征选择的算法。

    • 特征构建(Feature Construction)
      特征重要性和选择是告诉使用者特征的客观特性,但这些工作之后,需要你人工进行特征的构建。
      特征构建需要花费大量的时间对实际样本数据进行处理,思考数据的结构,和如何将特征数据输入给预测算法。
      对于表格数据,特征构建意味着将特征进行混合或组合以得到新的特征,或通过对特征进行分解或切分来构造新的特征;对于文本数据,特征够自己按意味着设计出针对特定问题的文本指标;对于图像数据,这意味着自动过滤,得到相关的结构。

    • 特征学习(Feature Learning)
      特征学习是在原始数据中自动识别和使用特征。
      现代深度学习方法在特征学习领域有很多成功案例,比如自编码器和受限玻尔兹曼机。它们以无监督或半监督的方式实现自动的学习抽象的特征表示(压缩形式),其结果用于支撑像语音识别、图像分类、物体识别和其他领域的先进成果。
      抽象的特征表达可以自动得到,但是你无法理解和利用这些学习得到的结果,只有黑盒的方式才可以使用这些特征。你不可能轻易懂得如何创造和那些效果很好的特征相似或相异的特征。这个技能是很难的,但同时它也是很有魅力的,很重要的。

    • 特征工程的流程

      • 机器学习中数据的转换过程;
      • 选择数据:收集整合数据,将数据规划化为一个数据集;
      • 预处理数据:对数据进行清洗、格式化、采样;
      • 转换数据:特征工程所在;
      • 对数据建模:构建模型、评估模型、调整模型;
      • 特征工程的迭代过程;
      • 对特征进行头脑风暴:深入分析问题,观察数据特点,参考其他问题的有关特征工程的方法并应用到自己问题中;
      • 特征的设计:你可以自动提取特征,手动构造特征,或将两者相结合;
      • 特征选择:使用不同的特征重要性评分方法或特征选择方法;
      • 评估模型:利用所选择的特征对测试数据进行预测,评估模型准确性。
    展开全文
  • 机器学习 第一讲 机器学习概述

    万次阅读 2021-03-28 16:11:05
    一、机器学习与应用 1.“人工智能之父”–艾伦.图灵 图灵测试(1950) 2.人工智能的知识图谱 二、AI,ML,DL的关系 1.机器学习是实现人工智能的一种方法,深度学习是机器学习一个分支 2.机器学习领域 自然语言处理 ...
  • 我们可以将一连串的时间特征进行拆分,比如:2015-03-08 10:30:00.360000+00:00, 我们可以将其转换为日期类型,然后从里面提取年,月,日等时间信息 对于一些hour,month等信息,我们也可以使用pd.cut将hour信息...
  • 机器学习中的特征工程总结!

    千次阅读 2020-10-17 20:13:44
    结构总览 特征工程 传统编程的关注点是代码。在机器学习项目中,关注点...许多机器学习模型都必须将特征表示为实数向量,因为特征值必须与模型权重相乘。 图 1. 特征工程将原始数据映射到机器学习特征 图 1 左..
  • BAT机器学习面试1000题系列

    万次阅读 多人点赞 2017-12-14 15:19:15
    1、本文的内容全部来源于七月在线发布的BAT机器学习面试1000题系列; 2、文章中带斜体的文字代表是本人自己增加的内容,如有错误还请批评指正; 3、原文中有部分链接已经失效,故而本人重新加上了新的链接,如有...
  • 机器学习特征选择概述

    千次阅读 2016-07-18 11:22:30
    机器学习特征选择概述
  • 机器学习 特征工程 特征离散化

    千次阅读 2016-12-31 18:54:03
    如果想深入研究特征离散化,请直接阅读博文最后的英文文献,以免浪费您的时间! 一、什么是特征离散化 简单的说,就是把连续特征分段,每一段内的原始连续特征无差别的看成同一个新特征 二、为什么进行离散化 1...
  • 机器学习 之 Haar特征

    万次阅读 多人点赞 2016-08-16 20:07:02
    Haar特征Haar特征原理综述Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。它分为三类:边缘特征、线性特征、中心特征和对角线特征。用黑白两种矩形框组合成特征模板,在特征模板内用 黑色矩形...
  • 特征构建是指通过研究原始数据样本,结合机器学习实战经验和相关领域的专业知识,思考问题的潜在形式和数据结构,人工创造出新的特征,而这些特征对于模型训练又是有益的并且具有一定的工程意义。 特征构建的方式...
  • 机器学习特征工程概述

    千次阅读 2017-06-14 16:15:12
    特征工程“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。”1.概念 [维基百科:特征工程是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程。] 通俗的说,就是尽...
  • 简介机器学习中的特征工程

    千次阅读 2020-08-08 09:16:52
    ​ 要解决一个机器学习问题,我们不能仅仅通过将算法应用到提供的数据上。比如.fit() 。我们首先需要构建一个数据集。 将原始数据转换为数据集的任务称为特征工程。 ​ 例如,预测客户是否坚持订阅特定产品。这...
  • 机器学习面试150题:不只是考SVM xgboost 特征工程

    万次阅读 多人点赞 2020-08-29 12:15:29
    本博客曾经在10~13年连续4年整理过各大公司数据结构和算法层面的笔试题、面试题,很快,2014年之后,机器学习大伙,很多公司开始招AI方面的人才,很多同学也会从网上找各种各样的机器学习笔试题、面试题,但和数据...
  • 第二讲 机器学习基础 机器学习开发流程 机器学习模型是什么 机器学习算法分类 明确几点问题 算法是核心,数据和计算是基础 找准定位 大部分复杂模型的算法设计都是算法工程师在做,而我们 > 分析很多的数据 > ...
  • 转自寒老师的七月算法ML课程,加了一点自己理解# -*-...Created on Mon Oct 31 20:27:11 2016@author: Sirius特征工程之时间特征处理 """import pandas as pd data=pd.read_csv('kaggle_bike_competition_train.csv',
  • 机器学习机器学习概述

    万次阅读 2019-12-16 22:37:25
    第一个视频主要讲了什么是机器学习机器学习能做些什么事情。 机器学习是目前信息技术中最激动人心的方向之一。在这门课中,你将学习到这门技术的前沿,并可以自己实现学习机器学习的算法。 你或许每天都在不知不觉...
  • 机器学习入门讲解:什么是特征特征选择

    万次阅读 多人点赞 2017-10-30 14:00:27
    在machine learning (机器学习)中,特征工程是重中之重,我们今天就来简单介绍一下特征工程里面的feature(特征),以及feature selection (特征选择)。   首先我们来看看中文字典里是怎么解释特征的...
  • 机器学习特征工程(一)

    千次阅读 2017-02-11 18:27:57
    特征工程是使用专业背景和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。 特征工程的意义:1.更好的特征意味着更强的灵活性 2更好的特征意味着只需要简单模型 3更好的特征意味着更好的结果 应用...
  • 我们先带着大家过一遍传统机器学习算法,基本思想和用途。把问题解决思路和方法应用建议提前到这里的想法也很简单,希望能提前给大家一些小建议,对于某些容易出错的地方也先给大家打个预防针,这样在理解后续相应...
  • 时间复杂度o(n*k):n为样本数量,k为单个样本特征的维度。如果不考虑特征维度的粒度为o(n) 空间复杂度o(n*k):n为样本数量,k为单个样本特征的维度。如果不考虑特征维度的粒度为o(n) 参考: ...
  • 特征选择对于机器学习重要性

    千次阅读 2020-04-13 22:59:15
    特征选择对机器学习至关重要,个人认为在大部分机器学习任务中特征就决定了效果的上限,模型的选择与组合只是无限逼近于这个上限。 特征选择的主要作用包括:减少特征数量会防止维度灾难,减少训练时间;增强模型...
  • 面向机器学习特征工程 一、引言

    万次阅读 2018-06-21 13:35:04
    来源:ApacheCN《面向机器学习特征工程》翻译项目 译者:@ZhipengYe 校对:(虚位以待) 机器学习将数据拟合到数学模型中来获得结论或者做出预测。这些模型吸纳特征作为输入。特征就是原始数据某方面的...
  • 机器学习——特征工程之特征选择

    千次阅读 2017-10-16 17:51:18
    机器学习》学习笔记
  • 机器学习简介

    万次阅读 2018-10-17 10:09:40
    在本篇文章中,我将对机器学习做个概要的介绍。本文的目的是能让即便完全不了解机器学习的人也能了解机器学习,并且上手相关的实践。这篇文档也算是EasyPR开发的番外篇,从这里开始,必须对机器学习了解才能进一步...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 154,509
精华内容 61,803
关键字:

时间特征机器学习