机器学习——PCA

PCA主成分分析

介绍

PCA是一种无监督学习的降维技术

思想

1.投影后样本越分散,保留的信息越多
2.PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征

做法

1.将所有的样本点向直线w投影
2.目标函数:让投影后样本的方差极大

PCA的一般执行步骤

第一步:X减去均值
第二步:对协方差矩阵XXT做特征值分解,得到特征值和对应特征向量
第三步:按照特征值降序排序,取得对应的特征向量拼成投影矩阵WT
第四步:对X做转换

代码实现

import numpy as np
from sklearn.decomposition import PCA


def pca(X, n_components):
    # 第一步:X减去均值
    mean = np.mean(X, axis=1)
    normX = X - mean.reshape(-1, 1)

    # 第二步:对协方差矩阵XXT做特征值分解,得到特征值和对应特征向量
    cov_mat = np.dot(normX, np.transpose(normX))
    vals, vecs = np.linalg.eig(cov_mat)

    # 第三步:按照特征值降序排序,取得对应的特征向量拼成投影矩阵WT
    eig_pairs = [(np.abs(vals[i]), vecs[:, i]) for i in range(X.shape[0])]
    eig_pairs.sort(reverse=True)
    WT = np.array([ele[1] for ele in eig_pairs[:n_components]])

    # 第四步:对X做转换
    data = np.dot(WT, normX)
    return data


n_components = 2
X = np.transpose(np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]))
data = pca(X, n_components=n_components)
print(data)

X = np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])

p = PCA(n_components=n_components)
a = p.fit_transform(X)
print(a)

结果

[[-0.50917706 -2.40151069 -3.7751606   1.20075534  2.05572155  3.42937146]
 [ 1.08866118 -0.10258752 -0.43887001  0.05129376 -0.46738995 -0.13110746]]
[[ 0.50917706  1.08866118]
 [ 2.40151069 -0.10258752]
 [ 3.7751606  -0.43887001]
 [-1.20075534  0.05129376]
 [-2.05572155 -0.46738995]
 [-3.42937146 -0.13110746]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值