机器学习 sklearn 无监督学习 降维算法 PCA

Posted 404detective

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习 sklearn 无监督学习 降维算法 PCA相关的知识,希望对你有一定的参考价值。







import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.datasets import make_blobs

from sklearn.decomposition import PCA


# X为样本特征,Y为样本簇类别, 共1000个样本,每个样本3个特征,共4个簇
X, y = make_blobs(n_samples=10000, n_features=3, centers=[[3, 3, 3], [0, 0, 0], [1, 1, 1], [2, 2, 2]],
                  cluster_std=[0.2, 0.1, 0.2, 0.2], random_state=9)
fig = plt.figure()
ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=30, azim=20)
plt.scatter(X[:, 0], X[:, 1], X[:, 2], marker='o')
plt.show()


pca = PCA(n_components=2)
# pca = PCA(n_components=0.95)
# pca = PCA(n_components=0.99)
pca = PCA(n_components='mle', svd_solver='full')
pca.fit(X)

print(pca.explained_variance_ratio_)  
# [0.98318212 0.00850037 0.00831751]
print(pca.explained_variance_)  
# [3.78521638 0.03272613 0.03202212]

X_new = pca.transform(X)
# plt.scatter(X_new[:, 0], X_new[:, 1], marker='o')
plt.scatter(X_new[:], X_new[:], marker='o')
plt.show()

观察生成的样本


降为二维

算法自动降为一维,因为此维度算法认为最优

我们可以指定降维后的主成分方差,阈值大于0.98318212则会用第二特征维度。

应用

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.datasets import make_blobs
from sklearn.decomposition import PCA

from sklearn.datasets import load_iris
import pandas as pd
from pandas import DataFrame



iris = load_iris()
iris_X = iris.data   #x有4个属性,共有150个样本点
iris_y = iris.target #y的取值有3个,分别是0,1,2

pca = PCA(n_components=4)
pca.fit(iris_X)
#返回所保留的n个成分各自的方差百分比
print(pca.explained_variance_ratio_)
print(pca.explained_variance_)
#[0.92461872 0.05306648 0.01710261 0.00521218]
#[4.22824171 0.24267075 0.0782095  0.02383509]

#修改维度1,2,3观察效果
pca1 = PCA(n_components=2)
pca1.fit(iris_X)
print(pca1.explained_variance_ratio_)
print(pca1.explained_variance_)

X_new = pca1.transform(iris_X)

#输出一维数据n_components=1
# plt.scatter(X_new[:], X_new[:], marker='o',c=iris_y)
# plt.show()

#输出二维数据n_components=2
plt.scatter(X_new[:, 0], X_new[:, 1], marker='o',c=iris_y)

#输出三维数据n_components=3
#fig = plt.figure()
#ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=30, azim=20)
#plt.scatter(X_new[:, 0], X_new[:, 1], X_new[:, 2], marker='o',c=iris_y)

plt.show()

降为一维

算法自动降为二维

降为三维

由于样本点太少,看得不清楚,放大仔细观察可以分出三类。
(不知道怎么改样本点大小,用makersize会报错 ‘PathCollection’ object has no property ‘makersize’)

以上是关于机器学习 sklearn 无监督学习 降维算法 PCA的主要内容,如果未能解决你的问题,请参考以下文章

机器学习 sklearn 无监督学习 降维算法 NMF Non-negative Matrix Factorization

机器学习 sklearn 无监督学习 降维算法 NMF Non-negative Matrix Factorization

无监督学习小记(参考)

机器学习 sklearn 无监督学习 聚类算法 DBSCAN

机器学习 sklearn 无监督学习 聚类算法 DBSCAN

python与机器学习