• MachineLearning入门-10(数据特征选定)


    在做数据挖掘和数据分析时,数据是所有问题的基础,并且会影响整个项目的进程。

    相较于使用一些复杂的算法,灵活的处理数据经常会取到意想不到的效果。而处理数据不可避免会使用到特征工程。

    数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。因此,特征过程的本质就是一项工程活动,目的是最大限度地从原始数据中提取合适的特征,以供算法和模型使用。特征处理是特征工程的核心部分,scikit-leanr提供了较为完善的特征处理方法,包括数据预处理、特征选择、降维等。

    接下来通过Scikit-learn来自动选择用于建立机器学习模型的数据特征方法。

    • 单变量特征选定
    • 递归特征消除
    • 主要成分分析
    • 特征的重要性

     特征选定

    是一个流程,能够选择有助于提高预测结果准确度的特征数据,或者有助于发现我们感兴趣的输出结果的特征数据。如果数据中包含无关的特征属性,会降低算法的准确度,对预测新数据造成干扰,尤其是线性相关算法(如线性回归算法和逻辑回归算法)。因此,在开始建立模型之前,执行特征选定有助于:

    降低数据的拟合度:较少的冗余数据,会使算法得出结论的机会更大。

    提高算法精度:较少的误导数据,能够提高算法的准确度。

    减少训练时间:越少的数据,训练模型所需要的时间越少。


     单变量特征选定

    统计分析可以用来分析选择对结果影响最大的数据特征。

    在Scikit-learn中提供了SelectKBest类,可以使用一系列统计方法来选定数据特征,是对卡方检验的实现。经典的卡方检验是检验定性自变量对定性因变量的相关性的方法。假设自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望值的差距,构建统计量。卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,偏离程度决定了卡方值的大小,卡方值越大,越不符合卡方值越小,偏差越小,越趋于符合;若两个值完全相等,卡方值就是0,表明理论值完全符合。

    下面的例子是通过卡方检验(chi-squared)的方式来选择四个对结果影响最大的数据特征。

     1 #通过卡方检验选定数据
     2 from pandas import read_csv
     3 from numpy import set_printoptions
     4 from sklearn.feature_selection import SelectKBest
     5 from sklearn.feature_selection import chi2
     6 
     7 filename='/home/aistudio/work/pima_data1.csv'
     8 names=['preg','plas','pres','skin','test','mass','pedi','age','class']
     9 data=read_csv(filename,names=names)
    10 #将数据分为输入数据和输出数据
    11 array=data.values
    12 x=array[:,0:8]
    13 y=array[:,8]
    14 
    15 #特征选定
    16 test=SelectKBest(score_func=chi2,k=4)
    17 fit=test.fit(x,y)
    18 #设定数据的打印格式
    19 set_printoptions(precision=3)
    20 print(fit.scores_)
    21 features=fit.transform(x)
    22 print(features)
    [ 111.52  1411.887   17.605   53.108 2175.565  127.669    5.393  181.304]
    [[148.    0.   33.6  50. ]
     [ 85.    0.   26.6  31. ]
     [183.    0.   23.3  32. ]
     ...
     [121.  112.   26.2  30. ]
     [126.    0.   30.1  47. ]
     [ 93.    0.   30.4  23. ]]
    执行结束后,得到卡方检验对每个数据特征的评分,以及得分最高的四个数据特征。
    通过设置SelectKBest的score_func参数,SelectKBest不仅可以执行卡方检验来选择数据特征,还可以通过相关系数/互信息法等统计方法来选定数据特征。

    递归特征消除
    递归特征消除(RFE)使用一个基模型来进行多轮训练,每轮训练后消除若干权值系数的特征,再基于新的特征集进行下一轮训练。通过每一个基模型的精度,找到对最终的预测结果影响最大的数据特征。
    下面的例子是以逻辑回归算法为基模型,通过递归特征消除来选定对预测结果影响最大的三个数据特征。代码如下:
     1 #通过递归消除特征选定
     2 from pandas import read_csv
     3 from numpy import set_printoptions
     4 from sklearn.feature_selection import RFE
     5 from sklearn.linear_model import LogisticRegression
     6 
     7 filename='/home/aistudio/work/pima_data1.csv'
     8 names=['preg','plas','pres','skin','test','mass','pedi','age','class']
     9 data=read_csv(filename,names=names)
    10 #将数据分为输入数据和输出数据
    11 array=data.values
    12 x=array[:,0:8]
    13 y=array[:,8]
    14 
    15 #特征选定
    16 model=LogisticRegression()
    17 rfe=RFE(model,3)
    18 fit=rfe.fit(x,y)
    19 print('特征个数:')
    20 print(fit.n_features_)
    21 print('被选定的特征:')
    22 print(fit.support_)
    23 print('特征排名:')
    24 print(fit.ranking_)
    特征个数:
    3
    被选定的特征:
    [ True False False False False  True  True False]
    特征排名:
    [1 2 3 5 6 1 1 4]
    执行后,可以看到RFE选定了preg,mass,pedi三个数据特征,他们在support_中被标记为True,在rangking_中被标记为1.

    主要成分分析
    主要成分分析(PCA)是使用线性代数来转换压缩数据,通常被称作数据降维。
    常见的降维方法除了主要成分分析(PCA),还有线性判别分析(LDA),它本身也是一个分类模型。
    PCA和LDA有很多相似之处,其本质是将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说,PCA是一种无监督的降维方法,而LDA是一种有监督的
    降维方法。
    在聚类算法中,通常会利用PCA对数据进行降维处理,以利于对数据的简化分析和可视化。
     1 #通过主要成分分析选定数据特征
     2 from pandas import read_csv
     3 #from numpy import set_printoptions
     4 #from sklearn.feature_selection import RFE
     5 from sklearn.decomposition import PCA
     6 
     7 filename='/home/aistudio/work/pima_data1.csv'
     8 names=['preg','plas','pres','skin','test','mass','pedi','age','class']
     9 data=read_csv(filename,names=names)
    10 #将数据分为输入数据和输出数据
    11 array=data.values
    12 x=array[:,0:8]
    13 y=array[:,8]
    14 
    15 #特征选定
    16 pca=PCA(n_components=3)
    17 fit=pca.fit(x)
    18 print('解释方差:%s' % fit.explained_variance_ratio_)
    19 print(fit.components_)
    解释方差:[0.88854663 0.06159078 0.02579012]
    [[-2.02176587e-03  9.78115765e-02  1.60930503e-02  6.07566861e-02
       9.93110844e-01  1.40108085e-02  5.37167919e-04 -3.56474430e-03]
     [-2.26488861e-02 -9.72210040e-01 -1.41909330e-01  5.78614699e-02
       9.46266913e-02 -4.69729766e-02 -8.16804621e-04 -1.40168181e-01]
     [-2.24649003e-02  1.43428710e-01 -9.22467192e-01 -3.07013055e-01
       2.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01]]

    特征重要性
    袋装决策树算法(Bagged Decision Trees)、随机森林算法和极端随机树算法都可以用来计算数据特征。
    这三种算法都是集成算法中的袋装算法中。
    下面给出一个使用ExtraTreesClassifier类进行特征的重要性计算的例子。
     1 #通过主要成分分析选定数据特征
     2 from pandas import read_csv
     3 #from numpy import set_printoptions
     4 #from sklearn.feature_selection import RFE
     5 from sklearn.ensemble import ExtraTreesClassifier
     6 
     7 filename='/home/aistudio/work/pima_data1.csv'
     8 names=['preg','plas','pres','skin','test','mass','pedi','age','class']
     9 data=read_csv(filename,names=names)
    10 #将数据分为输入数据和输出数据
    11 array=data.values
    12 x=array[:,0:8]
    13 y=array[:,8]
    14 
    15 #特征选定
    16 model=ExtraTreesClassifier()
    17 fit=model.fit(x,y)
    18 #print('解释方差:%s' % fit.explained_variance_ratio_)
    19 print(fit.feature_importances_)
    [0.11096135 0.22398194 0.09147738 0.08164259 0.07800569 0.14279681
     0.11434977 0.15678447]
    上面就是代码执行后每一个数据特征的得分。


  • 相关阅读:
    Java基础知识:正则表达式
    NodeJs 中 将表单数据转发到后台
    单片机的远程升级
    一些开源协议
    物联网的一些例子
    python一些开源特色库
    qt练习
    网页编程学习笔记
    PCB相关
    工业控制系统
  • 原文地址:https://www.cnblogs.com/yuzaihuan/p/12296423.html
Copyright © 2020-2023  润新知