《统计学习方法》之主成分分析PCA结合python实现

文章目录

  • 1.基础知识
    • 1.1 基本想法
    • 1.2 主要性质及定理
      • 1.2.1 主成分的表示方法
      • 1.2.2 主成分的总体性质
      • 1.2.3 什么是因子负荷量
      • 1.2.4 主成分的方差贡献率
    • 1.3 规范化变量的总体主成分与样本主成分步骤
    • 1.4 举例理解主成分分析
  • 2. python代码实现PCA
    • 2.1 手动实现PCA
      • 2.1.0 导入所需库包和数据集
      • 2.1.1 数据规范化处理
      • 2.1.2 计算相关矩阵
      • 2.1.3 求相关矩阵的特征值及其对应的单位特征向量
      • 2.1.4 主成分的累计方差贡献率
      • 2.1.5 主成分的分析结果
      • 2.1.6 主成分的因子负荷量
      • 2.1.7 将数据投影到新特征上
    • 2.2 scikit-learn实现PCA
      • 2.2.1 StandardScaler标准化处理
      • 2.2.2 利用sklearn.decomposition的 PCA降维
      • 2.2.3 原始数据在新特征上的展现

最近在学习李航老师的《统计学习方法》第16章-主成分分析(PCA),结合运用python代码实现,记录一下。

1.基础知识

1.1 基本想法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.2 主要性质及定理

1.2.1 主成分的表示方法

在这里插入图片描述

1.2.2 主成分的总体性质

在这里插入图片描述

1.2.3 什么是因子负荷量

在这里插入图片描述

在这里插入图片描述

1.2.4 主成分的方差贡献率

在这里插入图片描述

1.3 规范化变量的总体主成分与样本主成分步骤

总体主成分分析是定义在样本总体上的。在实际问题中,需要在观测数据上进行主成分分析,这就是样本主成分分析。

在这里插入图片描述
假设对m维随机变量【既有m个特征变量】进行n次独立观测,下面的m、n 同假设。
在这里插入图片描述
在这里插入图片描述

1.4 举例理解主成分分析

在这里插入图片描述

在这里插入图片描述

2. python代码实现PCA

2.1 手动实现PCA

参考的一些优秀的文章
如何通俗理解PCA(主成分分析)算法的数学原理和代码实现
Python机器学习——主成分分析PCA
审稿人:PCA的误区就是"分类",但Python可以画得很漂亮!

2.1.0 导入所需库包和数据集

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler 
from matplotlib.patches import Ellipse
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei']#解决图表中中文显示问题
plt.rcParams['axes.unicode_minus']=False# 解决图表中负号不显示问题
import warnings
warnings.filterwarnings("ignore")

# 设置Seaborn风格
sns.set(style="whitegrid", palette="muted", font_scale=1.2)

# 加载Iris数据集
data = load_iris()
X = data.data  # 特征矩阵
y = data.target  # 标签
target_names = data.target_names

2.1.1 数据规范化处理

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,stratify=y,random_state=0)

# 标准化
sc = StandardScaler()
X_train_std = sc.fit_transform(X_train)
X_test_std = sc.transform(X_test)

2.1.2 计算相关矩阵

主成分分析从协方差出发和从相关矩阵出发的区别
在这里插入图片描述
在这里插入图片描述

由于这里已经把数据做了标准化,所以下面计算一下相关矩阵,

cov_mat = np.corrcoef(X_train_std.T)   # 计算相关矩阵
# cov_mat = np.cov(X_train_std.T)   # 计算协方差矩阵
cov_mat

在这里插入图片描述

2.1.3 求相关矩阵的特征值及其对应的单位特征向量

#计算相关矩阵的特征值和特征向量
eigen_vals,eigen_vecs = np.linalg.eig(cov_mat)
eigen_vals_sorted =eigen_vals [np.argsort(-eigen_vals)]  # 把特征值从大到小排序
print('特征值从大到小排序',eigen_vals_sorted,'\n')

eigen_pairs = [(np.abs(eigen_vals[i]), eigen_vecs[:, i]) for i in range(len</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值