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