机器学习 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’)
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值