博雅数据机器学习07
PCA算法
import pandas as pd
import numpy as np
from numpy import linalg as LA
# 读取数据
iris = pd.read_csv('iris.csv', usecols=range(4))
# 定义主成分分析函数
def pca(dataMat, n_components):
# 数据中心化
meanVals = np.mean(dataMat, axis=0)
centered = dataMat - meanVals
# 计算协方差矩阵,并进行特征值分解
# 注意,协方差矩阵计算需指定rowvar参数为False,即表明每一列
# 为每一个特征的不同取值
covMat = np.cov(centered, rowvar=False)
w, v = LA.eig(covMat)
# 将特征值从大到小排序,并得到对应的索引值序列
idxMin2Max = np.argsort(w)
idxMax2Min = idxMin2Max[::-1]
# 取前n_components个特征向量构成转换矩阵
vidx = idxMax2Min[:n_components]
tfMat = v[:, vidx]
# 将原始数据转换到新的低维空间
lowdMat = np.matmul(dataMat, tfMat)
return lowdMat, tfMat
# 使用自定义pca函数对鸢尾花数据进行降维
irisMat = np.mat(iris)
iris2d, _ = pca(irisMat, n_components=2)