机器学习——PCA 主成分分析(pca主成分分析原理)

liftword1周前 (05-02)技术文章3

PCA

Created: Apr 26, 2020 4:40 PM

PCA 简介

PCA是一种降维算法

属性:

  • - 在数据集中保留了最多的信息,同时将数据转换到较低维的子空间
  • - 主要的成分彼此正交(方差最大)
  • - 有损数据压缩,特征提取和数据可视化等应用程序。
  • - 是一种无监督的学习

为什么要降维?

  • - 数据可视化

数据可视化中很难看到高维数据,所以你可以通过降维到低维空间,更好的绘制图像。

  • - 数据压缩

删除多余和嘈杂的数据,减少内存和硬盘存储,减少输入,可以加快算法的学习速度。

PCA标准

  • 投影数据的方差最大化:选择一条线,使数据分布最均匀
  • 或最小化投影误差:线性投影应使平均投影成本最小化,平均投影成本定义为数据点与其投影之间的均方距离

最大化投影方差

在信号领域,我们认为信号具有较大的方差,噪声具有较小的方差,信号与噪声的比称为信噪比,信噪比越大意味着数据的质量越好,由此我们不难引出,PCA的目标即最大化投影方差,也就是让数据在主轴上的投影方差最大。

- 给定一个矩阵X,例如

选择k<m个正交基进行降维的同时又尽量保留原始信息,即X变换到这组基后,使得行向量间的协方差为0,而每个行向量的方差尽可能大。

- 协方差矩阵(对称半正定)为

其实是希望你找到一个垂直的新的坐标系, 然后投影过去, 这里有两个问题。 第一问题: 找这个坐标系的标准或者目标是什么? 第二个问题, 为什么要垂直的, 如果不是垂直的呢?

第一问题就是特征值和特征向量,就是投影后方差最大, 协方差最小。

第二个问题?PCA和ICA区别

于是我们发现,x 投影后的方差就是协方差矩阵的特征值。我们要找到最大方差也就是协方差矩阵最大的特征值,最佳投影方向就是最大特征值所对应的特征向量,次佳就是第二大特征值对应的特征向量,以此类推。

举例:

计算Cx特征值为: lamda1 = 2, lamda2 = 2/5,特征值特征向量为

可验证A = (U)TCxU

降维


最小化回归误差

最大投影方差求解的是一条直线使得样本点投影到该直线上的方差最大,我们就可以联想到线性回归,也是求解一条直线。





PCA算法

  • - 数据预处理,均值归一化

从每个数据维度中减去平均值。 这将产生一个平均值为零的数据集,减去均值将简化方程,从而简化方差和协方差的计算。 方差和协方差值不受平均值影响

  • - 计算协方差矩阵



  • - 计算特征向量和特征值



  • - 选择前K个主要成分

1、按特征值从高到低对特征向量进行排序

2、选择解释最多方差(例如方差的95%)的前k个特征向量



- 生成新的数据集

选择了要保留在数据中的主成分(特征向量)并形成基本向量,就可以将数据点投影到由前k个主成分定义的超平面(子空间)上。




sklearn PCA

使用PCA分析汽车数据

import pandas as pd

import numpy as np

from sklearn.decomposition import PCA

from sklearn.preprocessing import StandardScaler

from sklearn.ensemble import RandomForestClassifier

from sklearn.model_selection import train_test_split

from sklearn.metrics import confusion_matrix, accuracy_score

from helper_functions import do_pca, scree_plot, plot_components, pca_results

from IPython import display

import test_code2 as t

import matplotlib.pyplot as plt

import seaborn as sns

%matplotlib inline

df = pd.read_csv('./data/cars.csv')

df.head()
df.describe()


数据集中总共有387两,总共有18个特征。

将数据集缩小到3维

pca, X_pca = do_pca(3, df)

pca_results(df, pca)


第一个成分对与以下项目相关的项目具有积极的权重:是油耗gas mileage MPG

第一个成分所解释的可变性为:0.4352

第二部分的最大权重与什么有关:sports cars,

由前三个组成部分解释的总和”:0.7053

计算要保留多少分量才能解释原始数据中至少85%的特征

#Code to find number of components providing more than 

# 85% of variance explained

for comp in range(3, df.shape[1]):

    pca, X_pca = do_pca(comp, df)

    comp_check = pca_results(df, pca)

    if comp_check['Explained Variance'].sum() > 0.85:

        break

        

num_comps = comp_check.shape[0]

print("Using {} components, we can explain {}% of the variability in the original data.".format(comp_check.shape[0],comp_check['Explained Variance'].sum()))

Using 6 components, we can explain 0.8682000000000001% of the variability in the original data.


PCA用来干嘛?

  • - PCA用于微阵列数据。
  • - PCA用于异常检测。
  • - 时间序列数据的PCA。

参考:[
https://zhuanlan.zhihu.com/p/77151308](
https://zhuanlan.zhihu.com/p/77151308)

[https://www.zhihu.com/question/30094611/answer/275172932](https://www.zhihu.com/question/30094611/answer/275172932)

相关文章

用Python进行机器学习(11)-主成分分析PCA

我们在机器学习中有时候需要处理很多个参数,但是这些参数有时候彼此之间是有着各种关系的,这个时候我们就会想:是否可以找到一种方式来降低参数的个数呢?这就是今天我们要介绍的主成分分析,英文是Princip...

主成分分析PCA可视化(简要说明主成分分析pca的基本原理)

前面已经介绍了主成分分析的内容,并使用Python和R语言进行了演示。主成分分析里面很重要的一个作用,高维数据降维后的可视化,之前只是简单的讲了一下,这一篇就专门针对主成分分析的可视化来进行详细的介绍...

从实践的角度理解主成分分析(从实践的角度看)

主成分分析是提高机器学习算法处理大量数据和特征的性能的最常用方法之一。然而,有时PCA可能太复杂,太技术化,甚至太乏味,无法正确理解基本原理,因此,我决定写这篇文章,以实际的方式阐明每一步,并易于初学...

K-mean聚类(k-mean聚类 腰围和血压血糖)

首先再补充一下昨天的主成分分析,给大家补充的是通过sklenrn库如何使用主成分分析的。python自带的机器学习包里面包含了很多种常见的算法,给那些不是学习计算机的同学也能够方便的使用算法进行分析。...

爆肝整理! Python 网络爬虫 + 数据分析 + 机器学习教程来了

前段时间,有小伙伴多次在后台留言询问 Python 爬虫教程的问题。经过这两个多月以来的收集与整理,汇集了多个高校以及公开课视频教程,包括 python 爬虫的入门、进阶与实践,共 9G 左右。爬虫作...