精华内容
下载资源
问答
  • 常用的特征选择方法

    2018-10-18 10:14:07
    特征选择主要有两个功能: 减少特征数量、降维,使模型泛化能力更强...一般会把它作为特征选择预处理,先去掉那些取值变化小特征,然后再从接下来提到特征选择方法中选择合适进行进一步特征选择。 单变量...

    特征选择主要有两个功能:

    减少特征数量、降维,使模型泛化能力更强,减少过拟合
    增强对特征和特征值之间的理解

    去掉取值变化小的特征

    假如说头一个特征值只有0和1,并且在所有的输入样本中,95%以上的取值都是0,那其实我们可以认为这个特征作用不大,可分析性不大没啥意义。一般会把它作为特征选择的预处理,先去掉那些取值变化小的特征,然后再从接下来提到的特征选择方法中选择合适的进行进一步的特征选择。

    单变量特征选择

    单变量特征选择能够对每一个特征进行测试,衡量该特征和响应变量之间的关系,根据得分扔掉不好的特征。对于回归和分类问题可以采用卡方检验等方式对特征进行测试。

    Pearson相关系数 Pearson Correlation

    皮尔森相关系数是一种最简单的,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性,结果的取值区间为[-1,1],-1表示完全的负相关(这个变量下降,那个就会上升),+1表示完全的正相关,0表示没有线性相关。

    互信息和最大信息系数 Mutual information and maximal information coefficient (MIC)

    对(MIC)不了解的可以参考这篇文章:
    原文:最大信息系数(MIC)
    这篇文章里面还有一些python代码哈~

    距离相关系数 (Distance correlation)

    距离相关系数是为了克服Pearson相关系数的弱点而生的。在x和x^2这个例子中,即便Pearson相关系数是0,我们也不能断定这两个变量是独立的(有可能是非线性相关);但如果距离相关系数是0,那么我们就可以说这两个变量是独立的。

    尽管有MIC和距离相关系数在了,但当变量之间的关系接近线性相关的时候,Pearson相关系数仍然是不可替代的。第一、Pearson相关系数计算速度快,这在处理大规模数据的时候很重要。第二、Pearson相关系数的取值区间是[-1,1],而MIC和距离相关系数都是[0,1]。这个特点使得Pearson相关系数能够表征更丰富的关系,符号表示关系的正负,绝对值能够表示强度。当然,Pearson相关性有效的前提是两个变量的变化关系是单调的。

    基于学习模型的特征排序 (Model based ranking)

    这种方法的思路是直接使用你要用的机器学习算法,针对每个单独的特征和响应变量建立预测模型。其实Pearson相关系数等价于线性回归里的标准化回归系数。假如某个特征和响应变量之间的关系是非线性的,可以用基于树的方法(决策树、随机森林)、或者扩展的线性模型等。基于树的方法比较易于使用,因为他们对非线性关系的建模比较好,并且不需要太多的调试。但要注意过拟合问题,因此树的深度最好不要太大,再就是运用交叉验证。

    展开全文
  • 二、内建变量的应用举例,获取当前时间戳 // 随机整数 const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min; pm.globals.set("random_number", randomInt(300,1000)); //从多个...
  • 常用的特征选择方法有以下三种(备注:以下代码采用Jupyter notebook编写,格式与传统稍有不同): 1、过滤式特征选择 简单理解就是过滤式特征选择通过选择与响应变量(目标变量)相关性度量(可能是相关系数,互...

     

    对于特征选择的作用在这里照搬《西瓜书》中的描述:

    常用的特征选择方法有以下三种(备注:以下代码采用Jupyter notebook编写,格式与传统稍有不同):

    1、过滤式特征选择

    简单理解就是过滤式特征选择通过选择与响应变量(目标变量)相关性度量(可能是相关系数,互信息,卡方检验等)高于设定阈值的特征。

     

    在scikit-learn工具包中,主要有以下几种过滤式特征选择方法:

    1)、移除方差小于指定阈值的特征

    特征的分布方差低,表示特征的分布集中度高,多样性较低,包含的信息量少,对模型的作用不大。如某个特征的取值全为0,则该特征在模型训练过程中起不到正向作用。

    对于下述数据,通过设置threshold,可以过滤掉特征方差小于threshold的特征。

    from sklearn.feature_selection import VarianceThreshold
    
    X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]
    
    # 此处使用的threshold是二分类特征中,某个取值占样本总体的80%
    var_selection = VarianceThreshold(threshold=0.8 * (1 - 0.8))
    X_selection = var_selection.fit_transform(X)
    X_selection
    array([[0, 1],
           [1, 0],
           [0, 0],
           [1, 1],
           [1, 0],
           [1, 1]])
    
    

    计算得到的各个属性列的方差如下(threshold=0.16):

    # 计算得到的各个属性列的方差
    var_selection.variances_
    array([0.13888889, 0.22222222, 0.25      ])

    2)、单变量特征选择

    单变量特征选择是通过单变量统计检验来选择最好的特征。它可以看作是估计器的预处理步骤。

    示例:

    i. SelectKBest按照度量得分,选择得分前k个特征。

    # 使用卡方检验完成单变量特征选择
    from sklearn.feature_selection import SelectKBest
    from sklearn.feature_selection import chi2
    from sklearn.datasets import load_iris
    
    """
    Parameters
     |  ----------
     |  score_func : callable
     |      Function taking two arrays X and y, and returning a pair of arrays
     |      (scores, pvalues) or a single array with scores.
     |      Default is f_classif (see below "See also"). The default function only
     |      works with classification tasks.
     |  
     |  k : int or "all", optional, default=10
     |      Number of top features to select.
     |      The "all" option bypasses selection, for use in a parameter search.
    """
    
    X, y = load_iris(return_X_y=True)
    # 使用卡方检验计算特征和目标值的关系,并保留得分最高的k=2个特征
    kBest = SelectKBest(chi2, k=2)
    kBest.fit_transform(X, y)
    print(kBest.scores_, kBest.pvalues_)
    print(X.shape, X_new.shape)
    print(X[:5, 2:],"\n" ,X_new[:5, :])
    # chi2(X, y)
    [ 10.81782088   3.7107283  116.31261309  67.0483602 ] [4.47651499e-03 1.56395980e-01 5.53397228e-26 2.75824965e-15]
    (150, 4) (150, 2)
    [[1.4 0.2]
     [1.4 0.2]
     [1.3 0.2]
     [1.5 0.2]
     [1.4 0.2]] 
     [[1.4 0.2]
     [1.4 0.2]
     [1.3 0.2]
     [1.5 0.2]
     [1.4 0.2]]

    ii. SelectPercentile按照度量得分,选择得分前百分之多少的特征

    from sklearn.feature_selection import SelectPercentile
    from sklearn.feature_selection import chi2
    from sklearn.datasets import load_iris
    
    """
    score_func : callable
     |      Function taking two arrays X and y, and returning a pair of arrays
     |      (scores, pvalues) or a single array with scores.
     |      Default is f_classif (see below "See also"). The default function only
     |      works with classification tasks.
     |  
     |  percentile : int, optional, default=10
     |      Percent of features to keep.
    """
    
    X, y = load_iris(return_X_y=True)
    # 使用卡方检验计算特征和目标值的关系,并保留特征
    percentile = SelectPercentile(chi2, percentile=0.5)
    percentile.fit_transform(X, y)
    print(percentile.scores_, percentile.pvalues_)
    print(X.shape, X_new.shape)
    print(X[:5, 2:],"\n" ,X_new[:5, :])
    # chi2(X, y)
    [ 10.81782088   3.7107283  116.31261309  67.0483602 ] [4.47651499e-03 1.56395980e-01 5.53397228e-26 2.75824965e-15]
    (150, 4) (150, 2)
    [[1.4 0.2]
     [1.4 0.2]
     [1.3 0.2]
     [1.5 0.2]
     [1.4 0.2]] 
     [[1.4 0.2]
     [1.4 0.2]
     [1.3 0.2]
     [1.5 0.2]
     [1.4 0.2]]

    2、包裹式特征选择

    简单理解就是包裹式特征选择方法通过不断训练模型,在每轮迭代过程中,去除那些贡献度最低的特征,直至达到最小特征数,或者模型性能出现大幅下降为止。

    参数说明:

    Parameters

    Estimator进行特征选择的模型,模型需要能够表示特征的重要程度

    n_features_to_select选择的特征数量

    step每轮迭代丢弃的特征数量或百分比

    Attributes

    n_features_被选中的特征数量

    support_特征是否被选中的状态码,True or False,ranking_值为1对应

    ranking_特征的排名次序,被选中值为1

    estimator_

    示例:

    # 使用递归的特征消除方法RFE进行特征选择
    %matplotlib inline
    from sklearn.datasets import load_digits
    from sklearn.feature_selection import RFE
    from sklearn.linear_model import LogisticRegression
    from matplotlib import pyplot as plt
    from sklearn.svm import SVC
    
    digits = load_digits()
    X = digits.images.reshape(len(digits.images), -1)
    y = digits.target
    print(X.shape)
    
    # 用于训练的简单模型
    svc = SVC(kernel="linear", C=1)
    
    # n_features_to_select:选择的特征数量, step:每次迭代清除的特征数量
    rfe = RFE(estimator=svc, n_features_to_select=16, step=1)
    rfe.fit(X, y)
    # 特征得分
    ranking = rfe.ranking_.reshape(digits.images[0].shape)
    print(ranking.shape)
    
    # ranking_结果表示每个特征的最终排序名次,被选中的特征的ranking_值为1
    print("每个特征的最终排序名次:", rfe.ranking_)
    # support_表示每个特征是否被选中 True or False, ranking_为1的对应位置为True
    print("每次特征是否被选中:", rfe.support_)
    # n_features_表示最终选择的特征数量
    print("选中的特征数量:", rfe.n_features_)
    print("模型:\n", rfe.estimator_)
    
    # 依据特征选择结果选择特征
    X_selected = X[:, rfe.support_]
    print("被选择的特征数据:", X_selected.shape)
    
    # Plot pixel ranking, ranking -> (8, 8)表示每个像素点的特征重要性排序
    plt.matshow(ranking, cmap=plt.cm.Blues)
    plt.colorbar()
    plt.title("Ranking of pixels with RFE")
    plt.show()
    (1797, 64)
    (8, 8)
    每个特征的最终排序名次: [49 35 16  8  1  2 19 36 42 22 15 28  1 17 29 37 39 26  4  1 13  1 24 38
     40 30  1  3  5 23  1 44 48 27 10 20 14  1  1 47 46 25  1  1  1  1  1 43
     41 32 11 21  9  1  7 33 45 34  1 12 18  6  1 31]
    每次特征是否被选中: [False False False False  True False False False False False False False
      True False False False False False False  True False  True False False
     False False  True False False False  True False False False False False
     False  True  True False False False  True  True  True  True  True False
     False False False False False  True False False False False  True False
     False False  True False]
    选中的特征数量: 16
    模型:
     SVC(C=1, cache_size=200, class_weight=None, coef0=0.0,
        decision_function_shape='ovr', degree=3, gamma='auto_deprecated',
        kernel='linear', max_iter=-1, probability=False, random_state=None,
        shrinking=True, tol=0.001, verbose=False)
    被选择的特征数据: (1797, 16)

    3、嵌入式特征选择

    嵌入式特征选择原则:

    a. 基于L1正则化的特征选择

    1)、对于回归问题使用Lasso进行回归特征选择

    2)、对于分类问题使用LR和LinearSVC进行特征选择

    3)、基于L1正则化的特征选择方法基于coef_进行选择

    b. 基于树模型的特征选择方法

    1)、基于树模型的特征选择方法基于feature_importance_进行选择

    示例:

    1)、基于LassoCV模型完成嵌入式特征选择

    加载糖尿病数据集:

    import matplotlib.pyplot as plt
    import numpy as np
    from sklearn.datasets import load_diabetes
    from sklearn.feature_selection import SelectFromModel
    from sklearn.linear_model import LassoCV
    
    diabetes = load_diabetes()
    X = diabetes.data
    y = diabetes.target
    
    feature_names = diabetes.feature_names
    print(feature_names)
    X[:2]

    基于糖尿病数据集训练LassoCV估计器:

    clf = LassoCV().fit(X, y)
    # 由于LassoCV训练得到的模型参数可能为正或者负,为正表示对于正类有积极影响,为负表示对正类有消极影响
    # 积极影响和消极影响都是影响,所以要对影响系数取绝对值
    importance = np.abs(clf.coef_)
    print(importance)
    [  0.  226.2375274  526.85738059 314.44026013 196.92164002 1.48742026 151.78054083 106.52846989 530.58541123  64.50588257]

    基于LassoCV模型训练得到的参数绝对值选择绝对值较大的参数对应的特征:

    idx_third = importance.argsort()[-3]
    threshold = importance[idx_third] + 0.01
    
    # 获取排名前2的特征索引编号
    idx_features = (-importance).argsort()[:2]
    # 获取排名前2的特征名
    name_features = np.array(feature_names)[idx_features]
    print('Selected features: {}'.format(name_features))
    
    sfm = SelectFromModel(clf, threshold=threshold)
    sfm.fit(X, y)
    X_transform = sfm.transform(X)
    
    # 特征选择后的特征数量
    n_features = sfm.transform(X).shape[1]
    X_transform.shape, n_features
    Selected features: ['s5' 'bmi']
    ((442, 2), 2)

    查看特征选择结果:

    print("特征选择标记:", sfm.get_support())
    print("模型参数权重:", sfm.estimator_.coef_)
    print("特征选择阈值:", sfm.threshold_)
    特征选择标记: [False False  True False False False False False  True False]
    模型参数权重: [  -0.         -226.2375274   526.85738059  314.44026013 -196.92164002  1.48742026 -151.78054083  106.52846989  530.58541123   64.50588257]
    特征选择阈值: 314.450260129206

    2)、基于LR完成嵌入式特征选择

    from sklearn.feature_selection import SelectFromModel
    from sklearn.linear_model import LogisticRegression
    X = [[ 0.87, -1.34,  0.31 ],
         [-2.79, -0.02, -0.85 ],
         [-1.34, -0.48, -2.55 ],
         [ 1.92,  1.48,  0.65 ]]
    y = [0, 1, 0, 1]
    selector = SelectFromModel(estimator=LogisticRegression()).fit(X, y)
    print("模型参数权重:", selector.estimator_.coef_)
    # 特征选择阈值默认为权重参数绝对值的均值
    print("特征选择阈值:", selector.threshold_, np.mean(np.abs(selector.estimator_.coef_)))
    print("特征选择标记:", selector.get_support())
    X_transformed = selector.transform(X)
    X_transformed.shape
    模型参数权重: [[-0.32857694  0.83411609  0.46668853]]
    特征选择阈值: 0.5431271870420732 0.5431271870420732
    特征选择标记: [False  True False]
    

    3)、基于L1正则化的特征选择方法(回归:Lasso,分类:LR/LinearSVC)

    # iris 数据集特征选择
    from sklearn.svm import LinearSVC
    from sklearn.datasets import load_iris
    from sklearn.feature_selection import SelectFromModel
    X, y = load_iris(return_X_y=True)
    print(X.shape)
    # 带有L1正则化项的LinearSVC分类模型
    lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
    model = SelectFromModel(lsvc, prefit=True)
    X_new = model.transform(X)
    print(X_new.shape)
    print(model.get_support())
    (150, 4)
    (150, 3)
    [ True  True  True False]

    4)、基于树模型的特征选择方法

    from sklearn.ensemble import RandomForestClassifier
    from sklearn.datasets import load_iris
    from sklearn.feature_selection import SelectFromModel
    X, y = load_iris(return_X_y=True)
    print(X.shape)
    clf = ExtraTreesClassifier(n_estimators=50)
    clf = clf.fit(X, y)
    print(clf.feature_importances_  )
    
    # 默认使用的threshold是clf模型feature_importance_的均值
    model = SelectFromModel(clf, prefit=True, threshold=np.mean(clf.feature_importances_))
    X_new = model.transform(X)
    print(X_new.shape)
    print(model.get_support())
    (150, 4)
    [0.10608772 0.0658854  0.43061022 0.39741666]
    (150, 2)
    [False False  True  True]

    特征选择模型及参数:

    model
    SelectFromModel(estimator=ExtraTreesClassifier(bootstrap=False,
                                                   class_weight=None,
                                                   criterion='gini', max_depth=None,
                                                   max_features='auto',
                                                   max_leaf_nodes=None,
                                                   min_impurity_decrease=0.0,
                                                   min_impurity_split=None,
                                                   min_samples_leaf=1,
                                                   min_samples_split=2,
                                                   min_weight_fraction_leaf=0.0,
                                                   n_estimators=50, n_jobs=None,
                                                   oob_score=False,
                                                   random_state=None, verbose=0,
                                                   warm_start=False),
                    max_features=None, norm_order=1, prefit=True,
                    threshold=0.24999999999999994)

    模型属性:

    model.estimator, model.threshold, model.max_features, model.prefit, clf.feature_importances_
    (ExtraTreesClassifier(bootstrap=False, class_weight=None, criterion='gini',
                          max_depth=None, max_features='auto', max_leaf_nodes=None,
                          min_impurity_decrease=0.0, min_impurity_split=None,
                          min_samples_leaf=1, min_samples_split=2,
                          min_weight_fraction_leaf=0.0, n_estimators=50, n_jobs=None,
                          oob_score=False, random_state=None, verbose=0,
                          warm_start=False),
     0.24999999999999994,
     None,
     True,
     array([0.10608772, 0.0658854 , 0.43061022, 0.39741666]))

    参考:scikit-learn官方文档

    展开全文
  • 这里我总结了一些机器学习中常见比较有用特征选择方法并附上相关python实现code。希望可以给大家一些启发。首先,我们为什么要进行特征选择呢?它有以下几个优点:减少过拟合:冗余数据常...

    花费了很长时间整理编辑,转载请联系作者授权,违者必究。

    特征选择(Feature selection)是在构建预测模型的过程中减少输入变量的一个过程。它是机器学习中非常重要的一步并在很大程度上可以提高模型预测精度。这里我总结了一些机器学习中常见的比较有用的特征选择方法并附上相关python实现code。希望可以给大家一些启发。

    首先,我们为什么要进行特征选择呢?它有以下几个优点:减少过拟合:冗余数据常常会给模型训练产生噪声,去掉这些噪声更有利于进行决策。

    提高准确性:减少误导性数据意味着提高了建模准确性。

    减少训练时间:更少的数据点降低了算法复杂度,并使训练速度更快。

    减低模型复杂性:降低了模型的复杂性,并使其更易于解释。

    Topic 1:变量排名(Variable Ranking)

    变量排名是通过某些评分函数的值对要素进行排序的过程,通常会测量要素相关性。通常我们可以通过常见的统计检验来选择与输出变量关系最密切的那些特征。scikit-learn中的SelectKBest就是根据不同的统计测试选取k个分数最高的变量。

    整个程序都是以sklearn自带的波士顿房价数据为例,进行变量选择。通过load_boston(),我们可以调取所需数据。下面的程序是对训练数据的提取。

    import pandas as pd

    #load sklearn built-in Boston dataset

    from sklearn.datasets import load_boston

    #Loading the dataset

    x = load_boston()

    data = pd.DataFrame(x.data, columns = x.feature_names)

    data["MEDV"] = x.target

    X = data.drop("MEDV",1) #Remove Target Variable to Get Feature Matrix

    y = data["MEDV"] #Target Variable

    data.head()数据样本

    以下通过线性回归的F值来对各输入变量进行排序,并选出前五个预测效果最好的变量。我们可以看出,LSTAT分数最高,预测能力最好:

    from sklearn.feature_selection import SelectKBest

    from sklearn.feature_selection import f_regression

    #apply SelectKBest class to extract top 5 best features

    bestfeatures = SelectKBest(score_func=f_regression, k=5)

    fit = bestfeatures.fit(X,y)

    dfscores = pd.DataFrame(fit.scores_)

    dfcolumns = pd.DataFrame(X.columns)

    #concat two dataframes for better visualization

    featureScores = pd.concat([dfcolumns,dfscores],axis=1)

    featureScores.columns = ['Specs','Score'] #naming the dataframe columns

    print(featureScores.nlargest(5,'Score')) #print 5 best features通过SelectKBest选出的前五个最优变量

    Topic 2:相关性矩阵及热图(Correlation Matrix with Heatmap)

    我们也可以通过要素之间或者要素和目标变量之间的相关性来做变量选择。要素之间的相关性越低越好,要素和目标函数之间的相关性越高越好。相关性可以通过热图(Heatmap)来视觉化。以下代码计算各个变量之间的相关性并通过seaborn的heatmap功能实现热图。热图中,数值越大,相关性越高。并且我们可以通过颜色的不同,直观的看出变量之间的相关性。

    import seaborn as sns

    from matplotlib import pyplot as plt

    #get correlations of each features in dataset

    corrmat = data.corr()

    top_corr_features = corrmat.index

    plt.figure(figsize=(20,20))

    #plot heat map

    g=sns.heatmap(data[top_corr_features].corr(),annot=True,cmap="RdYlGn")变量相关性热图

    Topic 3:模型嵌入特征重要性属性(Built-in Feature Importance)

    很多机器学习算法自带特征重要性属性。特征重要性(Feature Importance)提供数据中每个特征的得分,得分越高,该特征对输出变量的重要性或相关性就越高。最常见的就是基于树的回归器自带的特征重要性属性。这里以随机森林(Random Forest)预测方法为例,来选取最优的五个变量。下图中,RM预测能力最好,LSTAT预测能力第二。

    from sklearn.ensemble import RandomForestRegressor

    model = RandomForestRegressor ()

    model.fit(X,y)

    print(model.feature_importances_) #use inbuilt class feature_importances

    #plot graph of feature importances for better visualization

    feat_importances = pd.Series(model.feature_importances_, index=X.columns)

    feat_importances.nlargest(5).plot(kind='barh')

    plt.show()基于随机森林的特征重要性

    Topic 4:递归式特征消除 (Recursive Feature Elimination)

    递归式特征消除是通过不断递归地删除特征并根据剩余的特征建立模型的方法来优化模型。递归式特征消除根据特征消除的顺序对特征进行排序。在最坏的情况下,如果数据集包含N个要素,则RFE会对2N个要素组合进行贪婪搜索。下面的代码展示了个特征。以下以random forest为基础模型,实现递归式特征消除方法。这里我们选择最优的五个特征:

    from sklearn.feature_selection import RFE

    # Feature extraction

    model = RandomForestRegressor()

    rfe = RFE(model, 5)

    fit = rfe.fit(X, y)

    print("Num Features:%s" % (fit.n_features_))

    print("Selected Features:%s" % (fit.support_))

    print("Feature Ranking:%s" % (fit.ranking_))

    我们还可以通过交叉验证(cross validation)让模型自主选择最优特征数,可以看到,11个变量是使模型预测效果最优:

    from sklearn.svm import SVC

    from sklearn.feature_selection import RFECV

    # Instantiate RFECV visualizer with a random forest regressor

    rfecv = RFECV(RandomForestRegressor())

    rfecv.fit(X, y) # Fit the data to the visualizer

    print("Optimal number of features :%d" % rfecv.n_features_)

    # Plot number of features VS. cross-validation scores

    plt.figure()

    plt.xlabel("Number of features selected")

    plt.ylabel("Cross validation score (nb of correct classifications)")

    plt.plot(range(1, len(rfecv.grid_scores_) + 1), rfecv.grid_scores_)

    plt.show()

    Topic 5: 特征序列选择 (Sequential Feature Selection)

    特征序列选择可以分为以下三种:前向选择:该过程从一个空的特性集合开始,并逐个添加最优特征到集合中。

    向后消除:该过程从所有特征集开始。通过逐步删除集合中剩余的最差特征。

    前向选择和后向消除的组合:将前向选择和后向消除方法进行组合,在每个步骤中,选择最佳特征,并从其余特征中消除最差的。

    以下是前向选择的例子

    from mlxtend.feature_selection import SequentialFeatureSelector as sfs

    from mlxtend.plotting import plot_sequential_feature_selection as plot_sfs

    # Build RF regressor to use in feature selection

    clf = RandomForestRegressor()

    # Sequential Forward Selection

    sfs = sfs(clf,

    k_features=5,

    forward=True,

    floating=False,

    verbose=2,

    scoring='neg_mean_squared_error',

    cv=5)

    sfs = sfs.fit(X, y)

    print('\nSequential Forward Selection (k=5):')

    print(sfs.k_feature_idx_)

    print('CV Score:')

    print(sfs.k_score_)

    fig = plot_sfs(sfs.get_metric_dict(), kind='std_err')

    plt.title('Sequential Forward Selection (w. StdErr)')

    plt.grid()

    plt.show()

    Topic 6:置换特征重要性(Permutation importance)

    在训练好模型后,对其中一个特征变量进行随机置换顺序,如下图。如果单个变量的顺序打乱后导致模型预测精度降低,那说明这个变量是重要的。我们可以看出,LSTAT预测能力最好,RM预测能力排第二。

    from sklearn.inspection import permutation_importance

    rf = RandomForestRegressor()

    rf.fit(X, y)

    result = permutation_importance(rf, X, y, n_repeats=10,

    random_state=42, n_jobs=2)

    sorted_idx = result.importances_mean.argsort()

    fig, ax = plt.subplots()

    ax.boxplot(result.importances[sorted_idx].T,

    vert=False, labels=X.columns[sorted_idx])

    ax.set_title("Permutation Importances (test set)")

    fig.tight_layout()

    plt.show()

    我们也可以将数据集分为training和validation:

    from sklearn.model_selection import train_test_split

    import eli5

    from eli5.sklearn import PermutationImportance

    train_X, val_X, train_y, val_y = train_test_split(X, y, random_state=1)

    my_model = RandomForestRegressor().fit(train_X, train_y)

    perm = PermutationImportance(my_model, random_state=1).fit(val_X, val_y)

    eli5.show_weights(perm, feature_names = val_X.columns.tolist())

    以上是我平时做机器学习,发现的比较好用的几类特征选择方法。我们可以看出,不同的特征选择方法对特征的选取会有不同的结果。这里我使用的数据相对简单。实际应用中,可能会有成百上千的特征,特征之间的关系也相对复杂。所以,多对比几种特征选择的方法,有助于我们挖掘特征与目标变量之间的真正联系。

    展开全文
  • 一、统计方法选择的核心三要素(3-5-3) 研究目的(3) 统计设计(5) 变量类型(3) 二、变量类型 1.变量: 观察单位某项特征 2. 变量类型: 数值变量(定量)[±]; 计量资料,定距资料 适用: T...

    一、统计方法选择的核心三要素(3-5-3)

    1. 研究目的(3)
    2. 统计设计(5)
    3. 变量类型(3)

    二、变量类型

    1.变量:

    观察单位的某项特征

    2. 变量类型:

    数值变量(定量)[±]
    计量资料,定距资料
    适用: T检验 F检验

    等级变量(有序变量,最少3个)[>/<]
    例如:病情(轻、中、重)
    适用:非参数检验

    分类变量[≠]
    例如:性别(男/女)
    适用:卡方检验

    优选数值变量方式,其次等级变量

    三、常见统计设计

    1.成组设计

    组与组相互独立,研究样本随机分两组,或者按某种属性特征分两组。

    2组和3组(k组)的统计方法不一样

    2.配对/配伍设计

    干预前后配对;条件配对;同一对象不同部位;同一对象不同方法

    配伍是对配对的扩大

    3.重复测量设计
    4.析因设计

    可以研究因素之间的交互作用,但是非常浪费样本量

    5.交叉设计

    四、研究目的

    1.描述性分析

    根据变量的类型对变量进行描述
    数值型资料;分类型资料

    2.差异性分析

    数值型资料;等级型资料;分类型资料

    3.关系性分析

    相关分析;线性回归;逻辑回归;生存/ROC;聚类与判别;主成分与因子

    初级分析
    “说一说”级别,描述性分析变量的特征,往往用图或表
    描述性分析
    均值与中位数的曲线
    图标符号规则
    中级分析
    “比一比”级别,差异性分析,通过各种检验
    差异性分析
    在这里插入图片描述
    等级差异比较
    在这里插入图片描述
    高级分析
    “找关系”级别,关系性分析,通过模型
    在这里插入图片描述
    注:本文内容总结于松哥老师的统计课

    展开全文
  • 分箱的基评估标准是依靠WOE与IV值,常用的方法是等频、等距、best_ks、卡方。 决策树里对于连续值采用信息熵、信息增益率、方差、基尼系数等来进行拆分的选择。 它们本质上是一样的,都是为了寻找最佳的拆分方式,...
  • 小编在这里总结了常用的几种特征选择方法函数及其用法,大家快快收藏起来吧!特征选择篇1、方差选择法使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。函数:sklearn.feature_...
  • 这里我总结了一些机器学习中常见比较有用特征选择方法并附上相关python实现code。希望可以给大家一些启发。首先,我们为什么要进行特征选择呢?它有以下几个优点:减少过拟合:冗余数据常...
  • 目录 特征选择 (feature_selection) Filter 1. 移除低方差特征 (Removing features... 单变量特征选择 (Univariate feature selection) Wrapper 3. 递归特征消除 (Recursive Feature Eliminat...
  • 下面列举一些最常用的方法 1、根据阈值过滤掉方差小的变量。 2、通过计算变量与标签的相关系数,留下相关性高的特征。 3、根据决策树或者随机森林,选择重要程度高的特征。 4、利用PCA等算法,对数据进行变换,...
  • 常用特征选择方法及python代码

    千次阅读 2019-03-04 14:53:38
    数据集中存在大量冗余的变量时不仅有损模型性能,而且还会带来建模成本的提升,因此,进行特征选择还是很有必要的。 进行特征选择最起码会带来一下三方面的好处: 减少过拟合几率:冗余数据少了,基于噪音数据做决策...
  • 增强对特征和特征值之间的理解结合Scilit-learn中的例子接受几种常用的特征选择方法1.去除变化小的特征:Removing features with low variance假设某特征的特征值只有0和1,并且在所有输入样本中,9...
  • 对于复杂的变量和函数需要使用多个单词时,充分利用以下的命名法。变量命名其实对于计算机来说,可以是任意的,但是命名对于程序员来说,可以增加程序代码的可读性,因此十分重要。 1.下划线命名法 使用下划线分割多...
  • 使用收缩的方法的效果提升是相当好的,岭回归(ridge regression,后续以ridge代称),lasso和弹性网络(elastic net)是常用的变量选择的一般化版本。弹性网络实际上是结合了岭回归和lasso的特点。 Lasso和Ridge...
  • 常用的排序方法总结

    2020-02-24 18:24:08
    常用的两种排序方法选择排序、冒泡排序 选择排序 我们假设第一个值为最小值,取一个变量为minIndex对应着最小值的索引,让minIndex指向的这个值和剩余的所有值进行比较,如果有比假设的这个值小的,改变minIndex的...
  • 【机器学习】特征选择常用方法 整理

    千次阅读 多人点赞 2018-06-14 19:36:12
    特征选择 在实际工程中,对于特征变量的选取,往往是基于业务经验,也就是所谓你先验知识。 现在数据特征维度很多,而能作为训练集样本量却往往远小于特征数量(如...变量排序就是一种典型过滤式方法,...
  • 写C语言程序需要给函数、变量命名,也就是标识符,不同编程语言和不同程序,命名方式和规范各不相同,每种...对于复杂的变量和函数需要使用多个单词时,充分利用以下的命名法。变量命名其实对于计算机来说,可以是...
  • Jquery常用的方法汇总

    2020-11-23 15:29:22
     2 强大的选择器  3 出色DOM操作封装  4 可靠事件处理机制  5 完善Ajax  6 不污染顶级变量  7 出色浏览器兼容性  8 链式操作方式  9 隐式迭代  10 行为曾与结构层分离  11 丰富插件支持  ...
  • 有了调试工具,我们就可以设置断点 (代码停止执行位置), 且可以在代码执行时检测变量。 浏览器启用调试工具一般是按下 F12 键,并在调试菜单中选择 “Console” 。 1.console.log() 方法 如果浏览器支持调试,你...
  • 本文讨论了线性回归中七种常用的特征收缩和选择方法的数学属性和实际的Python应用。 什么是特征收缩或者特征选择 在线性回归中,特征收缩或者特征选择意味着从可用特征中选择要包含在模型中的子集特征,从而减少其维...
  • 问题 在开发中碰到一个需要编译时拷贝文件到out指定目录...如果大家没有找到对应的变量名的值,可以尝试如下方法选择一个模块的android.mk文件,在里面添加: $(warning "TARGET_EXTRA_DATA_PATH is $(TARGET_EXTRA
  • 相同点: 都是用于多重选择 不同点: 多重IF没有switch选择结构限制,特别适合变量处于某个连续区间...字符串的常用方法: 1.string Email=“xian@163.com” int position=Email.indexof("@"); 找到匹...
  • 常用的特征选择方法有SVD和PCA。特征选择在数据科学问题项目中会出现在特征生成之后。特征生成是从原始问题提供的数据中获得特征。关于不同数据类型(问题类型)可以进行不同的特征生成。见下表。特征选择用来筛选掉不...
  •  1 方法名称与类名称相同的方法  2 __construct(推荐使用 优先选择)  3 参数 : 不定   4 触发时机   当对象new实例化一瞬间自动调用这个方法   作用 :队成员进行初始化操作     //析构方法   1 ...
  • 常用数据标准化方法

    千次阅读 2018-05-07 11:38:25
    常用标准化方法 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原创文章,如需转载请保留出处 Z-scores 把数值标准化到Z分数。标准化后的变量均值为0,标准差为1。系统将每一个值减去正被标准化的变量或...
  • 常用标准化方法

    2018-05-07 11:40:00
    常用标准化方法 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原创文章,如需转载请保留出处 Z-scores 把数值标准化到Z分数。标准化后的变量均值为0,标准差为1。系统将每一个值减去正被标准化的变量或观测量的...
  • 计算机程序要对问题每个对象和处理规则给出正确详尽描述,其中程序数据结构和变量用来描述问题对象,程序结构、函数和语句用来描述问题算法。算法数据结构是程序两个重要方面。 算法是问题求解过程...
  • eclipse中的常用方法

    2014-04-17 22:34:56
    Ctrl+K:将光标停留在变量上,按Ctrl+K键可以查找到下一个同样的变量 Shift+Ctrl+K:和Ctrl+K查找的方向相反 Shift+Ctrl+F:代码格式化。如果选择了代码,仅对所选代码格式化 Shift+Ctrl+O:快速地导入import Shift+...
  • 常用的相似性度量方法

    千次阅读 2012-12-11 10:13:47
    在分类聚类算法,推荐系统中,...因此,有必要根据输入数据特征,选择一种合适相似性度量方法. 令X=(x1,x2,..,xn)T,Y=(y1,y2,...yn)T为两个输入向量,   1.欧几里得距离(Euclidean distance) ‍ 相当于

空空如也

空空如也

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

常用的变量选择方法