博雅数据机器学习07

博雅数据机器学习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)

 

posted @ 2021-02-01 06:33  城南漠北  阅读(212)  评论(0编辑  收藏  举报