python sklearn 无监督学习之降维 算法与应用

PCA

  • PCA(Principal Component Analysis) 主成分分析, 用于高维数据集的探索与可视化,还可以用作数据压缩和预处理等。
  • PCA可把具有相关性的高维变量合成为线性无关的低维变量,成为主成分。主成分能够尽可能保留原始数据的信息。
  • Terms:
    • 方差,各个样本和样本均值的差的平方和的均值,用来度量一组数据的分散程度。$s^2 = \frac{\sum_{i=1}^n (x_i – x)^2}{n-1}$
    • 协方差,用于度量两个变量之间的线性相关性程度。$Cov(X,Y)=\frac{\sum_{i=1}^n (X_i-\overline{X})(Y_i – \overline{Y})}{n-1}$
    • 协方差矩阵,变量的协方差值构成的矩阵。
    • 特征向量,描述数据集结构的非零向量 $A\overrightarrow{v}=\lambda \overrightarrow{v}$

  • 原理:矩阵的主成分为协方差矩阵对应的特征向量,按照对应的特征值的大小进行排序,最大的特征值就是第一主成分,其次是第二主成分,以此类推。

http://i4.fuimg.com/610050/eaa6a75885db8493.png

http://i4.fuimg.com/610050/eaa6a75885db8493.png

  • sklearn.decomposition.PCA主要参数:
    • n_components 主成分个数,即降维后的数据维度
    • svd_solver 设置特征值分解的方法,默认为auto,其他可选有full, arpack, randomized

鸢尾花数据降维即可视化

  • 建立工程,导入相关工具包

  • 加载数据并降维

  • 按类别对降维后数据进行保存

  • 降维后数据点的可视化

http://i4.fuimg.com/610050/751c5e3f5f33b441.png

http://i4.fuimg.com/610050/751c5e3f5f33b441.png

Full Code

NMF

  • NMP(Non-negative Matrix Factorization) 非负矩阵分解,为在矩阵所有元素均为非负数的约束条件之下的矩阵分解方法。
  • 给定非负矩阵V,NMF能找到一个非负矩阵W和一个非负矩阵H,使得矩阵W和H的乘积近似等于矩阵V中的值
    • Vn * m = Wn * k * Hk * m
    • W矩阵:基础图像矩阵,相当于原矩阵V中抽取处理的特征
    • H矩阵:系数矩阵
    • NMF广泛应用于图像分析、文本挖掘和语音处理
  • 矩阵分解优化目标:最小化W和H乘积与原始矩阵之间的差别
    • $argmin \frac{1}{2} \|X-WH\|^2 = \frac{1}{2} \sum_{ij}(X_{ij}-WH_{ij})^2$
    • 基于KL散度的优化目标,损失函数为 $argmin\,J(W,H)=\sum_{X_{ij}ln\frac{X_{ij}}{WH_{ij}}-X_{ij} + WH_{ij}}$
  • sklearn.decomposition.NMF 主要参数:
    • n_components 用于指定分解后矩阵的单个维度k
    • init W矩阵和H矩阵的初始化方式,默认为nndsvdar

NMF人脸数据特征提取

  • 通过设置k的大小,设置提取的特征数目,以图像形式展示特征
  • 1.建立工程,导入相关工具包

  • 2.设置基本参数并加载数据

  • 3.设置图像的展示方式

  • 4.创建特征提取的对象NMF,使用PCA作为对比

  • 5.降维后数据点的可视化

Full Code

K-Means 图像分割

  • 常用方法
    • 阈值分割:对灰度值进行度量,设置不同类别的阈值,达到分割目的
    • 边缘分割:对图像边缘进行检测,即检测图像中灰度值发生跳变的地方,则为一片边缘的区域
    • 直方图法:对图像的颜色建立直方图,而直方图的波峰波谷能够表示一块区域的颜色值的范围,来达到分割的目的
    • 特定理论:基于聚类分析、小波变换等理论完成图像分割
  • 目标:利用K-means聚类算法对图像像素点颜色进行聚类实现简单的图像分割
  • 输出:同一聚类的点使用相同颜色标记,不同聚类颜色不同。
  • 技术路线:sklearn.cluster.KMeans
  • 1.建立工程并导入相关包

  • 2.加载图片并进行预处理
    • PIL包,用于图像的加载和创建 pip install Pillow

  • 3.加载Kmeans聚类方法
    • km = KMeans(n_clusters=3)
  • 4.对像素点进行聚类并输出

  • Result: 尝试多个k值以获得较好结果。

http://i4.fuimg.com/610050/7511a9be4caecc93.jpg

http://i4.fuimg.com/610050/11996e7f920097f8.jpg

Full Code

Leave a Reply

Your email address will not be published.