精华内容
下载资源
问答
  • 特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。 更好的特征工程意味着更强的灵活度,更好的特征意味着只需用简单模型,更好的特征意味着更好的结果。 数据清洗 ...

    什么是特征工程?有什么用呢?

    特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

    更好的特征工程意味着更强的灵活度,更好的特征意味着只需用简单模型,更好的特征意味着更好的结果。

    数据清洗


    特征处理

    在特征处理中,主要有一下几种类型需要进行一些处理:

    • 数值型

    • 类别型

    • 时间类

    • 文本类

    • 统计类

    • 组合特征



    特征处理之数值型

    • 幅度调整 

    拿到获取的原始特征,为什么要对每一特征分别进行归一化呢?比如,特征A的取值范围是[-1000,1000],特征B的取值范围是[-1,1].如果使用logistic回归,w1*x1+w2*x2,因为x1的取值太大了,所以x2基本起不了作用。所以,必须进行特征的归一化,每个特征都单独进行归一化。

    1.幅度调整到给定范围内,默认[0,1]

    sklearn.preprocessing.MinMaxScaler(feature_range=(0, 1), copy=True)

    该方法称为离差标准化,是对原始数据的线性变换,其缺陷在当有新的数据加入时,可能导致X.max和X.min的值发生改变,需要重新计算。

    计算公式为:

    X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
    X_scaled = X_std * (max - min) + min

    其中max,min为放缩的范围。

    例子:

    2.标准化

    sklearn.preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True)

    scaling,其实就是将一些变化幅度较大的特征化到[-1,1]之内。

    计算公式:

    X_{scaled}=\frac{X-u}{\sigma }

    Xscaled = (X - 均值) / 标准差

    例子:

    数据标准化的方法与意义:https://blog.csdn.net/fontthrone/article/details/74067064


    •  统计值:max, min, mean, std等


    • 离散化

    pandas.cut与pandas.qcut使用方法与区别:https://blog.csdn.net/cc_jjj/article/details/78878878

    离散化:https://blog.csdn.net/programmer_wei/article/details/17200085

    连续特征的离散化:在什么情况下将连续的特征离散化之后可以获得更好的效果?https://www.zhihu.com/question/31989952

    例子:




     特征处理之类别型

    • One-hot编码/哑变量

    one hot 编码及数据归一化:https://blog.csdn.net/dulingtingzi/article/details/51374487

    离散型特征编码方式:one-hot与哑变量(区别):https://www.cnblogs.com/lianyingteng/p/7792693.html

    sklearn.preprocessing.OneHotEncoder(n_values=None, categorical_features=None, categories=None, sparse=True, dtype=<class ‘numpy.float64’>, handle_unknown=’error’)
    
    
    # https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing.OneHotEncoder
    pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)
    
    # API :
    # http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html#pandas.get_dummies

    ​​​​​​​例子:

    ​​​​​​​

     

    展开全文
  • 机器学习中的feature与lable的概念

    千次阅读 2019-04-10 10:04:42
    In our example, you might have one feature for colour, another for weight, another for length, and another for width. Maybe you would have some measure of concavity or linearity or ball-ness.

    The label is the name of some category. If you’re building a machine learning system to distinguish fruits coming down a conveyor belt, labels for training samples might be “apple”, " orange", “banana”. The features are any kind of information you can extract about each sample. In our example, you might have one feature for colour, another for weight, another for length, and another for width. Maybe you would have some measure of concavity or linearity or ball-ness.

    展开全文
  • 机器学习(一)- feature scaling

    千次阅读 2017-07-10 14:49:54
    feature scaling feature scaling(特征缩放)的思想就是将所选特征的value都缩放到一个大致相似的范围。这样做的目的是为了加快收敛,减少采用梯度下降算法迭代的次数。那么为什么feature scaling能做到这点呢。 ...

    feature scaling

    feature scaling(特征缩放) 的思想就是将所选特征的value都缩放到一个大致相似的范围。这样做的目的是为了加快收敛,减少采用梯度下降算法迭代的次数。那么为什么feature scaling能做到这点呢。
    下面我们将利用stanford的Andrew Ng教授的PPT来说明。
    这里写图片描述
    首先,“将所选特征的value都缩放到一个大致相似的范围”这句话在代价函数 $J(\theta) $ 的contour map的呈现就是contour大致是个圆形(当然这是针对我们只有两个feature的时候,多feature可以推广)。
    接下来我们要证明contour map越圆,收敛就越快。如果这一点说明了,那么feature scaling也就能达到加快收敛的目的。
    上图中左边的例子,feature x 1 x_1 x1 的范围0-2000,feature x 2 x_2 x2 的范围1-5,范围相差很大,导致contour map呈现出一个比较夸张的椭圆形,我们知道我们是要运用梯度下降去求解 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2 使得 J ( θ ) J(\theta) J(θ) 达到最小值(梯度下降沿着负梯度对参数 θ \theta θ 进行调整)。可以想象,如果contour map特别椭,除非我们的起始点刚好很靠近椭圆的轴(几率很小,起始点一般都是随机取的),才有可能使我们的负梯度方向是基本指向最小值的方向的,否则的话,我们的负梯度方向就会向左边例子里一样完全不是指向椭圆圆心并且会趋向于与短轴平行,这就非常可怕会造成图中左边例子这样的zig-zag在长轴上反复横跳,缓慢的向最小值逼近。
    那么接下来我要说什么,我感觉你应该已经猜到了,对。让我们反观右边例子,如果contour很圆,那么无论我们从哪里开始,我们的负梯度方向都是基本指向圆心(最小值)的,这样的话,每一步我们都最大的靠近了最小值(在learning rate定了情况下),当然我们的迭代次数就少了,也就加快收敛了。

    Andrew Ng还指出一般我们选择将feature的value落在 [ − 1 , 1 ] [-1, 1] [1,1], 但是我们不需要严苛的要求一定满足 [ − 1 , 1 ] [-1, 1] [1,1],其实左边界在 [ − 3 , − 1 3 ] [-3, -\frac{1}{3} ] [3,31],右边界在 [ 1 3 , 3 ] [\frac{1}{3}, 3 ] [31,3] 就可以了,也就是不能太大也不能太小。那么如何一步到位呢。就需要用到mean normalization(均值归一化)。这个就很简单了:
    x : = x − μ s x := \frac{x-\mu}{s} x:=sxμ
    μ \mu μ 就是training set的该feature的value的均值, $s $ 可以是value的range(最大值-最小值),也可以是value的标准差。


    展开全文
  • 机器学习:特征选择(feature selection)

    万次阅读 多人点赞 2019-03-11 18:35:28
    这篇文章是关于机器学习中常用的特征选择的一个小结,整体上包括两部分 简介 常见方法 Filter 去掉取值变化小的特征(Removing features with low variance) 单变量特征选择 (Univariate feature selection) ...

    特征选择

    这篇文章是关于机器学习中常用的特征选择的一个小结,整体上包括两部分

    简介

    常见方法

    • Filter

      1. 去掉取值变化小的特征(Removing features with low variance)
      2. 单变量特征选择 (Univariate feature selection)
    • Wrapper

      1. 递归特征消除 (Recursive Feature Elimination)
    • Embedding

      1. 使用SelectFromModel选择特征 (Feature selection using SelectFromModel)
      2. 将特征选择过程融入pipeline (Feature selection as part of a pipeline)

    简介

    一个典型的机器学习任务,是通过样本的特征来预测样本所对应的值。如果样本的特征少,我们会考虑增加特征,比如Polynomial Regression就是典型的增加特征的算法。而现实中的情况往往是特征太多了,需要减少一些特征。

    首先“无关特征”(irrelevant feature)。比如,通过空气的湿度,环境的温度,风力和当地人的男女比例来预测明天是否会下雨,其中男女比例就是典型的无关特征。

    其实“多于特征”(redundant feature),比如,通过房屋的面积,卧室的面积,车库的面积,所在城市的消费水平,所在城市的税收水平等特征来预测房价,那么消费水平(或税收水平)就是多余特征。证据表明,税收水平和消费水平存在相关性,我们只需要其中一个特征就足够了,因为另一个能从其中一个推演出来。(若是线性相关,则用线性模型做回归时会出现多重共线性问题,将会导致过拟合)

    减少特征具有重要的现实意义,不仅减少过拟合、减少特征数量(降维)、提高模型泛化能力,而且还可以使模型获得更好的解释性,增强对特征和特征值之间的理解,加快模型的训练速度,一般的,还会获得更好的性能。问题是,在面对未知领域时,很难有足够的认识去判断特征与目标之间的相关性,特征与特征之间的相关性。这时候就需要用一些数学或工程上的方法来帮助我们更好地进行特征选择。

    常见方法

    常见的方法有:

    1. 过滤法(Filter):按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征
    2. 包裹法(Wrapper):根据目标函数,每次选择若干特征或者排除若干特征,直到选择出最佳的子集。
    3. 嵌入法(Embedding):先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。

    Filter 1.去掉取值变化小的特征(Removing features with low variance)

    假设某特征的特征值只有0和1,并且在所有输入样本中,95%的实例的该特征取值都是1,那就可以认为这个特征作用不大。如果100%都是1,那这个特征就没意义了。当特征值都是离散型变量的时候这种方法才能用,如果是连续型变量,就需要将连续变量离散化之后才能用。而且实际当中,一般不太会有95%以上都取某个值的特征存在,所以这种方法虽然简单但是不太好用。可以把它作为特征选择的预处理,先去掉那些取值变化小的特征,然后再从接下来提到的的特征选择方法中选择合适的进行进一步的特征选择。

    使用方差选择法时,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。使用feature_selection库的VarianceThreshold类来选择特征:

    >>> 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]]
    >>> sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
    >>> sel.fit_transform(X)
    
    
    array([[0, 1],
           [1, 0],
           [0, 0],
           [1, 1],
           [1, 0],
           [1, 1]])
    

    果然, VarianceThreshold 移除了第一列特征,第一列中特征值为0的概率达到了5/6.

    Filter 2.单变量特征选择 (Univariate feature selection)

    单变量特征选择的原理是分别单独的计算每个变量的某个统计指标,根据该指标来判断哪些指标重要,剔除那些不重要的指标。

    对于分类问题(y离散) 可采用:

    卡方检验,f_classif, mutual_info_classif,互信息

    对于回归问题(y连续) 可采用:

    皮尔森相关系数,f_regression, mutual_info_regression,最大信息系数

    这种方法比较简单,易于运行,易于理解,通常对于理解数据有较好的效果(但对特征优化、提高泛化能力来说不一定有效)。这种方法有许多改进的版本、变种。单变量特征选择基于单变量的统计测试来选择最佳特征。它可以看作预测模型的一项预处理。

    Scikit-learn将特征选择程序用包含 transform 函数的对象来展现:

    • SelectKBest 移除得分前 k 名以外的所有特征(取top k)

    • SelectPercentile 移除得分在用户指定百分比以后的特征(取top k%)

    • 对每个特征使用通用的单变量统计检验: 假正率(false positive rate) SelectFpr, 伪发现率(false discovery rate) SelectFdr, 或族系误差率 SelectFwe.

    • GenericUnivariateSelect 可以设置不同的策略来进行单变量特征选择。同时不同的选择策略也能够使用超参数寻优,从而让我们找到最佳的单变量特征选择策略。
        将特征输入到评分函数,返回一个单变量的f_score(F检验的值)或p-values(P值,假设检验中的一个标准,P-value用来和显著性水平作比较),注意SelectKBest 和 SelectPercentile只有得分,没有p-value。

    • For classification: chi2, f_classif, mutual_info_classif

    • For regression: f_regression, mutual_info_regression

    **!! 注意:**这些基于 F-test 的方法计算两个随机变量之间的线性相关程度。另一方面,mutual information methods(mutual information : 互信息)能够计算任何种类的统计相关性,但是作为非参数的方法,互信息需要更多的样本来进行准确的估计。如果你使用的是稀疏的数据 (例如数据可以由稀疏矩阵来表示), chi2 , mutual_info_regression , mutual_info_classif 可以处理数据并保持它的稀疏性

    2.1 卡方(Chi2)检验

    经典的卡方检验是检验定性自变量对定性因变量的相关性。比如,我们可以对样本进行一次 c h i 2 chi^2 chi2 测试来选择最佳的两项特征:

    >>> from sklearn.datasets import load_iris
    >>> from sklearn.feature_selection import SelectKBest
    >>> from sklearn.feature_selection import chi2
    >>> iris = load_iris()
    >>> X, y = iris.data, iris.target
    >>> X.shape
    (150, 4)
    >>> X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
    >>> X_new.shape
    (150, 2)
    
    (150, 2)
    

    2.2 Pearson相关系数 (Pearson Correlation)

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

    Pearson Correlation速度快、易于计算,经常在拿到数据(经过清洗和特征提取之后的)之后第一时间就执行。Scipy的 pearsonr 方法能够同时计算 相关系数p-value.

    import numpy as np
    from scipy.stats import pearsonr
    np.random.seed(0)
    size = 300
    x = np.random.normal(0,1,size)
    # pearsonr(x, y)的输入为特征矩阵和目标向量
    print("Lower noise", pearsonr(x, x + np.random.normal(0, 1, size)))
    print("Higher noise", pearsonr(x, x + np.random.normal(0, 10, size)))
    # 输出为二元组(sorce, p-value)的数组
    ## 结果 Lower noise (0.71824836862138386, 7.3240173129992273e-49)
    ## 结果 Higher noise (0.057964292079338148, 0.31700993885324746)
    
    Lower noise (0.7182483686213841, 7.32401731299835e-49)
    Higher noise (0.057964292079338155, 0.3170099388532475)
    

    这个例子中,我们比较了变量在加入噪音之前和之后的差异。当噪音比较小的时候,相关性很强,p-value很低。Scikit-learn提供的 f_regrssion 方法能够批量计算特征的f_score和p-value,非常方便,参考sklearn的 pipeline

    Pearson相关系数的一个明显缺陷是,作为特征排序机制,他只对线性关系敏感。如果关系是非线性的,即便两个变量具有一一对应的关系,Pearson相关性也可能会接近0。例如:

    x = np.random.uniform(-1, 1, 100000)
    print (pearsonr(x, x**2)[0])
    ## 结果 -0.00230804707612
    
    -0.0023080470761233087
    

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

    经典的互信息(互信息为随机变量X与Y之间的互信息I(X;Y)为单个事件之间互信息的数学期望)也是评价定性自变量对定性因变量的相关性的,互信息计算公式如下:
    I ( X ; Y ) = E [ I ( x i ; y j ) ] = ∑ x i ϵ X ∑ y j ϵ Y p ( x i , y j ) l o g p ( x i , y j ) p ( x i ) p ( y j ) I(X;Y)=E[I(x_i;y_j)]=\sum_{ x_i\epsilon X }\sum_{ y_j\epsilon Y } p(x_i, y_j)log\frac{p(x_i,y_j)}{p(x_i)p(y_j)} I(X;Y)=E[I(xi;yj)]=xiϵXyjϵYp(xi,yj)logp(xi)p(yj)p(xi,yj)
    互信息直接用于特征选择其实不是太方便:1、它不属于度量方式,也没有办法归一化,在不同数据及上的结果无法做比较;2、对于连续变量的计算不是很方便(X和Y都是集合,x,y都是离散的取值),通常变量需要先离散化,而互信息的结果对离散化的方式很敏感。

    最大信息系数克服了这两个问题。它首先寻找一种最优的离散化方式,然后把互信息取值转换成一种度量方式,取值区间在 [ 0 , 1 ] [0,1] [01]minepy 提供了MIC功能。

    反过头来看 y = x 2 y=x^2 y=x2这个例子,MIC算出来的互信息值为1(最大的取值)。

    from minepy import MINE
    m = MINE()
    x = np.random.uniform(-1, 1, 10000)
    m.compute_score(x, x**2)
    print(m.mic())
    # 结果 1.0
    
    1.0000000000000009
    

    MIC的统计能力遭到了 一些质疑 ,当零假设不成立时,MIC的统计就会受到影响。在有的数据集上不存在这个问题,但有的数据集上就存在这个问题。

    2.4 距离相关系数 (Distance Correlation)

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

      第一,Pearson相关系数计算速度快,这在处理大规模数据的时候很重要。

      第二,Pearson相关系数的取值区间是 [ − 1 , 1 ] [-1,1] [11],而MIC和距离相关系数都是 [ 0 , 1 ] [0,1] [01]。这个特点使得Pearson相关系数能够表征更丰富的关系,符号表示关系的正负,绝对值能够表示强度。当然,Pearson相关性有效的前提是两个变量的变化关系是单调的。

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

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

    在 波士顿房价数据集 上使用sklearn的 随机森林回归 给出一个_单变量选择_的例子(这里使用了交叉验证):

    from sklearn.model_selection import cross_val_score, ShuffleSplit
    from sklearn.datasets import load_boston
    from sklearn.ensemble import RandomForestRegressor
    import numpy as np
    # Load boston housing dataset as an example
    boston = load_boston()
    X = boston["data"]
    Y = boston["target"]
    names = boston["feature_names"]
    
    rf = RandomForestRegressor(n_estimators=20, max_depth=4)
    scores = []
    # 单独采用每个特征进行建模,并进行交叉验证
    for i in range(X.shape[1]):
        score = cross_val_score(rf, X[:, i:i+1], Y, scoring="r2",cv=ShuffleSplit(len(X), 3, .3)) 
        # 注意X[:, i]shape(1,m)和X[:, i:i+1]的区别hape(m,1)
        scores.append((format(np.mean(score), '.3f'), names[i]))
    print(sorted(scores, reverse=True))
    
    # 注意X[:, i]shape(1,m)和X[:, i:i+1]的区别hape(m,1)
    a=np.array([1,2,3,4,5,6,7,8])
    b=np.reshape(a,[2,4])
    print(b)
    print(b[:,1])
    print(b[:,1:2])
    
    [[1 2 3 4]
     [5 6 7 8]]
    [2 6]
    [[2]
     [6]]
    

    Wrapper 3.递归特征消除 (Recursive Feature Elimination)

    递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,移除若干权值系数的特征,再基于新的特征集进行下一轮训练。

      sklearn官方解释:对特征含有权重的预测模型(例如,线性模型对应参数coefficients),RFE通过递归减少考察的特征集规模来选择特征。首先,预测模型在原始特征上训练,每个特征指定一个权重。之后,那些拥有最小绝对值权重的特征被踢出特征集。如此往复递归,直至剩余的特征数量达到所需的特征数量。

      RFECV 通过交叉验证的方式执行RFE,以此来选择最佳数量的特征:对于一个数量为d的feature的集合,他的所有的子集的个数是2的d次方减1(包含空集)。指定一个外部的学习算法,比如SVM之类的。通过该算法计算所有子集的validation error。选择error最小的那个子集作为所挑选的特征

    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)
    

    Recursive feature elimination:一个递归特征消除示例,展示在数字分类任务中,像素之间的相关性

    Recursive feature elimination with cross-validation:一个递归特征消除示例,通过交叉验证的方式自动调整所选特征的数量。

    Embedding 4.使用SelectFromModel选择特征 (Feature selection using SelectFromModel)

    单变量特征选择方法独立的衡量每个特征与响应变量之间的关系,另一种主流的特征选择方法是基于机器学习模型的方法。有些机器学习方法本身就具有对特征进行打分的机制,或者很容易将其运用到特征选择任务中,例如回归模型,SVM,决策树,随机森林等等。其实Pearson相关系数等价于线性回归里的标准化回归系数。

    SelectFromModel 作为meta-transformer,能够用于拟合后任何拥有coef_feature_importances_ 属性的预测模型。 如果特征对应的coef_feature_importances_ 值低于设定的阈值threshold,那么这些特征将被移除。除了手动设置阈值,也可通过字符串参数调用内置的启发式算法(heuristics)来设置阈值,包括:平均值(“mean”), 中位数(“median”)以及他们与浮点数的乘积,如”0.1*mean”

    Feature selection using SelectFromModel and LassoCV: 在阈值未知的前提下,选择了Boston dataset中两项最重要的特征。

    4.1基于L1的特征选择 (L1-based feature selection)

    使用L1范数作为惩罚项的线性模型(Linear models)会得到稀疏解:大部分特征对应的系数为0。当你希望减少特征的维度以用于其它分类器时,可以通过 feature_selection.SelectFromModel 来选择不为0的系数。特别指出,常用于此目的的稀疏预测模型有 linear_model.Lasso(回归), linear_model.LogisticRegressionsvm.LinearSVC(分类):

    from sklearn.svm import LinearSVC
    from sklearn.datasets import load_iris
    from sklearn.feature_selection import SelectFromModel
    iris = load_iris()
    X, y = iris.data, iris.target
    X.shape
    # (150, 4)
    lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
    model = SelectFromModel(lsvc, prefit=True)
    X_new = model.transform(X)
    X_new.shape
    #(150, 3)
    
    (150, 3)
    

    使用feature_selection库的SelectFromModel类结合带L1以及L2惩罚项的逻辑回归模型:

    from sklearn.feature_selection import SelectFromModel
    #带L1和L2惩罚项的逻辑回归作为基模型的特征选择
    #参数threshold为权值系数之差的阈值
    SelectFromModel(LR(threshold=0.5, C=0.1)).fit_transform(iris.data, iris.target)
    

    对于SVM和逻辑回归,参数C控制稀疏性:C越小,被选中的特征越少。对于Lasso,参数alpha越大,被选中的特征越少。

    Feature selection using SelectFromModel and LassoCV:不同算法使用基于L1的特征选择进行文档分类的对比。


    L1恢复和压缩感知 (L1-recovery and compressive sensing)

    对于一个好的alpha值,在满足特定条件下, Lasso 仅使用少量观测值就能够完全恢复出非零的系数。特别地,样本的数量需要“足够大”,否则L1模型的表现会充满随机性,所谓“足够大”取决于非零系数的数量,特征数量的对数,噪声的数量,非零系数的最小绝对值以及设计矩阵X的结构。此外,设计矩阵必须拥有特定的属性,比如不能太过相关(correlated)。 对于非零系数的恢复,还没有一个选择alpha值的通用规则 。alpha值可以通过交叉验证来设置(LassoCV or LassoLarsCV),尽管这也许会导致模型欠惩罚(under-penalized):引入少量非相关变量不会影响分数预测。相反BIC (LassoLarsIC) 更倾向于设置较大的alpha值。

    4.2 随机稀疏模型 (Randomized sparse models)

    基于L1的稀疏模型的局限在于,当面对一组互相关的特征时,它们只会选择其中一项特征。为了减轻该问题的影响可以使用随机化技术,通过_多次重新估计稀疏模型来扰乱设计矩阵_,或通过_多次下采样数据来统计一个给定的回归量被选中的次数_。

    稳定性选择(Stability Selection)

    RandomizedLasso 实现了使用这项策略的LassoRandomizedLogisticRegression 使用逻辑回归,适用于分类任务。要得到整个迭代过程的稳定分数,你可以使用 lasso_stability_path

    注意到对于非零特征的检测,要使随机稀疏模型比标准F统计量更有效, 那么模型的参考标准需要是稀疏的,换句话说,非零特征应当只占一小部分。

    示例:
    Sparse recovery: feature selection for sparse linear models: 比较了不同的特征选择方法,并讨论了它们各自适用的场合

    基于树的特征选择 (Tree-based feature selection)

    基于树的预测模型(见 sklearn.tree 模块,森林见 sklearn.ensemble 模块)能够用来计算特征的重要程度,因此能用来去除不相关的特征(结合 sklearn.feature_selection.SelectFromModel):

    Feature importances with forests of trees: 从模拟数据中恢复有意义的特征

    Pixel importances with a parallel forest of trees: 用于人脸识别数据的示例

    from sklearn.ensemble import ExtraTreesClassifier
    from sklearn.datasets import load_iris
    from sklearn.feature_selection import SelectFromModel
    iris = load_iris()
    X, y = iris.data, iris.target
    X.shape      # (150, 4)
    clf = ExtraTreesClassifier()
    clf = clf.fit(X, y)
    clf.feature_importances_  
    #array([ 0.04...,  0.05...,  0.4...,  0.4...])
    model = SelectFromModel(clf, prefit=True)
    X_new = model.transform(X)
    X_new.shape  #(150, 2)
    

    Embedding 5.将特征选择过程融入pipeline (Feature selection as part of a pipeline)

    特征选择常常被当作学习之前的一项预处理。在scikit-learn中推荐使用sklearn.pipeline.Pipeline:

    clf = Pipeline([
      ('feature_selection', SelectFromModel(LinearSVC(penalty="l1"))),
      ('classification', RandomForestClassifier())
    ])
    clf.fit(X, y)
    

    在此代码片段中,将 sklearn.svm.LinearSVCsklearn.feature_selection.SelectFromModel 结合来评估特征的重要性,并选择最相关的特征。之后 sklearn.ensemble.RandomForestClassifier 模型使用转换后的输出训练,即只使用被选出的相关特征。你可以选择其它特征选择方法,或是其它提供特征重要性评估的分类器。更多详情见 sklearn.pipeline.Pipeline 相关示例。

    参考:scikit feature selection

    参考:机器学习中,有哪些特征选择的工程方法?

    展开全文
  • 机器学习之特征选择 (feature_selection)

    千次阅读 2018-10-15 15:42:53
    转载... 目录 特征选择 (feature_selection) Filter 1. 移除低方差的特征 (Removing features with low variance) 2. 单变量特征选择 (Univariate featu...
  • 机器学习的特征选择(feature selection)

    千次阅读 2016-11-30 22:11:37
    写在开头:刚开始接触机器学习,选择了周志华教授的《机器学习》作为入门教材,很不错的书籍,受益良多。没有使用matlab去编写代码,而是选择了使用python的scikit-learn的开发包,大致看了一下开发包的特征选择方法...
  • 引言在运用一些机器学习算法的时候不可避免地要对数据进行特征缩放(feature scaling),比如:在随机梯度下降(stochastic gradient descent)算法中,特征缩放有时能提高算法的收敛速度。下面我会主要介绍一些特征...
  • Python机器学习实践

    千次阅读 2019-10-15 21:14:08
    前面几篇博文已经整理了Python做数据分析和建模以及机器学习基础知识。 这篇博文主要分享Python做数据分析和建模的实践案例应用。 分为两部分: 1、Python机器学习实践案例的算法总结。 见博文下方的算法总结...
  • 标签 Lable 标签:所预测的东东实际是什么(可理解为结论),如线性回归中的 y 变量,如分类问题中...特征 Feature 特征是事物固有属性,可理解为做出某个判断的依据,如人的特征有长相、衣服、行为动作等等,一个事...
  • 机器学习的 label 和 feature 的概念

    千次阅读 2017-01-23 16:35:07
    机器学习中有label 和 feature概念, 对于英文好的同学很容易理解。但可能较差的同学一开始不理解(我也是)。上面的英文对这俩概念做了解释,label是分类,你要预测的东西,而feature则是特征(比如你通过一些特征黄色...
  •    不多说,直接上干货!
  • 机器学习备忘-特征映射

    千次阅读 2020-03-27 11:08:47
    def feature_mapping(x, y, power, as_ndarray=False):#这里x,y是np数组的形式,as_ndarray默认为false,这是作者定义的函数 # """return mapped features as ndarray or dataframe""" data = {"f{...
  • 引言在运用一些机器学习算法的时候不可避免地要对数据进行特征缩放(feature scaling),比如:在随机梯度下降(stochastic gradient descent)算法中,特征缩放有时能提高算法的收敛速度。什么是特征缩放特征缩放的...
  • 初学机器学习1 术语label feature example 1、标签 label 即所要预测的结果是什么,如回归结果的y,分类问题中的分类结果,每一个类。 2.特征feature 事物的固有属性,做出判断的依据。如鸢尾花分类问题中,花瓣、...
  • 机器学习中的特征相关性分析

    千次阅读 2018-04-13 22:32:41
    如果是监督学习,则可以利用以下方法训练模型: y=train_data['Result'] X=data_2015.drop(['Useless Features'],axis=1) 其中Useless Features就是通过上述步骤得到的对result影响不大的特征,在此处为了预测方便...
  •  特征选择(排序)对于数据科学家、机器学习从业者来说非常重要。好的特征选择能够提升模型的性能,更能帮助我们理解数据的特点、底层结构,这对进一步改善模型、算法都有着重要作用。  特征选择主要有两个功能:...
  • 本文是笔者在看完周志华教授的《机器学习》教材后,对基本术语翻译的一些总结: machine learning:机器学习 learning algorithm:学习算法 instance/sample:示例/样本 example:样例 ...
  • 本文讲的都是建模后的可解释性方法。建模之前可解释性方法或者使用本身具备可解释性的模型都不在本文范围内~ 哪些特征在模型看到是最重要的?...特征重要性(Feature Importance) Permutation Importance SHAP
  • Spark MlLib 的机器学习增强功能 基于Maximum-Relevance Minimum-Redundancy的FeatureSelection(通过信息增益衡量的特征的重要性) 用法: MrMrFeatureSelection(vectorModelRDD, labelBuckets, featuresBuckets,...
  • 机器学习算法 综述(入门)

    万次阅读 多人点赞 2019-06-16 21:59:28
    学习了一个学期机器学习算法,从什么都不懂到对十个机器学习算法有一定的了解,下面总结一下十大机器学习算法,从算法的概念、原理、优点、缺点、应用等方面来总结,如果有错误的地方,欢迎指出。 目录 1.决策树...
  • 深度学习CNN的feature map

    千次阅读 2018-01-22 14:24:58
    输入:N0*C0*H0*W0 ...输出的feature map大小: H1=H0+2×pad−kernel_sizestride+1 W1=W0+2×pad−kernel_sizestride+1 注:当stride为1时,若pad=kernel_size−12,那么经过计算后的feature map大小不变
  • 监督学习 无监督学习 半监督学习@监督学习 无监督学习 半监督学习 监督学习 在监督学习中,给定一组数据,我们知道正确的输出结果应该是什么样子,并且知道在输入和输出之间有着一个特定的关系。 监督学习分类 回归...
  • 用于股票预测的深度学习和机器学习 描述:这是用于学习,研究,研究和分析深度学习(DL)和机器学习(ML)中的股票。 使用不同类型的算法通过机器学习或深度学习预测股票。 对股票数据进行试验,以查看其工作原理,...
  • 在用sklearn的时候经常用到feature_importances_ 来做特征筛选,那这个属性到底是啥呢。 分析源码发现来源于每个base_estimator的决策树的 feature_importances_ 由此发现计算逻辑来源于cython文件,这个文件可以...
  • 特征离散化 机器学习算法预处理的特征离散化包括信息增益方法和其他频率、距离分割方法
  • feature_stuff:一个用于高级特征提取,处理和解释的python机器学习库。 最新发布 包装状态 执照 建置状态 它是什么 feature_stuff是一个Python软件包,提供了快速灵活的算法和函数来提取,处理和解释特征: 数值...
  • 机器学习机器学习项目案例 案例1:利用岭回归研究波士顿放假 读取数据 from sklearn.datasets import load_boston boston = load_boston() print('feature_names:', boston.feature_names) print('data (shape) ...
  • 机器学习的基本概念和相关术语

    万次阅读 多人点赞 2020-06-18 11:07:18
    什么是机器学习二.机器学习的相关术语三.机器学习的典型任务四.假设与假设空间五.假设的选择原则六.机器学习的三要素 一.什么是机器学习 人工智能标准化白皮书(2018版) 机器学习(Machine Learning)是一门涉及...
  • 随机森林、机器学习、特征提取算法、ch4-featureSelection-randomForest《python machine learning》Raschka

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 83,948
精华内容 33,579
关键字:

机器学习feature