zoukankan      html  css  js  c++  java
  • Feature Selection For Machine Learning in Python (Python机器学习中的特征选择)

    Feature Selection For Machine Learning in Python

    原文作者:Jason Brownlee
    原文地址:https://machinelearningmastery.com/feature-selection-machine-learning-python/

    ​译者微博:@从流域到海域
    译者博客:blog.csdn.net/solo95

    Python机器学习中的特征选择

    您用来训练机器学习模型的数据特征(data features)对最终实现时能达到的性能表现有巨大的影响。

    不相关或部分相关的特征可能会对模型性能产生负面影响。

    在这篇文章中,您将会了解自动特征选择技术,您可以使用scikit-learn在Python中准备机器学习(所使用的)数据。

    让我们开始吧。

    更新于2016年12月:修正了RFE部分关于所选择变量的错字。感谢 Anderson。

    Python中机器学习的特征选择
    Baptiste Lafontaine的照片,保留一些权利

    特征选择

    特征选择是一个过程,您可以自动选择数据中您感兴趣的对预测变量或输出贡献(影响)最大的特征。

    数据中不相关的特征会降低许多模型的精确度,特别是线性算法和逻辑回归等线性算法。

    在对数据建模之前执行特征选择的三个好处是:

    • 减少过度配合:减少冗余数据意味着根据噪音(noise)作出决定的机会减少。
    • 提高准确性:更少的误导数据意味着建模精确度提高。
    • 减少训练时间:更少的数据意味着算法训练更快。

    您可以在文章“Feature selection”了解有关使用scikit-learn进行特征选择的更多信息。

    对Python中的机器学习有疑问?

    你可以试试我免费的2周邮件课程并了解数据准备,算法等等(都是非常简单的代码)。

    点击这里注册并且免费获得一个该课程的PDF电子书。

    现在开始免费的迷你小课程吧!

    机器学习的特征选择

    本节列出了Python中用于机器学习的4个特征选择方案。

    这篇文章包含特征选择方法的方案。

    每个方案的设计都是完整但完全独立的,因此您可以直接将其复制并粘贴到您的项目中并立即使用。

    这些方案使用Pima Indians onset of diabetes dataset来演示特征选择方法。这是一个二元分类问题,其中所有的属性都是数字的。

    1.单因素特征选择

    可以使用统计测试来选择与输出变量具有最强(最紧密)关系的那些要素。

    scikit-learn库提供了SelectKBest类,可以使用一系列不同的统计测试来选择特定数量的特征。

    下面的例子使用针对非负特征的chi平方(chi ^ 2)统计测试来从皮马印第安人糖尿病数据集发病中选择4个最佳特征。

    # Feature Extraction with Univariate Statistical Tests (Chi-squared for classification)
    import pandas
    import numpy
    from sklearn.feature_selection import SelectKBest
    from sklearn.feature_selection import chi2
    
    # load data
    url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
    names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
    dataframe = pandas.read_csv(url, names=names)
    array = dataframe.values
    X = array[:,0:8]
    Y = array[:,8]
    
    # feature extraction
    test = SelectKBest(score_func=chi2, k=4)
    fit = test.fit(X, Y)
    
    # summarize scores
    numpy.set_printoptions(precision=3)
    print(fit.scores_)
    features = fit.transform(X)
    
    # summarize selected features
    print(features[0:5,:])

    你可以看到每个属性的得分和所选择的4个属性(得分最高的属性):plastestmassage

    [  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. ]
     [  89.    94.    28.1   21. ]
     [ 137.   168.    43.1   33. ]]

    2.递归特征消除

    The Recursive Feature Elimination(递归特征消除(或RFE))通过递归地移除属性然后使用最后留下的属性来搭建一个模型。

    它使用模型准确度来确定哪些属性(以及属性组合)对预测目标属性贡献(影响)最大。

    您可以在scikit-learn文档中了解有关RFE类的更多信息。

    下面的例子使用了逻辑回归算法的RFE来选择前3个特征。算法的选择并不重要,只要它是熟练和一致的。

    # Feature Extraction with RFE
    from pandas import read_csv
    from sklearn.feature_selection import RFE
    from sklearn.linear_model import LogisticRegression
    
    # load data
    url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
    names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
    dataframe = read_csv(url, names=names)
    array = dataframe.values
    X = array[:,0:8]
    Y = array[:,8]
    
    # feature extraction
    model = LogisticRegression()
    rfe = RFE(model, 3)
    fit = rfe.fit(X, Y)
    print("Num Features: %d") % fit.n_features_
    print("Selected Features: %s") % fit.support_
    print("Feature Ranking: %s") % fit.ranking_

    您可以看到,RFE选择的前三名的特征,如pregmasspedi

    这些在support_数组中标记为True,并在ranking_数组中标记为“1” 。

    Num Features: 3
    Selected Features: [ True False False False False  True  True False]
    Feature Ranking: [1 2 3 5 6 1 1 4]

    3.主成分分析

    主成分分析(Principal Component Analysis或PCA)使用线性代数将数据集转换为压缩格式。

    通常这被称为数据压缩技术。PCA的一个属性是可以在转换结果中选择维数或主成分。

    在下面的例子中,我们使用PCA并选择3个主要组件。

    通过查看PCA API,在scikit-learn中了解更多关于PCA类的内容。您也可以在 Principal Component Analysis Wikipedia article.中深入探讨PCA背后的数学。

    
    # Feature Extraction with PCA
    import numpy
    from pandas import read_csv
    from sklearn.decomposition import PCA
    
    # load data
    url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
    names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
    dataframe = read_csv(url, names=names)
    array = dataframe.values
    X = array[:,0:8]
    Y = array[:,8]
    
    # feature extraction
    pca = PCA(n_components=3)
    fit = pca.fit(X)
    
    # summarize components
    print("Explained Variance: %s") % fit.explained_variance_ratio_
    print(fit.components_)

    您可以看到被转换的数据集(3个主要组件)与源数据几乎没有相似之处。

    Explained Variance: [ 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]]

    4.特征重要性

    像随机森林(Random Forest)和额外树(Extra Trees)这样的装袋决策树(Bagged decision trees)可以用来估计特征的重要性。
    (Bagging算法 英语:Bootstrap aggregating,引导聚集算法),又称装袋算法,译者注)。

    在下面的例子中,我们为Pima印第安人记录在案的糖尿病数据集构建了一个ExtraTreesClassifier分类器。您可以 在scikit-learn API中了解关于ExtraTreesClassifier类的更多信息。

    # Feature Importance with Extra Trees Classifie
    from pandas import read_csv
    from sklearn.ensemble import ExtraTreesClassifie
    
    # load data
    url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
    names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
    dataframe = read_csv(url, names=names)
    array = dataframe.values
    X = array[:,0:8]
    Y = array[:,8]
    # feature extraction
    model = ExtraTreesClassifier()
    model.fit(X, Y)
    print(model.feature_importances_)

    你可以看到,我们给每个属性都分配了重要性分数,其中越重要的属性得分越高。分数表明了plasagemass的重要性。

     [ 0.11070069  0.2213717   0.08824115  0.08068703  0.07281761  0.14548537 0.12654214  0.15415431]

    摘要

    在这篇文章中,您了解了使用scikit-learn在Python中准备机器学习数据的特征选择。

    您了解了4种不同的自动特征选择技术:

    • 单因素特征选择。
    • 递归特征消除。
    • 主成分分析。
    • 特征重要性。

    如果您正在寻找关于特征选择的更多信息,请参阅以下相关文章:

  • 相关阅读:
    linux查看CPU和内存信息
    linux yum命令详解
    查看文件中关键字前后几行的内容
    vue.js+web storm安装及第一个vue.js
    android GPS: code should explicitly check to see if permission is available
    ASP.NET MVC Identity 使用自己的SQL Server数据库
    阿里云服务器,tomcat启动,一直卡在At least one JAR was scanned for TLDs yet contained no TLDs就不动了
    ASP.NET MVC4 MVC 当前上下文中不存在名称“Scripts”
    python 将windows字体中的汉字生成图片的方法
    Java android DES+Base64加密解密
  • 原文地址:https://www.cnblogs.com/wanghongze95/p/13842578.html
Copyright © 2011-2022 走看看