机器学习之PCA降维算法(二)手写实现

PCA

PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征

代码实现

'''
    pca
'''
# 导入科学计算包,方便矩阵的生成和运算
import numpy as np
# 数据生成 直接转置,因为协方差矩阵A = (X - X.mean).T
X = np.transpose(np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]))
# 降至的维度
n = 2


# 定义pca函数
def pca(X,n):
    # 数据处理
    X_mean = np.mean(X,axis=1)
    # 这里将平均值进行reshape,是利用了矩阵运算的广播机制,保证在不同行列的情况下做加减
    X = X - X_mean.reshape(-1,1)
    # 求取协方差矩阵
    cov_mat = np.dot(X,X.T)
    # 将协方差进行特征值分解 第一个返回值是特征值矩阵,第二个返回值是特征向量矩阵
    values,vectors = np.linalg.eig(cov_mat)
    # 按特征值将特征向量进行排序
    # 拼接一个特征值和特征向量一起的矩阵
    eig_mat = [(np.abs(values[i]),vectors[:,i]) for i in range(len(X))]
    # 排序
    eig_mat.sort(reverse=True)
    # 拼接WT矩阵 降维后的权重矩阵,只保留要保留的列
    WT = np.array([_[1] for _ in eig_mat[:n]])

    # 对X进行转换,降维
    return np.dot(WT,X)


# 调用pca降维,获取降维后的数据
X = pca(X,n)
# 降维完毕
print(X)

效果如下

print(X)
>>[[-0.50917706 -2.40151069 -3.7751606   1.20075534  2.05572155  3.42937146]
 	[ 1.08866118 -0.10258752 -0.43887001  0.05129376 -0.46738995 -0.13110746]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值