机器学习之PCA

PCA

1.为什么要降维

在低维下数据更加容易处理,但是现实情况中数据却往往拥有很多特征,所以会导致很多问题:

  • 特征越多,更多参数需要调整,过拟合风险大
  • 维度出现虚高问题
  • 维度少,训练越快
  • 如果想要将数据可视化,必须将维度控制在2/3个维度

综上,所以我们需要降维。

降维方法

  • 特征抽取

    • 线性降维:PCA,FA,ICA,LDA
    • 流形学习:非线性降维
    • SVD
  • 特征筛选

    • 缺失值比率
    • 随机森林:返回特征值的重要性
    • 反向特征消除:把所有的特征放到一个模型,每次删除使模型改变最小的特征
2.PCA算法(基于特征值分解)
2.1预备知识
  • 方差越大,包含信息越多
2.2降维流程
  • 整体思路:通过坐标系的变换转换的新的坐标系中去
  • 以方差最大的方向为坐标轴
  • 步骤
    1. 第0轴:选择原始数据方差最大的方向
    2. 第1轴:与第0轴正交且方差次大的方向
    3. 重复该过程,重复次数=数据维数
    4. 通过这个过程返现,方差大的在前n个坐标轴,所以保留前n几个轴
2.3 流程图

在这里插入图片描述

2.4伪代码表示
#-*- coding=utf-8-*-
#@Time:2020/10/11 17:56
#@Author:张雅瑞
#@File:Demo02
#@Software:PyCharmhhj
import numpy as np
import pandas as pd
import matplotloib.pyplot as plt

def PCA(数据集)
#1.去除平均值
   meanvals=计算出的均值
   meanremoved=每列-对应列的均值
#2.计算协方:np.cav,np.mat
   covmat=计算出协方差矩阵
   evals,evecs=计算covmat的特征值特征向量#直接调用相关方法
#3.特征值从大到小排序
   eval_sort=特征值从大到小排序
   eval_topn=取前N个特征值#可通过切片实现
#4.保留最上面N个向量
   evecs_topn=取对应eval_topn的特征向量#通过对应索引寻找
#5.数据转换:取均值后的数据与筛选后的特征向量相乘
   新数据集=meanRemoved* evecs_topn#矩阵相乘,而非普通相乘
   降维数据集=新数据集*转置后的evecs_topn   +对应列的均值
#6.返回对应值
   return 新数据集,降维后的数据集

3.PCA算法(基于SVD分解)
  1. 样本量很大时往往采用SVD实现PCA算法,因为SVD方法可以不计算特征值

  2. 假设样本为m*n的矩阵,我们可以通过SVD计算XT*X最大的K个特征值组成的矩阵V

    X1=X*V>>>列数从n减到K实现降维

  3. 在sk—learn自带的算法中会同通过SVD分解实现降维,从而大大提高运算速度

3.1实例讲解

假设现在有一个矩阵,每一行代表一个用户,每列代表一个物品

在这里插入图片描述

其中的数字是评价等级1~5 , 0代表没有评价

我们将该矩阵分解:

这里假设我们取2个奇异值,那么便可以近似分解

4.sk—learn中PCA源码解析
4.1参数
  • n_components:PCA算法中保留的主成分个数,即保留特征个数
    • 可选值
    • int:如果n_components=1——将数据降到以为
    • string:自动选取特征个数,使得满足所要求的方差百分比
    • 未赋值:默认None,特征个数不变,特征数据本身改变
  • copy:是否将原始训练数据复制
    • true:默认值,复制
    • False:不复制
  • whiten:是否进行白化,使得每个特征具有相同方差
    • True:进行白化
    • False:默认值,不进行白化
4.2PCA对象属性
  • explained_variance_ratio_:返回所保留各个特征的方差百分比,如果n_components没有赋值,则所有特征都会返回一个数值且解释方差之和等于1。
  • n_components_:返回保留的特征的个数
4.3PCA常用方法
  • fit(x):用数据x训练PCA模型
  • fit_transform(X):用PCA训练PCA模型,同时返回降维后的数据
  • inverse_transform(newData):将降维后的数据转换为原始数据,但可能不会完全一样,有些许差别
  • transform(X):将X转换为降维后的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值