python典型安装_Python主成分分析-经典案例分析

前期已经学了如何建立变量之间的相关关系及如何分类,接下来要分析如果变量太多,或可以通过降维再进行分析,就要用到降维技术:主成分分析。

案例比较少,我们拿鸢尾花和拉面

的经典案例来做分析。

主成分分析:将多个变量融合成一个变量,使得变量的个数大大降低,并且能够将有相关关系的几个指标合并为1个,消除变量之间的多重共线性。

举例如下,x1,x2,x3这三个自变量中,只有x1的变化能解释y1的变化:

主成分分析主要分析有方差的,即有变动的,没有方差的无法解释因变量。

案例一:分析的样本为鸢尾花,已知鸢尾花数据是4维的,共三类样本,使用PCA实现对鸢尾花数据进行降维,实现在二维平面上的可视化。

import matplotlib.pyplot as plt

import sklearn.decomposition as dp

from sklearn.datasets.base import load_iris

x,y=load_iris(return_X_y=True) #加载数据,x表示数据集中的属性数据,y表示数据标签

pca=dp.PCA(n_components=2) #加载pca算法,设置降维后主成分数目为2

reduced_x=pca.fit_transform(x) #对原始数据进行降维,保存在reduced_x中

red_x,red_y=[],[]

blue_x,blue_y=[],[]

green_x,green_y=[],[]

for i in range(len(reduced_x)): #按鸢尾花的类别将降维后的数据点保存在不同的表表中

if y[i]==0:

red_x.append(reduced_x[i][0])

red_y.append(reduced_x[i][1])

elif y[i]==1:

blue_x.append(reduced_x[i][0])

blue_y.append(reduced_x[i][1])

else:

green_x.append(reduced_x[i][0])

green_y.append(reduced_x[i][1])

plt.scatter(red_x,red_y,c='r',marker='x')

plt.scatter(blue_x,blue_y,c='b',marker='D')

plt.scatter(green_x,green_y,c='g',marker='.')

plt.show()

案例二:拉面案例来自CSDN这个博主的文章

(#版权声明:本文为CSDN博主「波纹疾走」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 #原文链接:https://blog.csdn.net/weixin_40173577/article/details/85814614)

1、先导入所需要的数据和安装包

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

#中文文字显示问题

from pylab import mpl

# 指定默认字体

mpl.rcParams['font.sans-serif'] = ['FangSong']

# 解决保存图像是负号'-'显示为方块的问题

mpl.rcParams['axes.unicode_minus'] = False

from sklearn.decomposition import PCA

df_org = pd.read_excel("拉面.xlsx", sheet_name="拉面")

2、数据中心化

df_std = (df_org - df_org.mean())/df_org.std()

#数据中心化

3、求相关系数

df_corr = df_std.corr()

df_corr

#求相关系数

4、求协方差的特征值和特征向量

eig_value,eig_vector=np.linalg.eig(df_corr)

#特征值

#特征值排序

eig=pd.DataFrame({"eig_value":eig_value})

eig=eig.sort_values(by=["eig_value"], ascending=False)

#获取累积贡献度

eig["eig_cum"] = (eig["eig_value"]/eig["eig_value"].sum()).cumsum()

#合并入特征向量

eig=eig.merge(pd.DataFrame(eig_vector).T, left_index=True, right_index=True)

eig

5、提取主成分,假设要求累积贡献度要达到70%,则取2个主成分

#提取主成分

#假设要求累积贡献度要达到70%,则取2个主成分

#成分得分系数矩阵(因子载荷矩阵法)

loading = eig.iloc[:2,2:].T

loading["vars"]=df_std.columns

loading

6、将样本投影到选取的特征向量上

plt.plot(loading[0],loading[1], "o")

xmin ,xmax = loading[0].min(), loading[0].max()

ymin, ymax = loading[1].min(), loading[1].max()

dx = (xmax - xmin) * 0.2

dy = (ymax - ymin) * 0.2

plt.xlim(xmin - dx, xmax + dx)

plt.ylim(ymin - dy, ymax + dy)

plt.xlabel('第1主成分')

plt.ylabel('第2主成分')

for x, y,z in zip(loading[0], loading[1], loading["vars"]):

plt.text(x, y+0.1, z, ha='center', va='bottom', fontsize=13)

plt.grid(True)

plt.show()

#影响力与正负数无关,只看绝对值。

#可以看到 变量中【汤】对第1主成分影响较大;【配料】对第2主成分影响略大于【面】。

plt.plot(score[0],score[1], "o")

xmin ,xmax = score[0].min(), score[0].max()

ymin, ymax = score[1].min(), score[1].max()

dx = (xmax - xmin) * 0.2

dy = (ymax - ymin) * 0.2

plt.xlim(xmin - dx, xmax + dx)

plt.ylim(ymin - dy, ymax + dy)

plt.xlabel('第1主成分')

plt.ylabel('第2主成分')

for x, y,z in zip(score[0], score[1], score.index):

plt.text(x, y+0.1, z, ha='center', va='bottom', fontsize=13)

plt.grid(True)

plt.show()

结论:由于第1主成分的所有系数都是负值,所以其得分负向越大,该数据对应的第1主成分得分越高。 #可以看到4号数据第1主成分得分最高,说明它的【汤】最受欢迎;同理,1号数据第2主成分得分最高,其【配料】评价最高。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
主成分分析(PCA)是一种经典的统计学方法,可以通过线性变换将数据进行降维,用少数几个变量代替原始的很多变量。它的实现可以使用Python编程语言。\[1\]\[2\] 下面是一个使用Python实现PCA的示例代码: ```python import numpy as np from numpy.linalg import eig from sklearn.datasets import load_iris def pca(X, k): X = X - X.mean(axis=0) # 向量X去中心化 X_cov = np.cov(X.T, ddof=0) # 计算向量X的协方差矩阵,自由度可以选择0或1 eigenvalues, eigenvectors = eig(X_cov) # 计算协方差矩阵的特征值和特征向量 k_large_index = eigenvalues.argsort()\[-k:\]\[::-1\] # 选取最大的K个特征值及其特征向量 k_eigenvectors = eigenvectors\[k_large_index\] # 用X与特征向量相乘 return np.dot(X, k_eigenvectors.T) iris = load_iris() X = iris.data k = 2 X_pca = pca(X, k) print(X_pca) ``` 这段代码使用了NumPy库和scikit-learn库中的load_iris函数来加载鸢尾花数据集。然后,定义了一个pca函数来实现主成分分析。最后,将数据集X降维为k维,并打印出降维后的结果。\[2\] 需要注意的是,PCA的结果是一组新的变量,它们是原始变量的线性组合,因此失去了原有的含义。此外,PCA的解释性较差,主成分往往难以与实际情况中的特征对应,具有一定的模糊性。因此,在每个主成分的贡献率相差不多的情况下,不建议使用PCA。\[3\] 参考链接: \[1\] 如何理解主成分分析法(PCA)清风数学建模学习笔记——主成分分析(PCA)原理详解及案例分析PCA的数学原理【数据处理方法】主成分分析(PCA)原理分析协方差矩阵和矩阵相关系数的理解。 \[2\] 代码实现参考链接 \[3\] PCA的缺陷所在 #### 引用[.reference_title] - *1* [Python机器学习13——主成分分析](https://blog.csdn.net/weixin_46277779/article/details/125533173)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [用python实现主成分分析(PCA)](https://blog.csdn.net/ruoff/article/details/116568680)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [主成分分析法(PCA)的理解(附python代码案例)](https://blog.csdn.net/qq_45722196/article/details/127584340)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值