机器学习 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