主成分分析(principal component analysis)是一种常见的数据降维方法,其目的是在“信息”损失较小的前提下,将高维的数据转换到低维,从而减小计算量。
某医学院测得20例肝病患者的4项肝功能指标:SGPT(转氨酶),肝大指数,ZnT(硫酸锌浊度)和AFP(胎甲球蛋白),分别用X1~X4表示,研究数据见下表,试进行主成份分析。
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
(1)第一步 数据标准化
#读取数据
df=pd.read_table(filepath_or_buffer=r'E:\数据挖掘\算法论理\机器学习\主成分分析\python案例\肝病患者案例\org_data.txt',sep='|')
#print(df)
#数据标准化(归一化)
X_scaler = StandardScaler()
x = X_scaler.fit_transform(df)
(2)第二步 主成份分析
#保证降维后的数据保持90%的信息
pca = PCA(n_components=0.9)
pca.fit(x)
pca_x=pca.transform(x)
(3)第三步 得出主成份信息
#保留主成份个数
print(pca.n_components_ )
#主成份方程系数
print(pca.components_)
#主成份Z1=-0.69996363x1 -0.6897981x2 -0.08793923x3 -0.16277651x4
#主成份Z2=0.09501037x1 -0.28364662x2 + 0.9041587x3+0.30498307x4
#主成份Z3=0.24004879x1 -0.05846333x2+ 0.27031356x3 -0.93053167x4
#主成份矩阵维度
print(pca_x.shape)
#输出降维后的主成份矩阵
print(pca_x)
(4)第四步 展示第1主成份与第2主成份散点图
df1 = pd.DataFrame(pca_x)
df1.columns =['ya','yb','yc']
df1.plot(kind='scatter',x='ya', y='yb', label='Scatter plot')
plt.show()
此两点为离群点,第2主成份较为突出,由于第2主成份得分是描述慢性肝炎炎症的指标,故判断此两位患者很可能患上慢性肝炎。