zoukankan      html  css  js  c++  java
  • 特征处理:特征常用处理

    属性构造

    1)利用已有的属性构造出新的属性,并加入到现有的属性集合中。

    举例:在进行防窃漏电诊断建模时,已有属性有供入电量、供出电量。理论上供入电量和供出电量是相等的,但是由于传输过程中存在电能损耗,使得供入电量略大于供出电量,那为了判断用户的是否存在窃漏电行为,可以构造一个新的指标----线损率

    线损率 = (供入电量-供出电量)/供入电量

    线损率正常范围一般在3%-15%,远远超过这个范围,就可以认为这个用户很可能存在窃漏电行为

    2)合并属性:将一些旧属性合并为新属性

    生成多项式特征

    通过考虑输入数据的非线性特征,常常增加模型的复杂性。一个简单而常用的方法是多项式特征,可以获得特征的高阶和交互项。

    import numpy as np

    from sklearn.preprocessing import PolynomialFeatures

    X = np.arange(9).reshape(3, 9)

    >>>                                               

    array([ [0, 1, 2],

          [3, 4, 5],

          [6, 7, 8]])

    poly = PolynomialFeatures(2)

    poly.fit_transform(X) 

    >>>                         

    array([ [ 1.,  0.,  1.,  2.,  0.,  0.,  0.,  1.,  2.,  4.],

          [ 1.,  3.,  4.,  5.,  9., 12., 15., 16., 20., 25.],

          [ 1.,  6.,  7.,  8., 36., 42., 48., 49., 56., 64.]])

    在一些情况下,只需要功能之间的交互项,并且可以通过设置得到interaction_only=True

    poly = PolynomialFeatures(2,  interaction_only=True)

    poly.fit_transform(X) 

    >>> 

    array([ [ 1.,  0.,  1.,  2.,  0.,  0.,  2.],

          [ 1.,  3.,  4.,  5., 12., 15., 20.],

          [ 1.,  6.,  7.,  8., 42., 48., 56.]])

    特征选择:决策树归纳

    利用决策树的归纳方法对初始数据进行分类归纳学习,获得一个初始决策数,所有没有出现在这个决策树上的属性均可认为是无关属性,因此将这些属性从初始集合中删除,就可以获得一个较优的属性子集。

    特征选择:过滤型

    1、原理

    使用发散性或相关性指标对各个特征进行评分,选择分数大于阈值的特征或者选择前K个分数最大的特征。具体来说,计算每个特征的发散性,移除发散性小于阈值的特征/选择前k个分数最大的特征;计算每个特征与标签的相关性,移除相关性小于阈值的特征/选择前k个分数最大的特征。

    2、方差选择法(发散性)

    使用方差作为特征评分标准,如果某个特征的取值差异不大,通常认为该特征对区分样本的贡献度不大,因此在构造特征过程中去掉方差小于阈值的特征。

    注意:方差较小的特征很少,方差选择法简单但不好用,一般作为特征选择的预处理步骤,先去掉方差较小的特征,然后使用其他特征选择方法选择特征。

    代码实现:

    from sklearn.datasets import load_iris

    iris = load_iris()

    print("iris特征名称 ",iris.feature_names)

    print("iris特征矩阵 ",iris.data)

    # 特征选择--方差选择法

    from sklearn.feature_selection import VarianceThreshold

    vt = VarianceThreshold(threshold = 1)  # threshold为方差的阈值,默认0,阈值方差太小,能够过滤掉的特征和少,反之太多

    vt = vt.fit_transform(iris.data)       # 函数返回值为特征选择后的特征

    print("方差选择法选择的特征 ",vt)

    3、卡方检验法(相关性)(分类问题)

    使用统计量卡方检验作为特征评分标准,卡方检验值越大,相关性越强(卡方检验是评价定性自变量对定性因变量相关性的统计量)

    代码实现:

    # 载入数据

    from sklearn.datasets import load_iris

    iris = load_iris()

    # 特征选择

    from sklearn.feature_selection import SelectKBest # 移除topK外的特征

    from sklearn.feature_selection import chi2        # 卡方检验

    skb = SelectKBest(chi2,k=2)

    new_data = skb.fit_transform(iris.data,iris.target)

    4、皮尔森相关系数法法(相关性)(回归问题)

    使用pearson系数作为特征评分标准,相关系数绝对值越大,相关性越强(相关系数越接近于1或-1时,相关性越强;相关系数越接近于0时,相关性越弱)。特点:皮尔森相关系数法能够衡量线性相关的特征集。

    代码实现:

    from sklearn.datasets import load_iris

    irisdata = load_iris()

    # 特征选择(pearson相关系数法)

    from sklearn.feature_selection import SelectKBest  # 移除topK外的特征

    from scipy.stats import pearsonr                   # 计算皮尔森相关系数

    from numpy import array

    """

    # 函数返回值:保留topk特征,移除topk外特征

    # 第一个参数:皮尔森相关系数(输入特征矩阵和目标向量,输出二元组(评分,P),二数组第i项为第i个特征的评分和p值

    # 第二个参数:topK个数

    """

    #shape(irisdata.data)=n*4, shape(irisdata.target)=1*n, 所以在计算Pearsonr相关系数时要转置

    skb = SelectKBest(lambda X, Y: tuple(map(tuple,array(list(map(lambda x:pearsonr(x, Y), X.T))).T)), k=3)

    skb = skb.fit_transform(irisdata.data, irisdata.target)

    5、互信息系数法(相关性)

    特点:互信息系数法能够衡量各种相关性的特征集,计算相对复杂。

    特征选择:包裹型

    把特征选择看作一个特征子集搜索问题,筛选各种特征子集,用模型评估效果。

    典型的包裹型算法为“递归特征删除算法”(recursive feature elimination algorithm)

    比如使用逻辑回归:

    (1)用全量特征跑一个模型

    (2)根据现行模型的系数(系数越大,相关性越大),删掉5-10%的弱特征,观察准确率/AUC的变化

    (3)逐步进行,直至准确率/AUC出现大的下滑停止

    包裹型特征选择python包:

    from sklearn.feature_selection import RFE

    from skleaen.linear_model import LinearRegression

    boston = load_boston()

    X = boston[“data”]

    Y = boston[“target”]

    names = boston[“feature_names”]

    lr = LinearRegression()

    rfe = RFE(lr, n_feature_to_select=1)

    rfe.fit(X, Y)

    #打印排序后的特征结果

    print sorted(zip(map(lamada x: round(x, 4), rfe.ranking_), names))

    特征选择:嵌入型

    根据模型来分析特征的重要性(有别于上面包裹型的特征选择方式)

    最常见的方式是用正则化方式来做特征选择,例如使用L1正则化的LR模型,会得到一些系数为0的权重值。

    嵌入型特征选择Python包

    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)

  • 相关阅读:
    boost库常用库介绍
    boost介绍
    vs2019+win10配置boost库
    交互式多媒体图书平台的设计与实现
    47.全排列 2
    46.全排列
    基于VSCode的C++编程语言的构建调试环境搭建指南
    码农的自我修养之必备技能 学习笔记
    工程化编程实战callback接口学习笔记
    Erlang模块inet翻译
  • 原文地址:https://www.cnblogs.com/yongfuxue/p/10095380.html
Copyright © 2011-2022 走看看