PCA降维原理以及举例

将图像读取之后,如若将每一个像素点看做特征,数据过于庞大和冗余,同时为了速度和可视化效果应先对读取进来的数据进行降维处理。

1.1

消减维度的理由:

(1)大多数的模型在维度较小的情况下比较安全,多余的特征会影响或误导学习器;

(2)更多的特征需要调整更多的参数,容易产生过拟合;

(3)较少的维度数据集训练速度快;

(4)实现数据可视化时,大多限制在两、三个维度上,更加体现降维的必要。

无法使用选择方法删减特征,可以采用统计方法(PCA、LDA、MDS)降维。

1.2降维步骤:

(1)选择特征:删除有明显依赖关系的特征。

(2)用筛选器检测冗余特征:相关性(只针对线性关系),互信息(针对非线性关系)。

具体判断:

使用相关性进行筛选时,从数据序列出发,使用scipy.stats.pearsonr()函数进行相关系数计算,返回值为[相关性系数,P值],P值越大,越不可以相信所计算出的相关性系数。

互信息从数据的分布出发,引入信息熵的概念。具有较高互信息量的特征对,删掉其中一个特征,计算量大。

(3)用封装器让模型选择特征:

筛选器扔掉看似没有用处的特征,但有时可能包含他效果更好,引进封装器,在Sklearn.feature_selection包中RFE比较常用。

(4)其他特征选择方法---特征抽取PCA,LDA,MDS

2PCA

线性方法,适用于分类和回归问题。在sklearn.decomposition中有PCA类。事先初始化PCA时无法指定n_components参数个数,将数据进行完全转换,对数据拟合,调用explained_variance_ratio_,返回[最大方差方向的基向量的比例,次最大方差方向的比例],画出此数组图(称为Scree图),在图像拐点处即为成分n_components个数—得出需要的成分数。引入非线性变换kernel pca解决非线性数据。

使用的函数:Numpy中linalg.eig()方法求解特征值和特征向量

2.2.2sklearn.decomposition.PCA介绍

(1)参数

n_components:降维后的特征维度数

whiten :是否对降维后的数据的特征归一化(方差=1),默认false

svd_solver:即指定奇异值分解SVD的方法,‘auto’, ‘full’, ‘arpack’, ‘randomized’

(2)成员

explained_variance_:降维后的各主成分的方差值。方差值越大越重要 ;
explained_variance_ratio_:降维后各主成分的方差值占总方差值的比例,比例越大越重要; 
components_ :返回具有最大方差的成分;
n_components_:返回所保留的成分个数n;

(3)对象方法

①Fit(X,y=None)

代表学习训练(适用于无监督模型y标签为none),函数返回值:调用fit方法的对象本身。比如pca.fit(X),表示用X对pca这个对象进行训练。

④transform(X) 
将数据X转换成降维后的数据(数据还原:x= (x_new *降维使用的U矩阵))

举个例子:

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

from sklearn.datasets.samples_generator import make_blobs

from sklearn.decomposition import PCA

# X为样本特征,Y为样本簇类别, 共1000个样本,每个样本3个特征,共4个簇

X, y = make_blobs(n_samples=10000, n_features=3, centers=[[8,3, 3],         

      [0,0,0], [1,6,8], [2,2,2]], cluster_std=[0.4, 0.1, 0.2, 0.2],

      random_state =9)

fig = plt.figure()

ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=20, azim=20)

plt.scatter(X[:, 0], X[:, 1], X[:, 2])

pca = PCA()

pca.fit(X)

print(pca.explained_variance_)


不喜勿喷,本人正在努力学习,哈哈


你可能感兴趣的:(sklearn,python基础)