zoukankan      html  css  js  c++  java
  • 《Machine Learning for OpenCV》学习笔记:降维

    一 . 降维

    1. 为什么要降维

    一个分类器,没有以分布在整个特征空间中的数据点进行训练,那么这个分类器在面对一个离前面遇到过的数据点位置很远的数据点时,将不知道如何去分类。但是,随着空间维度数的增加,需要填充空间的数据点会呈现指数级增长。当数据点增长超过一个最大值时,分类器的性能就会下降("性能"只是一个抽象描述,可具体化为很多方面)。所以需要寻找一个最优的维度数(特征数量)。这就是所谓的降维。

    2. 实现降维的方法

    2.1 PCA(主成分分析法,Principal Component Analysis)

    2.2 ICA(独立成分分析法, Independent Component Analysis)

    2.3 NMF(非负矩阵分解法,Non-negative Matrix Factorization)

    二. PCA

    2.1 PCA原理

    PCA的原理是将N维特征映射到K维特征上(N>K)。这不是从N维特征中去除(N-K)维特征,而是在原来的N维特征中重新构造出来K维特征。

    2.2 PCA的OpenCV实现

    # -*- coding: utf-8 -*-
    import numpy as np
    import matplotlib.pyplot as plt
    from pylab import mpl
    import cv2
    
    
    # 设置中文字体
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    
    plt.style.use('ggplot')
    mean = [20, 20]  # 均值
    cov = [[5, 0], [25, 25]]    # 协方差矩阵
    x, y = np.random.multivariate_normal(mean, cov, 1000).T
    
    # 将特征向量组合成一个新的特征矩阵X
    X = np.vstack((x, y)).T
    
    # mu: 投影前减去的的平均值mean, eig: 协方差矩阵的特征向量
    mu, eig = cv2.PCACompute(X, np.array([]))
    
    # 使用cv2.PCAProject旋转数据
    X2 = cv2.PCAProject(X, mu, eig)

    三. ICA

    3.1 ICA原理

    ICA同PCA进行一样的数学操作,但它选择哪些分解后相互之间尽可能独立的成分。

    3.2 ICA的scikit-learn实现

    在scikit-learn中,ICA由decomposition.FastICA()函数实现。

    # -*- coding:utf-8 -*-
    import numpy as np
    from sklearn import decomposition
    
    mean = [20, 20]
    cov = [[5, 0], [25, 25]]
    x, y = np.random.multivariate_normal(mean, cov, 1000).T
    X = np.vstack((x, y)).T
    
    
    ica = decomposition.FastICA()

    X2 = ica.fit_transform(ica)

    四. NMF

    4.1 NMF原理

    和PCA与ICA进行同样的数学操作,只是多了一个限制条件——操作的数据是非负的。

    4.2 NMF的scikit-learn实现

    在scikit-learn中,NMF由decomposition.NMF()函数实现。

    # -*- codign:utf-8 -*-
    
    import numpy as np
    from sklearn import decomposition
    
    mean = [20, 20]
    cov = [[5, 0], [25, 25]]
    x, y = np.random.multivariate_normal(mean, cov, 1000).T
    X = np.vstack((x, y)).T
    
    
    ica = decomposition.NMF()
    X2 = ica.fit_transform(ica)

    五. 参考资料

    [1]Michael Beyeler《Machine Learning for OpenCV》,https://github.com/mbeyeler/opencv-machine-learning

    六. 其它

  • 相关阅读:
    《代码大全2》读书笔记 Week3
    华莱士 勇敢的心 值得一看的电影
    验证sqlserver 不区分大小写
    sql 分割函数
    子报表设置数据源 指定子报表数据 可以预防报表显示错误的问题
    linq 实现 tsql里的 in 和not in的功能
    水晶报表参数构建和数据传入显示函数
    .net 发邮件带附件源码
    将C#的dll文件反编译成il文件工具
    sp_executesql介绍和使用
  • 原文地址:https://www.cnblogs.com/sweeneys/p/10681062.html
Copyright © 2011-2022 走看看