机器学习(七) PCA与梯度上升法 (下)

五、高维数据映射为低维数据

换一个坐标轴。在新的坐标轴里面表示原来高维的数据。

低维 反向 映射为高维数据

PCA.py

import numpy as np

class PCA:

    def __init__(self, n_components):
        """初始化PCA"""
        assert n_components >= 1, "n_components must be valid"
        self.n_components = n_components
        self.components_ = None

    def fit(self, X, eta=0.01, n_iters=1e4):
        """获得数据集X的前n个主成分"""
        assert self.n_components <= X.shape[1],             "n_components must not be greater than the feature number of X"

        def demean(X):
            return X - np.mean(X, axis=0)

        def f(w, X):
            return np.sum((X.dot(w) ** 2)) / len(X)

        def df(w, X):
            return X.T.dot(X.dot(w)) * 2. / len(X)

        def direction(w):
            return w / np.linalg.norm(w)

        def first_component(X, initial_w, eta=0.01, n_iters=1e4, epsilon=1e-8):

            w = direction(initial_w)
            cur_iter = 0

            while cur_iter < n_iters:
                gradient = df(w, X)
                last_w = w
                w = w + eta * gradient
                w = direction(w)
                if (abs(f(w, X) - f(last_w, X)) < epsilon):
                    break

                cur_iter += 1

            return w

        X_pca = demean(X)
        self.components_ = np.empty(shape=(self.n_components, X.shape[1]))
        for i in range(self.n_components):
            initial_w = np.random.random(X_pca.shape[1])
            w = first_component(X_pca, initial_w, eta, n_iters)
            self.components_[i,:] = w

            X_pca = X_pca - X_pca.dot(w).reshape(-1, 1) * w

        return self

    def transform(self, X):
        """将给定的X,映射到各个主成分分量中"""
        assert X.shape[1] == self.components_.shape[1]

        return X.dot(self.components_.T)

    def inverse_transform(self, X):
        """将给定的X,反向映射回原来的特征空间"""
        assert X.shape[1] == self.components_.shape[0]

        return X.dot(self.components_)

    def __repr__(self):
        return "PCA(n_components=%d)" % self.n_components

六、scikit-learn 中的 PCA

七、试手MNIST数据集

通过单幅图像数据的高维化,将单幅图像转化为高维空间中的数据集合,对其进行非线性降维,寻求其高维数据流形本征结构的一维表示向量,将其作为图像数据的特征表达向量。从而将高维图像识别问题转化为特征表达向量的识别问题,大大降低了计算的复杂程度,减少了冗余信息所造成的识别误差,提高了识别的精度。通过指纹图像的实例说明,将非线性降维方法(如Laplacian Eigenmap方法)应用于图像数据识别问题,在实际中是可行的,在计算上是简单的,可大大改善常用方法(如K-近邻方法)的效能,获得更好的识别效果。此外,该方法对于图像数据是否配准是不敏感的,可对不同大小的图像进行识别,这大大简化了识别的过程

八、使用PCA对数据进行降噪

九、人脸识别与特征脸

原文地址:https://www.cnblogs.com/zhangtaotqy/p/9563049.html

时间: 2024-11-09 04:46:22

机器学习(七) PCA与梯度上升法 (下)的相关文章

机器学习(4)——PCA与梯度上升法

主成分分析(Principal Component Analysis) 一个非监督的机器学习算法 主要用于数据的降维 通过降维,可以发现更便于人类理解的特征 其他应用:可视化.去噪 通过映射,我们可以把数据从二维降到一维: 显然,右边的要好一点,因为间距大,更容易看出差距. 如何定义样本间距?使用方差,因为方差越小,数据月密集,方差越大,数据月分散. 另均值为0: 因为均值为0,w是单位向量,模为1,所以: 梯度上升法求解PCA问题 分析:X是mn的矩阵,m是样本数,n是特征数,X^(i)是第i

机器学习:PCA(使用梯度上升法求解PCA问题)

一.目标函数的梯度求解公式 PCA 降维的具体实现,转变为: 方案:梯度上升法优化效用函数,找到其最大值时对应的主成分 w : 效用函数中,向量 w 是变量: 在最终要求取降维后的数据集时,w 是参数: 1)推导梯度求解公式 变形一 变形二 变形三:向量化处理 最终的梯度求解公式:▽f = 2 / m * XT . (X . dot(w) ) 原文地址:https://www.cnblogs.com/volcao/p/9158892.html

机器学习算法的代码实现之第四章节:回归之梯度上升法

二种类别的点在平面上分布,我想找到一条直线,将平面划为两半边,每一边的点类别尽可能的统一,如何找到效果最佳的分界线,这就是最佳拟合问题,也叫作回归问题. 这次,代码很少.logRegres.py # coding:utf-8 from numpy import * #=============================================================================== # 数据集 #=============================

机器学习_logistic回归和梯度下降

原文:http://blog.csdn.net/dongtingzhizi/article/details/15962797  Logistic回归总结 PDF下载地址:http://download.csdn.net/detail/lewsn2008/6547463 1.引言 看了Stanford的Andrew Ng老师的机器学习公开课中关于Logistic Regression的讲解,然后又看了<机器学习实战>中的LogisticRegression部分,写下此篇学习笔记总结一下. 首先说

机器学习算法-PCA降维技术

机器学习算法-PCA降维 一.引言 在实际的数据分析问题中我们遇到的问题通常有较高维数的特征,在进行实际的数据分析的时候,我们并不会将所有的特征都用于算法的训练,而是挑选出我们认为可能对目标有影响的特征.比如在泰坦尼克号乘员生存预测的问题中我们会将姓名作为无用信息进行处理,这是我们可以从直观上比较好理解的.但是有些特征之间可能存在强相关关系,比如研究一个地区的发展状况,我们可能会选择该地区的GDP和人均消费水平这两个特征作为一个衡量指标.显然这两者之间是存在较强的相关关系,他们描述的都是该地区的

机器学习(一)梯度下降算法的实现及过程分析

机器学习(一)梯度下降算法 因为算法最好能应用到实际问题中才会让读者感到它的真实的用处,因此首先我来描述一个实际问题(梯度下降算法用以帮助解决该问题):给定一个指定的数据集,比如由若干某一地区的房屋面积和房屋价格这样的数据对(area, price)组成的集合(吴恩达老师的课程是启蒙课程所以举该例子),我的目标是通过一个学习算法得到一个预测房价和房屋面积之间的函数,然后给定一个新的房屋面积,用这个函数来预测房价.如下图所示: 我的解决思路大致如下: 1.我找了一个很小的数据集,有两个特征X1,X

梯度上升法求解Logistic回归

回顾上次内容:http://blog.csdn.net/acdreamers/article/details/27365941 经过上次对Logistic回归理论的学习,我们已经推导出取对数后的似然函数为 现在我们的目的是求一个向量,使得最大.其中 对这个似然函数求偏导后得到 根据梯度上升算法有 进一步得到 我们可以初始化向量为0,或者随机值,然后进行迭代达到指定的精度为止. 现在就来用C++一步一步实现Logistic回归,我们对文章末尾列出的数据进行训练. 首先,我们要对文本进行读取,在训练

Apache shiro集群实现 (七)分布式集群系统下---cache共享

Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro Authentication) Apache shiro集群实现 (四)shiro授权(Authentication)--访问控制 Apache shiro集群实现 (五)分布式集群系统下的高可用session解决方案 Apache shiro集群实现 (六)分布式集群系统下的高可用session

常见胸肌问题解答(七):胸部赘肉下坠

常见胸肌问题解答(七):胸部赘肉下坠 有不少人的胸肌上有不少赘肉,尤其不少人外缘和乳头以下的位置,全是脂肪,更严重的胸部下坠,对于男同胞来说,非常影响美观,显得不够MAN.尤其到了夏日,薄薄的一层T恤也遮不住胸部难看的轮廓,更别说只穿着泳裤去游泳了. 事实上这部分人大多有个共同的特点,那就是体重超标,全身都有脂肪,胸部脂肪比例也不低.其中也有人向俊宇反应在健身房无论如何锻炼胸大肌,感觉胸肌变厚也有胸沟了,但胸部下缘的的脂肪依然不为所动,该怎么办? 1.保持良好的生活习惯 有些胖子即使全身减肥都有