数据挖掘小白系列!数据预处理及特征工程(下)-降维算法!

17 篇文章 0 订阅
13 篇文章 2 订阅

本文章只用于学习交流不用于任何商业行为,所有知识点资料来源于网络,如有任何不当之处请私信联系,作者会及时改正

本文中总结自文档所有标注的页码都是附件参考文档中的页码

由于markdown不支持附件下载,附件链接如下

http://note.youdao.com/noteshare?id=05a144c93bd1f66d0a25881a5fe5ce65
数据挖掘小白系列!数据预处理及特征工程(上)!

1概述

=============================

维度的概念

不同的对象的维度概念不同:
对于数组和Series来说,维度就是功能shape返回的结果,shape中返回了几个数字,就是几维
在这里插入图片描述
对于特征矩阵或一个DataFrame,这些结构永远只有一张表,维度指的是样本的数量或特征的数量,一般无特别说明,指的都是特征的数量。除了索引之外,一个特征是一维,两个特征是二维,n个特征是n维。
在这里插入图片描述

降维算法中的”降维“

降维两种需求:
       1减少特征的数量又保留大部分有效信息特征的新特征矩阵,让算法运算更快更好
       2数据可视化,对高维数据有更好的理解

手段
利用让数据能够被压缩到少数特征上并且总信息量不损失太多,PCA使用的信息量衡量指标,就是样本方差,又称可解释性方差,方差越大,特征所带的信息量越多。

降维过程中,有几个重要的步骤:

在这里插入图片描述

PCA与SVD差异

都遵从上面的过程来实现降维,但矩阵分解的方法不同,信息量的衡量指标不同

PCA使用方差作为信息量的衡量指标,并且特征值分解来找出空间V,将特征矩阵X分解为三个矩阵,其中对角矩阵对角线上的元素就是方差。降维完成之后,PCA找到的每个新特征向量就叫做“主成分”,

SVD使用奇异值作为信息量的衡量指标,使用奇异值分解来找出空间V,其中对角矩阵对角线上的元素是奇异值

降维与特征选则的差别

特征选择是从已存在的特征中选取携带信息最多的,选完之后的特征依然具有可解释性,我们依然知道这个特征在原数据的哪个位置,代表着原数据上的什么含义

降维是将已存在的特征进行压缩,降维完毕后的特征不是原本的特征矩阵中的任何一个特征,而是通过某些方式组合起来的新特征。通常来说,在新的特征矩阵生成之前,我们无法知晓降维都建立了怎样的新特征向量且生成之后也不具有可读性。以PCA为代表的降维算法因此是特征创造(feature creation)的一种。

sklearn中PCA的SVD

sklearn通过SVD和PCA的合作实现了一种计算更快更简单,但效果却很好的“合作降维“。把SVD当作PCA的一种求解方法即使用奇异值分解来减少计算量。奇异值分解追求的仅仅是V,只要有了V,就可以计算出降维后的特征矩阵。

sklearn中的降维算法

=============================

重要参数属性与总表

重要参数:n_components,svd_solver,random_state,
三个重要属性:components_, explained_variance_以及explained_variance_ratio_
重要接口:inverse_transform。
在这里插入图片描述

重要参数n_components

说明:
n_components是我们降维后需要的维度,即降维后需要保留的特征数量,降维流程中第二步里需要确认的k值

作用:

将数据集降到K维度

参数推荐:
见’n_components的选择方法’

#调用PCA
pca = PCA(n_components=2) #实例化
pca = pca.fit(X) #拟合模型
X_dr = pca.transform(X) #获取新矩阵
#简化写法
X_dr = PCA(2).fit_transform(X)

重要属性explained_variance_,explained_variance_ratio

#属性explained_variance_,查看降维后每个新特征向量上所带的信息量大小(可解释性方差的大小)
pca.explained_variance_
#属性explained_variance_ratio,查看降维后每个新特征向量所占的信息量占原始数据总信息量的百分比
#又叫做可解释方差贡献率
pca.explained_variance_ratio_
#大部分信息都被有效地集中在了第一个特征上
pca.explained_variance_ratio_.sum()

n_components的选择方法

1累积可解释方差贡献率曲线

累积可解释方差贡献率曲线是一条以降维后保留的特征个数为横坐标,降维后新特征矩阵捕捉到的可解释方差贡献率为纵坐标的曲线.就是填1能报留多少信息,填2能保留多少特征

import numpy as np
pca_line = PCA().fit(X)
plt.plot([1,2,3,4],np.cumsum(pca_line.explained_variance_ratio_))
plt.xticks([1,2,3,4]) #这是为了限制坐标轴显示为整数
plt.xlabel("number of components after dimension reduction")
plt.ylabel("cumulative explained variance ratio")
plt.show()

2最大似然估计自选超参数

输入“mle”作为n_components的参数输入,就可以调用这种方法.效果很好,但是高维时候机器可能会崩溃

pca_mle = PCA(n_components="mle")

3按信息量占比选超参数

输入[0,1]之间的浮点数,并且让参数svd_solver ==‘full’,表示希望保留百分之多少的信息量。
比如说,如果我们希望保留97%的信息量,就可以输入n_components = 0.97

pca_f = PCA(n_components=0.97,svd_solver="full")

重要参数svd_solver 与 random_state

参数svd_solver是在降维过程中,用来控制矩阵分解的一些细节的参数。
有四种模式可选:“auto”, “full”, “arpack”,“randomized”,默认”auto"。

"auto":基于X.shape和n_components的默认策略来选择分解器

"full":适合数据量比较适中,计算时间充足的情况

"arpack":可以加快运算速度,适合特征矩阵很大的时候,但一般用于特征矩阵为稀疏矩阵的情况,

"randomized":适合特征矩阵巨大,计算量庞大的情况。

使用建议:一般auto就行,如果数据量大又是稀疏矩阵想要更优化可以用arpack

重要属性components_

如果原特征矩阵是图像,一般用到这个重要属性,详见文档2.3.3

重要接口inverse_transform

任何有inverse_transform这个接口的过程都是可逆的,但是在降维算法中由于降维过程中会丢弃信息,所以逆转回去的信息也不会和原信息一模一样,会存在一定的丢失.

可利用PCA进行降噪,因为有效的特征所带的信息远大于噪音应该不会在PCA过程中被大量抛弃。inverse_transform能够在不恢复原始数据的情况下,将降维后的数据返回到原本的高维空间

'''降维
pca = PCA(0.5).fit(noisy)
X_dr = pca.transform(noisy)
X_dr.shape
'''逆转降维结果,实现降噪'''
without_noise = pca.inverse_transform(X_dr)
plot_digits(without_noise)

附录

PCA参数列表

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值