机器学习之CPA降维

主成分分析降维

from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import pylab as pl
from itertools import cycle

iris = load_iris()  # 再熟悉不过的数据集鸢尾花

numSamples, numFeatures = iris.data.shape
print(numSamples)
print(numFeatures)  # 花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性(4D)
print(list(iris.target_names))
150
4
['setosa', 'versicolor', 'virginica']
X = iris.data
pca = PCA(n_components=2, whiten=True).fit(X) 
X_pca = pca.transform(X)
X = iris.data
pca = PCA(n_components=2, whiten=True).fit(X) # 降维到2D
X_pca = pca.transform(X)

n_components:这个参数可以帮我们指定希望PCA降维后的特征维度数目。最常用的做法是直接指定降维到的维度数目,此时n_components是一个大于等于1的整数。当然,我们也可以指定主成分的方差和所占的最小比例阈值,让PCA类自己去根据样本特征方差来决定降维到的维度数,此时n_components是一个(0,1]之间的数。当然,我们还可以将参数设置为"mle", 此时PCA类会用MLE算法根据特征的方差分布情况自己去选择一定数量的主成分特征来降维。我们也可以用默认值,即不输入n_components,此时n_components=min(样本数,特征数)。

whiten :判断是否进行白化。所谓白化,就是对降维后的数据的每个特征进行归一化,让方差都为1.对于PCA降维本身来说,一般不需要白化。如果你PCA降维后有后续的数据处理动作,可以考虑白化。默认值是False,即不进行白化。

https://blog.csdn.net/cxmscb/article/details/66473130

print(pca.components_) #返回模型的各个特征向量
[[ 0.36138659 -0.08452251  0.85667061  0.3582892 ]
 [ 0.65658877  0.73016143 -0.17337266 -0.07548102]]
print(pca.explained_variance_ratio_)  #返回各个成分各自的方差百分比,第1个投影特征的方差占比高达0.91
print(sum(pca.explained_variance_ratio_)) 
[0.92461872 0.05306648]
0.9776852063187949
%matplotlib inline
from pylab import *

colors = cycle('rgb')
target_ids = range(len(iris.target_names))
pl.figure()
for i, c, label in zip(target_ids, colors, iris.target_names):
    pl.scatter(X_pca[iris.target == i, 0], X_pca[iris.target == i, 1],
        c=c, label=label)
pl.legend()
pl.show()    

机器学习之CPA降维_第1张图片

你可能感兴趣的:(04_机器学习)