精华内容
下载资源
问答
  • 结果表明, PLSR和SVM模型结合特征变量选择,不仅提高了模型运算效率,而且模型预测能力较全波段均有一定提高;RF模型采用特征变量建模,对模型精度的提高不是十分明显,但其构建模型的变量数量却显著减少,大大提高建模...
  • 特征变量筛选后发现,煤的工业分析指标中水分、灰分和挥发分三者对发热量的影响均较大,而元素分析中仅碳含量对发热量影响较为显著;以影响显著的4个指标为特征变量进行发热量预测,SVR方法对煤发
  • 光谱的变量选择/特征选择算法
  • 特征选择-单变量特征选择

    千次阅读 2018-09-20 22:53:52
    1.SelectKBest可以依据相关性对特征进行选择,保留k个评分最高的特征。 ①方差分析 分类问题使用f_classif,回归问题使用f_regression。 f_classif:分类任务 跟目标的分类,将样本划分成n个子集,S1,S2,..,Sn,...

    1.SelectKBest可以依据相关性对特征进行选择,保留k个评分最高的特征。

    ①方差分析

    分类问题使用f_classif,回归问题使用f_regression。

    f_classif:分类任务

    跟目标的分类,将样本划分成n个子集,S1,S2,..,Sn,我们希望每个子集的均值μ1,μ2,...,μn不相等。

    我们假设H0:μ1=μ2=...=μn,当然我们希望拒绝H0,所以我们希望构造出来f最大越好。所以我们可以通过第i个特征xi对分类进行预测。f值越大,预测值越好。

    f_regression:回归任务

    引用参考:https://blog.csdn.net/jetFlow/article/details/78884619

    • 要计算f_regression中的ff值,我们首先要计算的是,这个就是i号特征和因变量y之间的样本相关系数。

    • 我们计算的 ,才是f_regression中的ff值,服从F(1,n−2)F(1,n−2)分布。

    • ff值越大,i号特征和因变量y之间的相关性就越大,据此我们做特征选择。

    from sklearn.feature_selection import SelectKBest
    from sklearn.feature_selection import f_classif
    from sklearn.datasets import load_iris
    # 特征选择
    data = load_iris()
    slectKBest = SelectKBest(f_classif,k=2)
    dataK = slectKBest.fit_transform(data.data,data.target)

    ②χ²检验

    卡方检验用于分类问题

    ③互信息

    mutual_info_classif:分类问题

    mutual_info_regression:回归问题

     

    2.SelectPercentile 选择排名排在前n%的变量 

     

    展开全文
  • 变量特征选择是通过单变量统计检验来选择最好的特征。它可以看作是估计器的预处理步骤。Scikit-learn将特征选择相关功能作为接口进行公开: SelectKBest删除除最高评分外的所有功能 SelectPercentile删除除用户...

    特征选择
    代码下载
    本文主要介绍sklearn中进行特征选择的方法。
    sklearn.feature_selection模块中的类可用于样本集的特征选择/降维,以提高估计量的准确性得分或提高其在超高维数据集上的性能。


    单变量特征选择是通过单变量统计检验来选择最好的特征。它可以看作是估计器的预处理步骤。Scikit-learn将特征选择相关功能作为接口进行公开:

    • SelectKBest删除除最高评分外的所有功能
    • SelectPercentile删除除用户指定的最高得分百分比以外的所有特征
    • 对每个特征使用通用的单变量统计检验:误报率SelectFpr,错误发现率SelectFdr或多重比较谬误率SelectFwe
    • GenericUnivariateSelect允许使用可配置策略执行单变量特征选择。这使得我们可以用超参数搜索估计器来选择最佳的单变量选择策略。

    # 多行输出
    from IPython.core.interactiveshell import InteractiveShell
    InteractiveShell.ast_node_interactivity = "all"
    

    1 基本方法

    1.1 SelectKBest

    导入特征选择库中的SelectKBest和chi2(卡方统计量)用来计算特征间与结果的相关性,并选择相关性最高的特征

    from sklearn.datasets import load_digits
    from sklearn.feature_selection import SelectKBest, chi2
    
    # 获得手写数字数据
    X, y = load_digits(return_X_y=True)
    X.shape
    
    # SelectKBest接收两个参数,使用的计算方法和选取的特征个数
    # SelectKBest默认方法为f_classif,计算提样本的ANOVA F值
    # 选择相关性最高的前20个特征
    X_new = SelectKBest(chi2, k=20).fit_transform(X, y)
    X_new.shape
    
    (1797, 64)
    
    
    
    
    
    
    (1797, 20)
    

    SelectKBest具体特征输出评价如下:

    X=[[1,2,3,4,5],
        [5,4,3,2,1],
        [3,3,3,3,3,],
        [0,1,1,1,1]]
    
    y=[0,1,0,1]
    
    print("特征选取的结果:",X)
    selector=SelectKBest(chi2,k=3)
    value = selector.fit(X,y).transform(X)
    # 得分越大越好
    print("特征的得分:",selector.scores_)
    print("特征的p值:",selector.pvalues_)
    print("保留的特征列号为:",selector.get_support(True))
    print("特征选择后的值",value)
    
    
    特征选取的结果: [[1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [3, 3, 3, 3, 3], [0, 1, 1, 1, 1]]
    特征的得分: [0.11111111 0.         0.4        1.6        3.6       ]
    特征的p值: [0.73888268 1.         0.52708926 0.20590321 0.05777957]
    保留的特征列号为: [2 3 4]
    特征选择后的值 [[3 4 5]
     [3 2 1]
     [3 3 3]
     [1 1 1]]
    

    1.2 SelectPercentile

    SelectPercentile根据最高分数的百分位数选择特征。SelectPercentile方法类似于SelectKBest

    from sklearn.datasets import load_digits
    from sklearn.feature_selection import SelectPercentile, chi2
    X, y = load_digits(return_X_y=True)
    X.shape
    
    # SelectPercentile接收两个参数,使用的计算方法和选取得分排名前percentile的特征,第一个参数默认值为f_classif
    X_new = SelectPercentile(chi2, percentile=10).fit_transform(X, y)
    X_new.shape
    
    
    (1797, 64)
    
    
    
    
    
    
    (1797, 7)
    

    SelectPercentile具体特征输出评价如下:

    X=[[1,2,3,4,5],
        [5,4,3,2,1],
        [3,3,3,3,3,],
        [0,1,1,1,1]]
    
    y=[0,1,0,1]
    
    print("特征选取的结果:",X)
    selector=SelectPercentile(chi2,percentile=20)
    value = selector.fit(X,y).transform(X)
    # 得分越大越好
    print("特征的得分:",selector.scores_)
    print("特征的p值:",selector.pvalues_)
    print("保留的特征列号为:",selector.get_support(True))
    print("特征选择后的值",value)
    
    特征选取的结果: [[1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [3, 3, 3, 3, 3], [0, 1, 1, 1, 1]]
    特征的得分: [0.11111111 0.         0.4        1.6        3.6       ]
    特征的p值: [0.73888268 1.         0.52708926 0.20590321 0.05777957]
    保留的特征列号为: [4]
    特征选择后的值 [[5]
     [1]
     [3]
     [1]]
    

    1.3 SelectFpr

    SelectFpr表示基于假正例率(真实反例被预测为正例的比例 )的大小进行特征选择

    from sklearn.datasets import load_breast_cancer
    from sklearn.feature_selection import SelectFpr, chi2
    X, y = load_breast_cancer(return_X_y=True)
    X.shape
    
    # SelectFpr有两个参数方法和显著性水平
    # alpha也可以理解为保留的特征最高p值
    X_new = SelectFpr(chi2, alpha=0.01).fit_transform(X, y)
    X_new.shape
    
    (569, 30)
    
    
    
    
    
    
    (569, 16)
    

    SelectFpr具体特征输出评价如下:

    X=[[1,2,3,4,5],
        [5,4,3,2,1],
        [3,3,3,3,3,],
        [0,1,1,1,1]]
    
    y=[0,1,0,1]
    
    print("特征选取的结果:",X)
    selector=SelectFpr(chi2, alpha=0.1)
    value = selector.fit(X,y).transform(X)
    # 得分越大越好
    print("特征的得分:",selector.scores_)
    #  过滤了P值高于alpha(设定)的值
    print("特征的p值:",selector.pvalues_)
    print("保留的特征列号为:",selector.get_support(True))
    print("特征选择后的值",value)
    
    特征选取的结果: [[1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [3, 3, 3, 3, 3], [0, 1, 1, 1, 1]]
    特征的得分: [0.11111111 0.         0.4        1.6        3.6       ]
    特征的p值: [0.73888268 1.         0.52708926 0.20590321 0.05777957]
    保留的特征列号为: [4]
    特征选择后的值 [[5]
     [1]
     [3]
     [1]]
    

    1.4 SelectFdr

    Bonferroni 校正获得错误发现率。FDR为q value:衡量错误发现率的指标(False discovery rate,简称FDR,所有检验中假阳性的概率)。

    from sklearn.datasets import load_breast_cancer
    from sklearn.feature_selection import SelectFdr, chi2
    X, y = load_breast_cancer(return_X_y=True)
    X.shape
    
    # alpha是预期错误发现率的上限
    X_new = SelectFdr(chi2, alpha=0.01).fit_transform(X, y)
    X_new.shape
    
    (569, 30)
    
    
    
    
    
    
    (569, 16)
    

    SelectFdr具体特征输出评价如下:

    X=[[1,2,3,4,5],
        [5,4,3,2,1],
        [3,3,3,3,3,],
        [0,1,1,1,1]]
    
    y=[0,1,0,1]
    
    print("特征选取的结果:",X)
    selector=SelectFdr(chi2, alpha=0.5)
    value = selector.fit(X,y).transform(X)
    # 得分越大越好
    print("特征的得分:",selector.scores_)
    print("保留的特征列号为:",selector.get_support(True))
    print("特征选择后的值",value)
    
    特征选取的结果: [[1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [3, 3, 3, 3, 3], [0, 1, 1, 1, 1]]
    特征的得分: [0.11111111 0.         0.4        1.6        3.6       ]
    保留的特征列号为: [4]
    特征选择后的值 [[5]
     [1]
     [3]
     [1]]
    

    1.5 SelectFwe

    SelectFwe基于族系误差进行特征选择

    from sklearn.datasets import load_breast_cancer
    from sklearn.feature_selection import SelectFwe, chi2
    X, y = load_breast_cancer(return_X_y=True)
    X.shape
    
    # alpha要保留的要素的最高未校正p值。
    X_new = SelectFwe(chi2, alpha=0.01).fit_transform(X, y)
    X_new.shape
    
    (569, 30)
    
    
    
    
    
    
    (569, 15)
    

    SelectFwe具体特征输出评价如下:

    X=[[1,2,3,4,5],
        [5,4,3,2,1],
        [3,3,3,3,3,],
        [0,1,1,1,1]]
    
    y=[0,1,0,1]
    
    print("特征选取的结果:",X)
    selector=SelectFwe(chi2, alpha=0.5)
    value = selector.fit(X,y).transform(X)
    # 得分越大越好
    print("特征的得分:",selector.scores_)
    print("保留的特征列号为:",selector.get_support(True))
    print("特征选择后的值",value)
    
    特征选取的结果: [[1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [3, 3, 3, 3, 3], [0, 1, 1, 1, 1]]
    特征的得分: [0.11111111 0.         0.4        1.6        3.6       ]
    保留的特征列号为: [4]
    特征选择后的值 [[5]
     [1]
     [3]
     [1]]
    

    1.6 GenericUnivariateSelect

    GenericUnivariateSelect可以设置不同的策略来进行单变量特征选择

    from sklearn.datasets import load_breast_cancer
    from sklearn.feature_selection import GenericUnivariateSelect, chi2
    X, y = load_breast_cancer(return_X_y=True)
    X.shape
    
    # 参数分别为方法,选择模式,选择多少种特征
    transformer = GenericUnivariateSelect(chi2, mode='k_best', param=20)
    X_new = transformer.fit_transform(X, y)
    X_new.shape
    
    (569, 30)
    
    
    
    
    
    
    (569, 20)
    

    2 单变量特征选择特征方法应用

    2.1 单变量特征选择特征方法选择说明

    单变量特征选择方法就是将特征输入到评分函数,返回一个单变量的f_score(F检验的值)或p-values(P值,假设检验中的一个标准,P-value用来和显著性水平作比较),注意SelectKBest 和 SelectPercentile只有得分,没有p-value。对于方法的选择推荐如下:

    • 回归的数据:f_regression,mutual_info_regression
    • 分类的数据:chi2,f_classif,mutual_info_classif

    如果你使用稀疏数据(比如,使用稀疏矩阵表示的数据), 卡方检验(chi2)、互信息回归(mutual_info_regression)、互信息分类(mutual_info_classif)在处理数据时可保持其稀疏性,因此被推荐选择)。但是要注意的是当心不要在分类问题上使用回归评分函数,将获得无用的结果。

    2.2 单变量特征选择特征实例

    单变量特征选择

    本例中噪声特征会添加到鸢尾花数据中,将鸢尾花的特征数4增值到24,并且会应用单变量特征选择。然后使用SVM进行分类,查看没有进行特征选择是SVM分类器的效果。

    对于每个特征,我们绘制单变量特征选择的p值以及SVM的相应权重。我们可以看到单变量特征选择会选择信息特征,并且这些特征具有更大的SVM权重。在全部特征中,只有前四个是有意义的。我们可以看到他们在单变量特征选择方面得分最高。SVM会为这些功能之一分配较大的权重,但还会选择许多非重要性功能。在SVM之前应用单变量特征选择会增加归因于重要特征的SVM权重,从而改善分类效率。

    可以看到未经过特征提取的分类器得分: 0.789,经过特征提取的分类器得分: 0.868

    import numpy as np
    import matplotlib.pyplot as plt
    
    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import MinMaxScaler
    from sklearn.svm import LinearSVC
    from sklearn.pipeline import make_pipeline
    from sklearn.feature_selection import SelectKBest, f_classif
    
    # #############################################################################
    # Import some data to play with
    
    # The iris dataset
    # 鸢尾花数据集
    X, y = load_iris(return_X_y=True)
    
    # Some noisy data not correlated
    # 添加噪声
    E = np.random.RandomState(42).uniform(0, 0.1, size=(X.shape[0], 20))
    
    # Add the noisy data to the informative features
    # 添加噪声特征,原来只有四个特征
    X = np.hstack((X, E))
    
    # Split dataset to select feature and evaluate the classifier
    # 分为训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(
            X, y, stratify=y, random_state=0
    )
    
    # 新建一个名为figure1窗口
    plt.figure(1)
    # 清除当前 figure 的所有axes,但是不关闭这个 window,所以能继续复用于其他的 plot
    plt.clf()
    
    # 特征标号
    X_indices = np.arange(X.shape[-1])
    
    # #############################################################################
    # Univariate feature selection with F-test for feature scoring
    # We use the default selection function to select the four
    # most significant features
    #基于F检验的特征评分单变量特征选择
    # 我们使用默认的选择函数来选择这四个最显著的特征
    selector = SelectKBest(f_classif, k=4)
    selector.fit(X_train, y_train)
    # 每个特征p值取对数
    scores = -np.log10(selector.pvalues_)
    scores /= scores.max()
    # 每个特征的特征的得分图
    # 蓝色的柱子
    plt.bar(X_indices - .25, scores, width=.2,
            label=r'Univariate score ($-Log(p_{value})$)')
    
    # #############################################################################
    # Compare to the weights of an SVM
    # 与支持向量机的权重进行比较
    clf = make_pipeline(MinMaxScaler(), LinearSVC())
    
    clf.fit(X_train, y_train)
    # 无特征选择得分
    print('未经过特征提取的分类器得分: {:.3f}'.format(clf.score(X_test, y_test)))
    # 提取权重
    svm_weights = np.abs(clf.named_steps['linearsvc'].coef_).sum(axis=0)
    
    svm_weights /= svm_weights.sum()
    # 橙色的柱子
    plt.bar(X_indices, svm_weights, width=.2, label='SVM weight');
    
    # #############################################################################
    # 特征提取后支持向量机分类
    clf_selected = make_pipeline(
            SelectKBest(f_classif, k=4), MinMaxScaler(), LinearSVC()
    )
    clf_selected.fit(X_train, y_train)
    print('经过特征提取的分类器得分: {:.3f}'
          .format(clf_selected.score(X_test, y_test)))
    
    svm_weights_selected = np.abs(clf_selected.named_steps['linearsvc'].coef_).sum(axis=0)
    svm_weights_selected /= svm_weights_selected.sum()
    
    plt.bar(X_indices[selector.get_support()] + .25, svm_weights_selected,
            width=.2, label='SVM weights after selection')
    
    
    # 特征选择性能比较
    plt.title("Comparing feature selection")
    plt.xlabel('Feature number')
    plt.yticks(())
    plt.axis('tight')
    plt.legend(loc='upper right')
    plt.show();
    
    未经过特征提取的分类器得分: 0.789
    经过特征提取的分类器得分: 0.868
    

    png

    F检验和相互信息的比较

    本例可视化y与三个变量之间的独立关系,并且正则化单变量F检验和互信息(有用的信息度量)二者的计算值。
    因F检验只能捕捉线性依赖关系,因此它把x1评为最关键的特征。而互信息能捕捉变量之间所有类型的依赖关系,因此它将x2评为最关键的特征,在这个例子中,它比较符合我们的直观感觉。 两种方法都能正确地把x_3评为不相关特征。

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.feature_selection import f_regression, mutual_info_regression
    
    # # 设定随机种子
    np.random.seed(0)
    # # 随机生成包含1000个样本,3个特征值的特征值,值越大越重要
    X = np.random.rand(1000, 3)
    # 计算y值,并指定y值与x各个特征关系
    y = X[:, 0] + np.sin(6 * np.pi * X[:, 1]) + 0.1 * np.random.randn(1000)
    
    # 单变量线性回归测试
    f_test, _ = f_regression(X, y)
    # 将F值结果正则化
    # 测试线性模型中每一个回归因子的的影响
    f_test /= np.max(f_test)
    
    # 互信息计算(有用的信息度量),值越大越重要
    mi = mutual_info_regression(X, y)
    mi /= np.max(mi)
    
    plt.figure(figsize=(15, 5))
    for i in range(3):
        plt.subplot(1, 3, i + 1)
        plt.scatter(X[:, i], y, edgecolor='black', s=20)
        plt.xlabel("$x_{}$".format(i + 1), fontsize=14)
        if i == 0:
            plt.ylabel("$y$", fontsize=14)
        plt.title("F-test={:.2f}, MI={:.2f}".format(f_test[i], mi[i]),
                  fontsize=16)
    plt.show();
    

    png

    3 参考

    https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectKBest.html#sklearn.feature_selection.SelectKBest

    https://www.cnblogs.com/tszr/p/10802025.html

    https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectPercentile.html#sklearn.feature_selection.SelectPercentile

    https://www.cnblogs.com/tszr/p/10802026.html

    http://lijiancheng0614.github.io/scikit-learn/modules/generated/sklearn.feature_selection.SelectFpr.html

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

    https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectFdr.html#sklearn.feature_selection.SelectFdr

    https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectFwe.html#sklearn.feature_selection.SelectFwe

    https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.GenericUnivariateSelect.html#sklearn.feature_selection.GenericUnivariateSelect

    https://www.cnblogs.com/stevenlk/p/6543628.html

    https://scikit-learn.org/stable/auto_examples/feature_selection/plot_feature_selection.html#sphx-glr-auto-examples-feature-selection-plot-feature-selection-py

    https://scikit-learn.org/stable/auto_examples/feature_selection/plot_f_test_vs_mi.html#sphx-glr-auto-examples-feature-selection-plot-f-test-vs-mi-py

    https://blog.csdn.net/int_line/article/details/100231664

    展开全文
  • 前面(机器学习第17篇 - 特征变量筛选(1))评估显示Boruta在生物数据中具有较高的特征变量选择准确度,下面就具体看下如何应用Boruta进行特征变量选择。Boruta算法概述Bor...

    前面(机器学习第17篇 - 特征变量筛选(1))评估显示Boruta在生物数据中具有较高的特征变量选择准确度,下面就具体看下如何应用Boruta进行特征变量选择。

    Boruta算法概述

    Boruta得名于斯拉夫神话中的树神,可以识别所有对分类或回归有显著贡献的变量。其核心思想是统计比较数据中真实存在的特征变量与随机加入的变量(也称为影子变量)的重要性。

    1. 初次建模时,把原始变量拷贝一份作为影子变量。

    2. 原始变量的值随机化后作为对应影子变量的值 (随机化就是打乱原始变量值的顺序)。

    3. 使用随机森林建模并计算每个变量的重要性得分。

    4. 对于每一个真实特征变量,统计检验其与所有影子变量的重要性最大值的差别。

      重要性显著高于影子变量的真实特征变量定义为重要

      重要性显著低于影子变量的真实特征变量定义为不重要

    5. 所有不重要的变量和影子变量移除。

      基于新变量构成的数据集再次重复刚才的建模和选择过程,直到所有变量都被分类为重要不重要,或达到预先设置的迭代次数。

    其优点是:

    1. 同时适用于分类问题和回归问题

    2. 考虑多个变量的关系信息

    3. 改善了常用于变量选择的随机森林变量重要性计算方式

    4. 会输出所有与模型性能相关的变量而不是只返回一个最小变量集合

    5. 可以处理变量的互作

    6. 可以规避随机森林自身计算变量重要性的随机波动性问题和不能计算显著性的问题

    Boruta算法实战

    # install.packages("Boruta")library(Boruta)
    set.seed(1)
    boruta <- Boruta(x=train_data, y=train_data_group, pValue=0.01, mcAdj=T, 
           maxRuns=300)
    boruta
    ## Boruta performed 299 iterations in 1.452285 mins.
    ##  54 attributes confirmed important: AC002073_cds1_at, D13633_at,
    ## D31887_at, D55716_at, D78134_at and 49 more;
    ##  6980 attributes confirmed unimportant: A28102, AB000114_at,
    ## AB000115_at, AB000220_at, AB000381_s_at and 6975 more;
    ##  36 tentative attributes left: D31886_at, D43950_at, D79997_at,
    ## HG2279.HT2375_at, HG417.HT417_s_at and 31 more;

    速度还是可以的(尤其是跟后面要介绍的 RFE 的速度比起来)

    boruta$timeTaken
    ## Time difference of 1.452285 mins

    查看下变量重要性鉴定结果(实际上面的输出中也已经有体现了),54个重要的变量,36个可能重要的变量 (tentative variable, 重要性得分与最好的影子变量得分无统计差异),6,980个不重要的变量。

    table(boruta$finalDecision)
    ## 
    ## Tentative Confirmed  Rejected 
    ##        36        54      6980
    boruta$finalDecision[boruta$finalDecision=="Confirmed"]
    ## AC002073_cds1_at        D13633_at        D31887_at        D55716_at 
    ##        Confirmed        Confirmed        Confirmed        Confirmed 
    ##        D78134_at        D82348_at        D87119_at HG2874.HT3018_at 
    ##        Confirmed        Confirmed        Confirmed        Confirmed 
    ## HG4074.HT4344_at HG4258.HT4528_at        J02645_at        J03909_at 
    ##        Confirmed        Confirmed        Confirmed        Confirmed 
    ##        K02268_at   L17131_rna1_at        L27071_at        L42324_at 
    ##        Confirmed        Confirmed        Confirmed        Confirmed 
    ##        M10901_at        M57710_at        M60830_at        M63138_at 
    ##        Confirmed        Confirmed        Confirmed        Confirmed 
    ##        M63835_at        U14518_at        U23143_at        U28386_at 
    ##        Confirmed        Confirmed        Confirmed        Confirmed 
    ##        U37352_at        U38896_at        U56102_at        U59309_at 
    ##        Confirmed        Confirmed        Confirmed        Confirmed 
    ##        U63743_at        U68030_at        X01060_at        X02152_at 
    ##        Confirmed        Confirmed        Confirmed        Confirmed 
    ##        X14850_at        X16983_at        X17620_at        X56494_at 
    ##        Confirmed        Confirmed        Confirmed        Confirmed 
    ##        X62078_at        X67155_at        X67951_at        X69433_at 
    ##        Confirmed        Confirmed        Confirmed        Confirmed 
    ##        Z11793_at        Z21966_at        Z35227_at        Z96810_at 
    ##        Confirmed        Confirmed        Confirmed        Confirmed 
    ##        U16307_at HG3928.HT4198_at      V00594_s_at      X03689_s_at 
    ##        Confirmed        Confirmed        Confirmed        Confirmed 
    ##      M14328_s_at      X91911_s_at      X12530_s_at      X81836_s_at 
    ##        Confirmed        Confirmed        Confirmed        Confirmed 
    ## HG1980.HT2023_at      M94880_f_at 
    ##        Confirmed        Confirmed 
    ## Levels: Tentative Confirmed Rejected

    绘制Boruta算法运行过程中各个变量的重要性得分的变化 (绿色是重要的变量,红色是不重要的变量,蓝色是影子变量,黄色是Tentative变量)。

    这个图也可以用来查看是否有必要增加迭代的次数以便再次确认Tentative变量中是否有一部分为有意义的特征变量。从下图来看,黄色变量部分随着迭代还是有部分可能高于最高值,可以继续尝试增加迭代次数。

    Boruta::plotImpHistory(boruta)

    绘制鉴定出的变量的重要性。变量少了可以用默认绘图,变量多时绘制的图看不清,需要自己整理数据绘图。

    # ?plot.Boruta# plot(boruta)

    定义一个函数提取每个变量对应的重要性值。

    library(dplyr)
    boruta.imp <- function(x){
      imp <- reshape2::melt(x$ImpHistory, na.rm=T)[,-1]
      colnames(imp) <- c("Variable","Importance")
      imp <- imp[is.finite(imp$Importance),]
    
      variableGrp <- data.frame(Variable=names(x$finalDecision), 
                                finalDecision=x$finalDecision)
    
      showGrp <- data.frame(Variable=c("shadowMax", "shadowMean", "shadowMin"),
                            finalDecision=c("shadowMax", "shadowMean", "shadowMin"))
    
      variableGrp <- rbind(variableGrp, showGrp)
    
      boruta.variable.imp <- merge(imp, variableGrp, all.x=T)
    
      sortedVariable <- boruta.variable.imp %>% group_by(Variable) %>% 
        summarise(median=median(Importance)) %>% arrange(median)
      sortedVariable <- as.vector(sortedVariable$Variable)
    
    
      boruta.variable.imp$Variable <- factor(boruta.variable.imp$Variable, levels=sortedVariable)
    
      invisible(boruta.variable.imp)
    }
    boruta.variable.imp <- boruta.imp(boruta)
    
    head(boruta.variable.imp)
    ##   Variable Importance finalDecision
    ## 1   A28102          0      Rejected
    ## 2   A28102          0      Rejected
    ## 3   A28102          0      Rejected
    ## 4   A28102          0      Rejected
    ## 5   A28102          0      Rejected
    ## 6   A28102          0      Rejected

    只绘制Confirmed变量。

    library(YSX)
    
    sp_boxplot(boruta.variable.imp, melted=T, xvariable = "Variable", yvariable = "Importance",
               legend_variable = "finalDecision", legend_variable_order = c("shadowMax", "shadowMean", "shadowMin", "Confirmed"),
               xtics_angle = 90)

    提取重要的变量 (可能重要的变量可提取可不提取)

    boruta.finalVars <- data.frame(Item=getSelectedAttributes(boruta, withTentative = F), Type="Boruta")

    也可以使用TentativeRoughFix函数进一步计算。这一步的计算比较粗糙,根据重要性的值高低判断Tentative类型的变量是否要为ConfirmedRejected

    Tentative.boruta <- TentativeRoughFix(boruta)

    机器学习系列教程

    从随机森林开始,一步步理解决策树、随机森林、ROC/AUC、数据集、交叉验证的概念和实践。

    文字能说清的用文字、图片能展示的用、描述不清的用公式、公式还不清楚的写个简单代码,一步步理清各个环节和概念。

    再到成熟代码应用、模型调参、模型比较、模型评估,学习整个机器学习需要用到的知识和技能。

    1. 机器学习算法 - 随机森林之决策树初探(1)

    2. 机器学习算法-随机森林之决策树R 代码从头暴力实现(2)

    3. 机器学习算法-随机森林之决策树R 代码从头暴力实现(3)

    4. 机器学习算法-随机森林之理论概述

    5. 随机森林拖了这么久,终于到实战了。先分享很多套用于机器学习的多种癌症表达数据集 https://file.biolab.si/biolab/supp/bi-cancer/projections/。

    6. 机器学习算法-随机森林初探(1)

    7. 机器学习 模型评估指标 - ROC曲线和AUC值

    8. 机器学习 - 训练集、验证集、测试集

    9. 机器学习 - 随机森林手动10 折交叉验证

    10. 一个函数统一238个机器学习R包,这也太赞了吧

    11. 基于Caret和RandomForest包进行随机森林分析的一般步骤 (1)

    12. Caret模型训练和调参更多参数解读(2)

    13. 机器学习相关书籍分享

    14. 基于Caret进行随机森林随机调参的4种方式

    15. 送你一个在线机器学习网站,真香!

    16. UCI机器学习数据集

    17. 机器学习第17篇 - 特征变量筛选(1)

    展开全文
  • 今天给各位小伙伴带来的是sklearn库中的用于特征选择的函数,根据不同的需求,选择不同的特征选择方法。小编在这里总结了常用的几种特征选择方法函数及其用法,大家快快收藏起来吧!特征选择篇1、方差选择法使用方差...

    1d8893fe68d874574cedf1d2844631a1.png

    今天给各位小伙伴带来的是sklearn库中的用于特征选择的函数,根据不同的需求,选择不同的特征选择方法。小编在这里总结了常用的几种特征选择方法函数及其用法,大家快快收藏起来吧!特征选择篇

    1、方差选择法
    使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。函数:sklearn.feature_selection.VarianceThreshold用法:from sklearn.feature_selection
    import VarianceThreshold
    #方差选择法,返回值为特征选择后的数据
    #参数threshold为方差的阈值
    VarianceThreshold(threshold=3).fit_transform(iris.data)

    2、卡方选择法
    经典的卡方检验是检验定性自变量对定性因变量的相关性。函数:sklearn.feature_selection.SelectKBest用法:from sklearn.feature_selection import SelectKBest
    from sklearn.feature_selection import chi2
    #选择K个最好的特征,返回选择特征后的数据
    SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)

    3、递归特征消除法
    递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。函数:sklearn.feature_selection.RFE用法: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)

    4、基于惩罚项的特征选择法
    使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。函数:sklearn.feature_selection .SelectFromModel用法: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)

    5、基于树模型的特征选择法
    树模型中GBDT也可用来作为基模型进行特征选择。函数:sklearn.preprocessing.Imputer用法:from sklearn.feature_selection
    import SelectFromModel
    from sklearn.ensemble
    import GradientBoostingClassifier
    #GBDT作为基模型的特征选择
    SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)

    微信公众号搜索:「 金科应用研院」
    可以从菜单栏点击「在线学习」
    更多风控资讯与干货学习资料,都在微信公众号

    3be1ce0efde2e9ba647e8e7a58e587e3.png

    回复关键字: 「风控量化福利包」➡️领取干货学习资料
    回复任意词可以加我们官方微信加入风控学习群
    不定期分享干货资料,一起讨论风控经验~

    展开全文
  • #-*- coding: utf-8 -*- #... t = t.sort_values(by=['importance'],ascending=False) print(t.columns) var_ok = t[t['importance']>0.05]['var'].values#按需选择变量 print(var_ok) X_ok = X[var_ok] print(X_ok)
  • 变量特征选择

    2019-02-23 20:05:21
    print(features) #单变量特征选择 j=[‘country’,‘region’,‘provstate’,‘city’,‘specificity’,‘vicinity’,‘targtype1’,‘weaptype1’,‘gname’] for i in j: X[i] = X[i].to_string() X.info ()...
  • 前面机器学习第18篇 - Boruta特征变量筛选(2)已经完成了特征变量筛选,下面看下基于筛选的特征变量构建的模型准确性怎样?定义一个函数生成一些列用来测试的mtry (一系列不大于总变...
  • 单变量过滤方法主要是基于特征变量和目标变量之间的相关性、互信息等计算出来的,总结如下:1、最简单的方差选择法from sklearn.feature_selection import VarianceThreshold result=VarianceThreshold(threshold=...
  • sklearn中的单变量特征选择变量特征选择是通过基于一些单变量的统计度量方法来选择最好的特征,比如卡方检测等。Scikit-learn 将单变量特征选择的学习器作为实现了 transform方法的对象: sklearn中实现的...
  • 特征选择中,最适合在探索阶段使用的就是过滤式的方法,比如方差阈值法和单变量选择法。在上一篇文章中我们介绍了如何在sklearn中使用方差阈值法,那么今天我们就进一步介绍更加实用、有效的单变量选择法。sklearn...
  • 本文描述了一个单变量特征选择的示例。本文我们将噪声(无信息)特征会添加到鸢尾花(iris)数据中,并应用单变量特征选择。对于每个特征,我们绘制单变量特征选择的p值以及SVM的相应权重。我们可以看到单变量特征选择会...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,401
精华内容 960
关键字:

特征变量选择