PCA主成分分析以及Python实现(阅读笔记)

简述

PCA日常使用,但还没有研究过其理论,这让我很好奇。

理论部分

《机器学习》中是这样开始的:

对于正交属性空间的样本点,如何用一个超平面来对所有的样本点进行表达。

  • 超平面和半空间是优化领域的两个重要概念
  • 简单来说,矩阵方程 W ∗ X + b = 0 W*X+b = 0 WX+b=0表示的是超平面, W ∗ X + b ≥ 0 W*X+b \geq 0 WX+b0表示的就是半空间。
  • 显然超平面是直线在高维空间的扩展。(只有这句话是书中的点,其他都是我补充的)

这样的超平面(表达点的超平面),这个**“表达”**的含义,我的理解是:对于点在超平面上的投影Projection。

  • 最近重构性:样本点到这个超平面的距离都足够的近;
  • 最大可分性:样本点到这个超平面上的投影都足够的分散

优化的矩阵变为

max ⁡ W t r ( W T X X T W ) s . t . W T W = 1 \max_W{tr(W^TXX^TW)}\\s.t. W^TW=1 Wmaxtr(WTXXTW)s.t.WTW=1

解得(拉格朗日乘子法)

X T X w i = λ i w i X^TXw_i=\lambda_iw_i XTXwi=λiwi

明显 λ \lambda λ X T X X^TX XTX的特征值。

算法流程

输入: 样本集 D = { i = 1 , . . . , m ∣ x i } D=\{i=1,...,m| x_i\} D={i=1,...,mxi},低维度空间维数d
过程:

  1. 对样本进行中心化: x i = x i − 1 m ∑ i m x i x_i = x_i -\frac{1}{m}\sum_i^m{x_i} xi=xim1imxi
  2. 计算协方差矩阵 X T X X^TX XTX
  3. 计算协方差矩阵 X T X X^TX XTX的特征向量,同时按照特征值进行排序
  4. 返回特征值最大的前d个向量作为投影矩阵
  5. 用投影矩阵来转换所有节点

Python实现

  • 导入数据
from sklearn import datasets

iris = datasets.load_iris()
  • 用sklearn版本的PCA
from sklearn.decomposition import PCA
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

X_reduced = PCA(n_components=2).fit_transform(iris.data)
kmeans = KMeans(n_clusters=3).fit(X_reduced)
plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=kmeans.labels_, cmap=plt.cm.Set1)

在这里插入图片描述

  • 自己实现PCA
import numpy as np

def pca(X, d):
    # Centralization
    means = np.mean(X, 0)
    X = X - means
    # Covariance Matrix
    covM = np.dot(X.T, X)
    eigval, eigvec = np.linalg.eig(covM)
    indexes = np.argsort(eigval)[-d:]
    W = eigvec[:, indexes]
    return np.dot(X, W)
  • 用自己的pca跑一下
X_pca = pca(iris.data, 2)
kmeans = KMeans(n_clusters=3).fit(X_pca)
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=kmeans.labels_, cmap=plt.cm.Set1)
  • 自己跑的效果图(就是跟上面的在横纵轴上发生了颠倒而已)完全一致~

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥宅_Sean

公众号“肥宅Sean”欢迎关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值