通过PCA算法对iris数据集进行降维处理

①加载数据集代码:

import sklearn
from sklearn.datasets import load_iris
iris = load_iris()
if __name__ == '__main__':
    iris = sklearn.datasets.load_iris()

    # data对应了样本的4个特征,150行4列
    print('>> shape of data:')
    print(iris.data.shape)

    # 显示样本特征的前5行
    print('>> line top 5:')
    print(iris.data[:5])

    # target对应了样本的类别(目标属性),150行1列
    print('>> shape of target:')
    print(iris.target.shape)

    # 显示所有样本的目标属性
    print('>> show target of data:')
    print(iris.target)

 ②数据标准化(去均值)代码:

R=np.array(iris.data)

# 求每一列的平均值
B=np.mean(R,axis=0,keepdims=True)
print('>>average matrix')
print(B)

# 得到均值矩阵
R=np.matrix(R)-np.matrix(B)
print('after-ave top 5 matrix')
print(R[:5])

此处使用np.mean()函数直接求均值,并将R直接减去均值矩阵(np.matrix()函数会自动对均值矩阵进行扩容),得到标准化(去均值)后的代码。

求协方差矩阵代码:

    R_cov = np.cov(R, rowvar=False)
    iris_covmat = pd.DataFrame(data=R_cov, columns=iris.feature_names)

此处引入np.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None)函数,对给定的数据和权重,估计协方差矩阵

并通过pandas库的DataFrame函数对协方差矩阵进行展示;

求特征值和特征向量代码:

    # 计算特征值和特征向量
    eig_values, eig_vectors = np.linalg.eig(R_cov)
    # 选取前两个特征向量进行后续操作
    featureVector = eig_vectors[:, :2]

此处使用np.linalg.eig()函数求协方差矩阵的特征值与特征向量。此处将iris数据集降维至二维,故选取前两个特征向量进行操作。

将数据降到k维(k的值可以依据原数据集选取,如果使用iris数据集,k可以取值为2),按特征值大小排序,选取前k个特征值对应的特征向量,计算:

    # 二维简化:
    featureVector_t = np.transpose(featureVector)
    R_t = np.transpose(R)
    newDataset_t = np.matmul(featureVector_t, R_t)
    newDataset = np.transpose(newDataset_t)
    print('>>2D data:')
    print(newDataset[:5])

为了建立新的数据集,我们需要将新特征向量(选定的主成分)的转置左乘原始矩阵(R)的转置。之后,输出前五组降维成功后的数值。

(作业请勿直接复制粘贴请勿直接复制粘贴请勿直接复制粘贴)

借鉴链接:https://www.jianshu.com/p/25a66dee6450

你可能感兴趣的:(算法,机器学习,python,numpy,数据分析)