Python数据分析之特征处理笔记五——特征预处理(特征降维及特征衍生)

书接上文,本次将介绍两种常用的特征降维的方法:主成分分析(Principal Component Analysis,PCA),线性判别分析(Linear Discriminant Analysis,LDA)。

2.3 特征降维

2.3.1基本思想

与特征选择的思想有着异曲同工之妙,都是希望在保留足够信息量的前提下获得比较精简的数据,以提高模型的运算速度。二者的不同之处就是降维的方式:特征选择是是直接删除冗余或不相关的特征,本文中所提到的特征降维是线性降维的过程,将高维度的数据转化成低维度的数据,在这个过程中可能会舍弃原有变量,创造新变量。

2.3.2 主成分分析(PCA)

关于主成分分析的具体内容不再多做介绍,可以参考:主成分分析_百度百科 (baidu.com)

 主成分分析的一般步骤为:

  • 求特征协方差矩阵
  • 求特征协方差矩阵的特征值和特征向量
  • 将特征值按照从大到小的顺序排列,选择其中最大的k个
  • 将样本点投影到选取的特征向量上,投影后的值也就是主成分

PCA方法比较简单,只需要计算方差以衡量信息量,不会受外部因素的影响。同时主成分之间相互正交,可消除原始数据集之间相互影响的因素。但PCA方法对于主成分的解释具有模糊性,且有会删除一些方差虽然小但比较重要的数据,可能会造成模型的过拟合。

下面自定义一个主成分分析的函数:

def myPCA(data,n_components=1000000):
    mean_vals=np.mean(data,axis=0)#针对列取data的均值
    mid=data-mean_vals
    cov_mat=np.cov(mid,rowvar=false)#rowvar为True时表示按行计算协方差,False时为按列计算协方差
    from scipy import linalg
    eig_vals,eig_vects=linalg.eig(np.mat(cov_mat))#计算特征值和特征向量
    eig_val_index=np.argsort(eig_vals)#将特征值进行排序,以方便得到最大特征值
    eig_val_index=eig_val_index[:-(n_components+1):-1]#取最大的特征值
    eig_vects=eig_vects[:,eig_val_indes]#取特征向量
    low_dim_mat=np.dot(mid,eig_vects)#进行投影
    return low_dim_mat,eig_vals

2.3.3 线性判别分析(LDA)

核心思想为:投影变换后同一标注内距离尽可能的小,不同的标注间距离尽可能的大。

也称为 Fisher 线性判别。LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。LDA的基本思想:给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近、异类样例的投影点中心尽可能远离。

所以进行LDA最核心的点是找到一个向量,使得经过投影后同一标注内距离尽可能的小,不同的标注间距离尽可能的大。

下面为LDA应用的简单例子:

X=np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]])
Y=np.array([1,1,1,2,2,2])
LinearDiscriminantAnalysis().fit_transform(X,Y)
clf=LinearDiscriminantAnalysis(n_components=1).fit(X,Y)#转化成一个判别器
clf.predict([[0.8,1]])

 最后判别[0.8,1]为Y=2那一类

2.4 特征衍生

特征衍生就是通过各种方法将特征变多,一般是不会用到的,因为进行特征处理的目的是选取尽可能少的特征来进行建模。

常用的特征衍生方法入下:

  • 特征之间的加减乘除
  • 特征的求导与高阶求导
  • 人工归纳

特征预处理的部分就到这啦,文章中可能有的地方不太准确,烦请各位指正。

一起学习,一起进步。

你可能感兴趣的:(机器学习,数据分析,数据分析,数据挖掘,机器学习,python)