IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> sklearn入门——降维算法 -> 正文阅读

[人工智能]sklearn入门——降维算法

概述

  • 什么是维度
    对于数组和Series来说,维度就是shape返回的结果,返回几个数字就是几维。不分行和列的是一维,有行和列之分的是二维,也称为表,一张表最多有二维。有多张表时就是多维的数据。
    每张表都可以是一个特征矩阵或者是DataFrame,这些结构永远只有一张表,它们的维度指的是样本数量或特征数量,一般是指特征的数量。几个特征就是几维。
    对于图像来说,维度是图像中特征向量的数量。
    降维算法中的降维指的是降低特征向量中特征的数量。
  • sklearn中的降维算法
    图片来自B站课程

主成分分析PCA

算法原理

PCA的主要思想是将n维2数据特征映射到k维上,这k维是全新的正交特征,也被称为主成分,是在原有n维特征的基础上重新构造出来的,与数据筛选不同,构造出来的k维特征是不可解释的,很难明确具体的意义。

以二维数据映射到一维为例:我们希望找到一个映射的轴使方差 V a r ( x ) = 1 n ? 1 ∑ i = 1 n ( x i ? x ? ) 2 Var(x)=\frac{1}{n-1}\sum_{i=1}^{n}(x_i-x^{-})^2 Var(x)=n?11?i=1n?(xi??x?)2最大,就是保证数据拥有更高的可区分度,同时还保留着部分映射之间的空间信息。
步骤:
1.样本归0。就是让所有样本减去样本均值,样本的分布没有改变,只是坐标轴进行了移动。这样对于方差公式就变成了 V a r ( x ) = 1 n ? 1 ∑ i = 1 n ( x i ) 2 Var(x)=\frac{1}{n-1}\sum_{i=1}^{n}(x_i)^2 Var(x)=n?11?i=1n?(xi?)2,计算更加方便。
2.找到样本映射后方差最大的单位向量w。定义轴的方向为w=(w1,w2),使得样本映射到w后,方差最大,即
V a r ( X p r o j e c t ) = 1 n ? 1 ∑ i = 1 n ( X p r o j e c t i ) 2 Var(X_{project})=\frac{1}{n-1}\sum_{i=1}^n(X^i_{project})^2 Var(Xproject?)=n?11?i=1n?(Xprojecti?)2
括号中是一个向量,可以用模代替:
V a r ( X p r o j e c t ) = 1 n ? 1 ∑ i = 1 n ∣ ∣ X p r o j e c t i ∣ ∣ 2 Var(X_{project})=\frac{1}{n-1}\sum_{i=1}^n||X^i_{project}||^2 Var(Xproject?)=n?11?i=1n?Xprojecti?2

映射时,就是从原点向轴做垂线,交点即是映射点
X i . w = ∣ ∣ X i ∣ ∣ ? ∣ ∣ w ∣ ∣ ? c o s θ X^i.w=||X^i||*||w||*cosθ Xi.w=Xi?w?cosθ
X i . w = ∣ ∣ X i ∣ ∣ c o s θ X^i.w=||X^i||cosθ Xi.w=Xicosθ
X i . w = ∣ ∣ X p r o j e c t i ∣ ∣ X^i.w=||X^i_{project}|| Xi.w=Xprojecti?
最终是求w使得 V a r ( X p r o j e c t ) = 1 n ? 1 ∑ ( X i . w ) 2 Var(X_{project})=\frac{1}{n-1}\sum(X^i.w)^2 Var(Xproject?)=n?11?(Xi.w)2最大。

sklearn中的PCA
  • 重要参数n_components
    n_components是降维后需要的维度,即降维后保留的特征数量。一般输入[0,min(X.shapw)]中的整数。
    PCA的操作也是实例化、fit、transform等。。。
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca = pca.fit(X)
X_dr = pca.transform(X)
# 可以通过切片操作获取某个特征对应的降维后的数据

# 降维后的数据信息
# 属性explained_variance_,查看降维后每个新特征向量上所带的信息量大小(可解释性方差的大小)
pca.explained_variance_

# 属性explained_variance_ratio,查看降维后新特征向量所占的信息量占原始数据总信息量的百分比
pca.explained_variance_ratio_

n_components的选择可以画出累计可解释方差贡献率曲线,来选择最好的n_components的整数取值。

  • 极大似然估计自选超参数
    除了输入整数,n_components可以用极大似然估计mle来自选超参数,操作如下:
pca_mle = PCA(n_components='mle')
pca_mle = pca_mle.fit(X)
# 只是改变了一个参数,其他操作和属性都一样
  • 按信息量占比选择超参数
    输入[0,1]之间的浮点数,并且让参数svd_solver=‘full’,来表示希望降维后的总解释方差占比大于n_components指定得百分比,这里的百分比是降维后特征信息量百分比的累计。
pca_f = PCA(n_components=0.97,svd_solver='full')
# 然后就是fit、transform、vatiance等等
PCA中的SVD应用

在PCA计算过程中需要计算协方差矩阵,计算量较大,而SVD的运用可以不计算协方差矩阵直接求出新特征空间和降维后的特征矩阵。
在这里插入图片描述
(图片来自菜菜的sklearn教程,仅为学习记录)
fit的奇异值分解的结果V(k,n)保存在属性components_中,可以调用查看。

  • componsents_中保存的V(k,n)的作用
    通常,V(k,n)中的数据很难解释具体的意义,但对于图像而言,生成的V(k,n)仍然是图像信息,且从V(k,n)中可以发现降维时选择的信息是什么。以人脸识别的数据集为例进行观察:
from sklearn.datasets import fetch_lfw_people
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import numpy as np

faces = fetch_lfw_people(min_faces_per_person=60)
faces.data.shape # (1348, 2914),表示有1348个样本,2914个图像特征

faces.images.shape
#(1348, 62, 47), 62*47是图像的特征矩阵

X = faces.data
# 画出未降维时的图像,如下边第一个图
fig, axes = plt.subplots(3,8,figsize=(8,4),subplot_kw={'xticks':[],'yticks':[]})
for i, ax in enumerate(axes.flat):# 是一个元组,有索引和对象
    ax.imshow(faces.images[i,:,:],cmap='gray')

# 降维
pca = PCA(150).fit(X)
V = pca.components_ #V(k,n)
# 画出中间v的信息,如下边第二个图
fig, axes = plt.subplots(3,8,figsize=(8,4),subplot_kw={'xticks':[],'yticks':[]})
for i, ex in enumerate(axes.flat):
    ex.imshow(V[i,:].reshape(62,47),cmap='gray')
    

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

  • inverse_transform(X_dr)返回原来的特征矩阵
    这个操作可以返回原来大小的特征矩阵,但并不是原来的特征矩阵。因为在降维时是选择最相关的特征进行降维,而把相关性不高的特征去除了,返回原来大小特征矩阵时也不可能包含那些被去除的信息。由这个特性,可以用来降噪。具体可以在PCA学习曲线中选择转折处的特征数来进行降维,然后再返回原来大小的特征矩阵,就可以实现数据的降噪。
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-13 12:01:20  更:2021-08-13 12:01:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 20:57:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码