zoukankan      html  css  js  c++  java
  • 数据挖掘——特征工程

    特征工程(Feature Engineering)

      特征工程其本质上是一项工程活动,它的目的是最大限度地从原始数据中提取特征以供算法和模型使用。

      特征工程的重要性:

    • 特征越好,灵活性越强
    • 特征越好,模型越简单
    • 特征越好,性能越出色

    数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限。特征工程的最终目的就是提升模型的性能。

    特征工程包括:数据处理、特征选择、维度压缩三大方面的内容。

    1、数据处理:量纲不一、虚拟变量、缺失值填充

    1.1、量纲不一

    量纲就是单位,特征的单位不一致就不能放在一起比较,可以使用数据标准化的方法来达到量纲一致的要求。

    常用的数据标准化方法:0-1标准化、Z标准化、归一化

    1.1.1  0-1标准化

      0-1标准化是对原始数据进行线性变化,将特征值映射成区间为[0,1]的标准值中。

      标准化值 = 

     导入一份含电影票房和豆瓣评分的数据如下

      基于sklearn包的0-1标准化:

    scaler = MinMaxScaler()
    
    data['票房0-1标准化'] = scaler.fit_transform(np.array(data['累计票房']).reshape(5, -5))
    data['评分0-1标准化'] = scaler.fit_transform(np.array(data['豆瓣评分']).reshape(5, -5))

    1.1.2 Z标准化

      Z标准化是基于特征值的均值和标准差进行数据的标准化,标准化后的变量围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。

      标准化值 = 

      基于sklearn包的Z标准化:

    from sklearn.preprocessing import scale
    data['票房z标准化'] = scale(data['累计票房'])
    data['评分z标准化'] = scale(data['豆瓣评分'])

    1.2、 虚拟变量

    虚拟变量也叫哑变量或离散特征编码,可用来表示分类变量、非数量因素可能产生的影响。

     python中主要通过pandas包中的get_dummies方法进行特征变量的虚拟化。

    1.3、缺失值

      缺失值产生的原因:有些信息暂时无法获取(单身人士的配偶、未成年人的收入等);有些信息被遗漏或错误的处理了

      缺失值处理方法:数据补齐;删除缺失值;不处理

    from sklearn.preprocessing import Imputer
    # mean, median, most_frequent 三种处理参数
    imputer = Imputer(strategy='mean')
    imputer.fit_transform(data2[['累计票房']])

    2、 特征选择:

    如何选择特征:考虑特征是否发散;考虑特征与目标相关性

    以以下格式的数据为例,用不同方法得到特征

    2.1 、方差选择法

    先计算各个特征的方差,根据阈值,选择方差大于阈值的特征

    基于sklearn包的方差选择获取特征的方法

    from sklearn.feature_selection import VarianceThreshold
    varianceThreshold = VarianceThreshold(threshold=10) #设置方差阈值,只选择方差大于10的特征
    varianceThreshold.fit_transform(data[['累计票房', '豆瓣评分']])  
    
    data[['累计票房', '豆瓣评分']].std() #计算两列各自的方差,其中豆瓣评分方差为1.79,低于10
    
    varianceThreshold.get_support() #得到选择特征的列的序号

    2.2、 相关系数法

    先计算各个特征对目标值的相关系数,选择更加相关的特征

    from sklearn.feature_selection import SelectKBest
    from sklearn.feature_selection import f_regression
    
    selectbest =SelectKBest(f_regression, k=2) #设置通过回归的方法, 选择数量为2个的特征
    
    feature = data1[['月份','季度','广告费用','客流量']]  #变量矩阵
    bestfeature = selectbest.fit_transform(feature,data1['销售额']) #得到与销售额相关度最高的2个变量
    feature.columns[selectbest.get_support()]  #获得特征列的名称

    2.3、 递归特征消除法

    使用一个基模型来进行多轮训练,经过多轮训练后,保留指定的特征数

    from sklearn.feature_selection import RFE
    from sklearn.linear_model import LinearRegression
    
    #选择线性回归模型, 保留2 个特征
    rfe = RFE(estimator= LinearRegression(), n_features_to_select=2) 
    
    sFesture = rfe.fit_transform(feature, data1['销售额'])
    
    rfe.get_support()

    2.4、 模型选择法

    将建好的模型对象传入选择器,然后它会根据这个建好的模型,自动选择最好的特征值

    from sklearn.feature_selection import SelectFromModel
    
    lrmodel = LinearRegression()  #先创建一个线性回归对象
    selectmodel = SelectFromModel(lrmodel)
    
    selectmodel.fit_transform(feature,data1['销售额'])
    feature.columns[selectmodel.get_support()]

    3、 维度压缩

    特征选择完成后,可以直接训练模型,但可能由于特征矩阵过大,导致计算量和计算时间大,因此需要降低矩阵维度。

    主成分分析(PCA)就是最常用的数据降维方法:在减少数据维度的同时,保持对方差贡献最大的特征。

    以iris数据集为例,将四维数据转化成三维、二维数据

    from sklearn import datasets
    iris = datasets.load_iris()
    data_iris = iris.data
    target = iris.target
    
    from sklearn.decomposition import PCA
    pca_3 = PCA(n_components=3) #创建一个维度为3维的PCA对象
    data_pca_3 = pca_3.fit_transform(data_iris) #将iris数据集降至三维

    将三维图形绘制出来

    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    
    colors = {0:'r', 1:'b', 2:'k'}
    markers = {0:'x', 1:'D', 2:'o'}
    fig = plt.figure(1, figsize=(8, 6))
    ax = Axes3D(fig, elev=-150, azim=110)
    
    data_pca_gb = pd.DataFrame(data_pca_3).groupby(target)
    
    for g in data_pca_gb.groups:
        ax.scatter(
            data_pca_gb.get_group(g)[0], 
            data_pca_gb.get_group(g)[1], 
            data_pca_gb.get_group(g)[2], 
            c=colors[g], 
            marker=markers[g],
            cmap=plt.cm.Paired)

    得到如下的三维图形

    将数据降至二维同理

    pca_2 = PCA(n_components=2) 
    data_pca_2 = pca_2.fit_transform(data_iris)    
    data_pca_gb = pd.DataFrame(data_pca_2).groupby(target)

  • 相关阅读:
    python 指定文件夹下所有文件(包括子目录下的文件)拷贝到目标文件夹下
    python 删除文件或文件夹
    Computer Science Theory for the Information Age-1: 高维空间中的球体
    Jordan Lecture Note-12: Kernel典型相关分析(Kernel Canonical Correlation Analysis, KCCA).
    王道论坛研究生机试练习赛(二)
    Jordan Lecture Note-11: 典型相关分析(Canonical Correlation Analysis, CCA).
    PAT 1021
    Jordan Lecture Note-10: Kernel Principal Components Analysis (KPCA).
    PAT 1020
    PAT 1019
  • 原文地址:https://www.cnblogs.com/rix-yb/p/9827463.html
Copyright © 2011-2022 走看看