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

    六. 其它

  • 相关阅读:
    SSH_框架整合2—查询显示
    SSH_框架整合1
    eclipse中tomcat发布失败(Could not delete May be locked by another process)原因及解决办法
    错误:javax.servlet.jsp.PageContext can not be to a type
    链表【6】
    欢迎使用CSDN-markdown编辑器
    剑指offer系列62---两个链表的公共结点
    剑指offer系列61---数组中的逆序对
    Git常用命令大全
    vue脚手架搭建的具体步骤
  • 原文地址:https://www.cnblogs.com/sweeneys/p/10681062.html
Copyright © 2011-2022 走看看