老饼讲解机器学习

老饼讲解机器学习

目录

一. PCA主成分分析思想介绍

1.1 主成份分析思想

1.2 什么是主成份

二. PCA主成分分析的数学描述

2.1 主成份分析的数学表达

2.2 主成份系数矩阵A的约定

2.3 主成份分析需要输出什么

三. PCA的常用场景

3.1 PCA用于降维

3.2 PCA用于排名

3.3 PCA的实际使用

四. PCA总结与补充

4.1 主成份分析是什么

4.2 特别补充说明

五. 代码实现

5.1 调用sklearn包求解PCA

5.2 自写代码求解PCA


PCA主成份分析常用于降维,是一个基础、知名度极高和常用的方法

本文介绍PCA的原理和本质,并介绍相关使用场景的用法

一. PCA主成分分析思想介绍


  本节介绍PCA用于解决什么问题及PCA的思想,初步了解PCA是什么

1.1 主成份分析思想



1.2 什么是主成份



二. PCA主成分分析的数学描述


本节从数学角度进一步讲解主成份分析PCA是什么

2.1 主成份分析的数学表达



2.2 主成份系数矩阵A的约定



2.3 主成份分析需要输出什么



三. PCA的常用场景


本节讲解PCA实际应用中的使用场景和思路

3.1 PCA用于降维



3.2 PCA用于排名



3.3 PCA的实际使用



四. PCA总结与补充


简单总结和提炼PCA是什么,加固对PCA的特点的记忆

4.1 主成份分析是什么



4.2 特别补充说明



五. 代码实现


本节编写代码实现PCA的求解,

先调sklearn包求解,再自行写代码求解,并比较结果是否一致

5.1 调用sklearn包求解PCA


# -*- coding: utf-8 -*-
"""
主成份分析求解DEMO(调用sklearn)
本代码来自老饼讲解-机器学习:ml.bbbdata.com
"""
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
# 加载数据
iris   = load_iris()    
X      = iris.data       # 样本X
x_mean = X.mean(axis=0)  # 样本的中心 

# 用PCA对X进行主成份分析
clf = PCA()   # 初始化PCA对象
clf.fit(X)    # 对X进行主成份分析

# 打印结果
print('主成份系数矩阵A:\n A=',clf.components_)
print('主成份方差var:',clf.explained_variance_)
print('主成份贡献占比(方差占比)Pr:',clf.explained_variance_ratio_)

# 获取主成份数据
y = clf.transform(X)                # 通过调用transform方法获取主成份数据  
y2= (X-x_mean)@clf.components_.T    # 通过调用公式计算主成份数据 

运行结果如下

主成份系数矩阵A:
 A= [[ 0.36138659  0.65658877 -0.58202985 -0.31548719]
 [-0.08452251  0.73016143  0.59791083  0.3197231 ]
 [ 0.85667061 -0.17337266  0.07623608  0.47983899]
 [ 0.3582892  -0.07548102  0.54583143 -0.75365743]]
主成份方差var: [4.22824171 0.24267075 0.0782095  0.02383509]
主成份贡献占比(方差占比)Pr: [0.92461872 0.05306648 0.01710261 0.00521218]

5.2 自写代码求解PCA


import numpy as np
from sklearn.datasets import load_iris

# 加载数据
iris = load_iris()    
X    = iris.data
x_mean = X.mean(axis=0)  # 样本的中心 

# 通过SVD分解,得到A与XA每列的方差var
U,S,VT = np.linalg.svd((X-x_mean)/np.sqrt(X.shape[0]-1)) # 注意,numpy的SVD分解出的是US(VT)
A      = VT.T                                            # 主成份系数矩阵A
var    = S*S                                             # 方差                                    
pr     = var/var.sum()                                   # 方差占比

#打印结果
print('主成份系数矩阵A:\n A=',A)
print('主成份方差var:',var)
print('主成份贡献占比(方差占比)Pr:',pr)

# 获取主成份数据
y= (X-x_mean)@A                                          # 通过调用公式计算主成份数据  

运行结果如下

主成份系数矩阵A:
 A= [[ 0.36138659 -0.65658877  0.58202985  0.31548719]
 [-0.08452251 -0.73016143 -0.59791083 -0.3197231 ]
 [ 0.85667061  0.17337266 -0.07623608 -0.47983899]
 [ 0.3582892   0.07548102 -0.54583143  0.75365743]]
主成份方差var: [4.22824171 0.24267075 0.0782095  0.02383509]
主成份贡献占比(方差占比)Pr: [0.92461872 0.05306648 0.01710261 0.00521218]


相关文章

老饼讲解|【逻辑回归】逻辑回归损失函数交叉熵形式的理解

老饼讲解|【原理】CART决策树算法实现流程

老饼讲解|【原理】逻辑回归原理

12-11 13:36