sklearn主成分分析PCA
sklearn主成分分析PCA
数学原理
给数学基础不是很好的看
PCA主要用于降维,比如一个人有身高,年龄,样貌,性别,智力,耐力,速度,成绩等等很多特征,每种特征便是一个维度。假如你觉得描述一个人的特征太多,你想要用一两个或几个特征就个以描述一个人,并且这几个特征包含之前提到所有特征所包含的信息,将这么原来的众多特征转化为几个特征的过程就是降维。而降维后得到的特征包含的信息量的多少也叫做贡献率,信息量越多越能够反应本质。
代码
这里举一个最常用的水仙花的例子
导入包
包括sklearn他的好基友们啦。
1 | import matplotlib.pyplot as plt |
导入数据
这是一个水仙花的案例
1 | iris = load_iris() |
有x.shape = (150, 4)
,即每朵花共有四个特征,分别为
1 | iris.feature_names = |
而y
是一个分类变量,分别为[0,1,2]
代表三种不同的花
核心代码
还是sklearn中的老三样:
- 实例化PCA()
- 调用
fit()
函数 - 调用
transform()
函数1
2
3pca = PCA(n_components = 2)
pca = pca.fit(x)
x_dr = pca.transform(x)这里
n_components
表示降维后所得到的维度
或者也可以直接一步到位1
x_dr = PCA(2).fit_transform(x)
查看降维后所带有的信息量大小
- 两个维度信息量大小可以得到
1
print(pca.explained_variance_)
[4.22824171, 0.24267075]
- 两个维度贡献率
1 | pca.explained_variance_ratio_ |
可以得到[0.92461872, 0.05306648]
可视化
当我们把数据降维后,可以观察其在新的维度上的分布
1 | plt.figure() |
其中
x_dr[y = 0,0]用了布尔索引
得到如下结果
可以这是一个分簇的分布,也就是说降维之后其实已经比较好分类了
扩展
累计方差贡献率曲线
当选取维度不同时累计贡献率的曲线。
1 | pca_line = PCA().fit(x) |
最大似然估计选择超参数
这种方法可以自动选出最合适的维度
1 | pca_mle = PCA(n_components = "mle") |
比如上述例子为我们选了维度为3,累计贡献率高达0.994
按贡献率选择
意味着你想要他的累计贡献率达到0.97时的维度。
1 | pca_f = PCA(n_components=0.97,svd_solver="full") |
贡献率分别为[0.92461872, 0.05306648]
- Post title:sklearn主成分分析PCA
- Post author:newsun-boki
- Create time:2021-11-02 01:00:55
- Post link:https://github.com/newsun-boki2021/11/02/python-pca/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.