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种不同的自动特征选择技术:

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

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

  • 相关阅读:
    ABP框架应用-MySQL数据库集成
    redis初识
    MySQL高级学习笔记
    Linux安装apache
    学习jvm(一)--java内存区域
    HashTable、HashMap与ConCurrentHashMap源码解读
    Linux安装禅道项目管理软件
    设计模式之六大原则
    设计模式之策略模式
    设计模式之分类
  • 原文地址:https://www.cnblogs.com/wanghongze95/p/13842578.html
Copyright © 2011-2022 走看看