我是靠谱客的博主 独特悟空,最近开发中收集的这篇文章主要介绍Sklearn专题四 降维算法降维算法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

降维算法

维度概述

1、对数组和Series,shape中返回几个数字就是几维,几个方括号就是几维

2、特征矩阵,DataFrame,几个特征就是几维,对应图中几个坐标轴,降维降的是特征数量

降维算法decomposition.PCA:主成分分析

一、说明

1、PCA使用的信息量衡量指标为样本方差,越大,该特征带有信息量越多。

2、降维后找到的每个新特征向量叫“主成分”,新特征没有可读性,属于特征创造。线性回归不适合使用PCA。

二、重要参数

1、n_components:降维后要保留的特征数量,一般选 0-最小维度(特征数和标签数比较小的值) 范围内整数,默认为最小维度。如果需要可视化,取2或3.

2、如何选择n_components?

1)累积可解释方差贡献率曲线。横坐标:降维后保留的特征个数,纵坐标:累积可解释方差贡献率(选1个特征多少总信息,2个特征多少总信息…)

plt.plot([1,2,3,4],np.cumsum(pca_line.explained_variance_ratio_))

2)最大似然估计自选超参数。n_components=“mle”,计算量大

3)按信息量占比选择

n_components=[0,1]之间浮点数,且让参数scd_solver=‘full’(n_components=0.97,scd_solver='full’选出使保留信息量超过0.97的信息量的特征),比较快可以多用

三、重要属性

1、属性explained_variance:查看降维后每个新特征信息量大小
2、属性explained_variance_ratio:查看降维后每个新特征信息量占原始数据信息量百分比

PCA中的SVD

SVD比PCA快得多

一、2个重要参数

1、svd_solver
“auto”:数据量小选full,大则选randomized
“full”:生成完整的矩阵,数据量不大一般选用
“randomized”:适合特征矩阵巨大,计算量大。
“arpack”:适合特征矩阵大,一般用于特征矩阵为稀疏矩阵(每一列为0,1组成,大部分为0)
注:一般选"auto”, 算不出来找"randomized"

2、random_state:
svd_solver为"randomized"“arpack”生效
通常选"auto”

二、重要属性components_:提出的值是V(k,n),表示新特征空间,可视化可以看出提取了什么重要信息,n维压缩到k维

三、重要接口inverse_transform:将降维后的数据重新映射到原来的特征空间 ,降维不可逆转

案例

一、案例:高维数据可视化笔记

1、plt.legend () 用于给图像加图例。. 图例是集中于地图一角或一侧的地图上各种符号和颜色所代表内容与指标的说明,有助于更好的认识地图。

2、np.cumsum()返回给定轴上数据累加和,1,1+2,1+2+3…

3、图像是三维(图像数,特征行数,列数),像素总数=行*列

4、降维算法计算量较大

二、案例:人脸识别降维 笔记

1、plt.figure:给我一个画布,无法画多个图;plt.subplots:给我一个画布,其中有多个子图,第一个、第二个数字=需要几行几列图

2、imshow负责的就是将图片显示在窗口中,通过设备屏幕展现出来,只接受二维数组

3、如何画多张图?

fig,axes=plt.subplots(4,5,figsize=(8,4),subplot_kw={"xticks":[],"yticks":[]})
#figsize=(8,4),横纵比
#subplot_kw={"xticks":[],"yticks":[]不要显示坐标轴
#fig生成一张纸,axes代表子图对象

4、如何展示图片?

#建立画布
fig,axes=plt.subplots(4,5,figsize=(8,4),subplot_kw={"xticks":[],"yticks":[]})
#用图片填充axes对象,axes[0][0]是一个图片对象
#faces.images[0,:,:]:索引为0的图,取所有行所有列
axes[0][0].imshow(faces.images[0,:,:])

5、np中数据降维:
1)ravel():使多维数组转化为一维数组,只有在需要时才会产生副本(copy)
2)flatten():使多维数组转化为一维数组,返回源数据的副本
3).flat:返回数组的iterator,使其能够像一维数组一样遍历

6、如何循环导入图片?
1)一个一个循环

for i, ax in enumerate(axes.flatten()):
ax.imshow(faces.images[i,:,:],cmap="gray")

2)一次填两份数据(上下两行对比)

for i in range(10):
ax[0,i].imshow(faces.images[i,:,:],cmap='binary_r')
ax[1,i].imshow(x_inverse[i].reshape(62,47),cmap='binary_r')
#ax[0,i]第一行图,ax[1,i]第二行图

7、如何将新特征空间v可视化?

for i, ax in enumerate(axes.flatten()):
ax.imshow(v[i,:].reshape(62,47),cmap="gray")

二、案例:PCA实现784个特征的手写数字的降维 笔记

1、大范围尺寸画图一般选(20,5)

plt.figure(figsize=(20,5))

2、np.arange()类似range(),三个参数:start、end、步长,不包括end

3、如何画学习曲线?

score=[]
for i in range(10):
x_dr=PCA(21).fit_transform(x)
once=cross_val_score(KNN(i+1),x_dr,y,cv=5).mean()
score.append(once)
plt.figure(figsize=[20,5])
plt.plot(range(10),score)
plt.show()

4、%%timeit写在cell的开头:对这个cell的代码循环运算,看需要多少时间

最后

以上就是独特悟空为你收集整理的Sklearn专题四 降维算法降维算法的全部内容,希望文章能够帮你解决Sklearn专题四 降维算法降维算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部