简单易学的机器学习算法-SVD奇异值分解 一.SVD奇异值分解的定义     假设M是一个的矩阵,如果存在一个分解: 其中的酉矩阵,的半正定对角矩阵,的共轭转置矩阵,且为的酉矩阵.这样的分解称为M的奇异值分解,对角线上的元素称为奇异值,称为左奇异矩阵,称为右奇异矩阵. 二.SVD奇异值分解与特征值分解的关系 特征值分解与SVD奇异值分解的目的都是提取一个矩阵最重要的特征.然而,特征值分解只适用于方阵,而SVD奇异值分解适用于任意的矩阵,不一定是方阵. 这里,是方阵,为单位矩阵,的特征向量,的特征…
SVD一般应用场景--推荐系统,图像压缩. 1.直观感受. SVD其实就是将矩阵分界,直观感受如图.就是将A矩阵分界成U,S,V三个矩阵相乘.一般推荐系统中用的多.S是对角阵,里面的特征值是从大到小排列的. 2.前述知识. 一个矩阵乘以一个向量结果还是一个向量,并且等于原始向量的倍,相当于对原始向量进行一个某个方向上的拉伸. 3.矩阵压缩 图1 图2 对图1,图2来说,假设m表示是样本个数,n表示特征个数,则抽取S特征中比较重要的特征值,(因为特征值是从大到小排列的,所以假如抽取前几个特征值作为…
一.SVD奇异值分解的定义 假设是一个的矩阵,如果存在一个分解: 其中为的酉矩阵,为的半正定对角矩阵,为的共轭转置矩阵,且为的酉矩阵.这样的分解称为的奇异值分解,对角线上的元素称为奇异值,称为左奇异矩阵,称为右奇异矩阵. 二.SVD奇异值分解与特征值分解的关系 特征值分解与SVD奇异值分解的目的都是提取一个矩阵最重要的特征.然而,特征值分解只适用于方阵,而SVD奇异值分解适用于任意的矩阵,不一定是方阵. 这里,和是方阵,和为单位矩阵,为的特征向量,为的特征向量.和的特征值为的奇异值的平方. 三.…
Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码 本篇阅读的代码实现了二维数组的初始化功能,根据给定的宽高初始化二维数组. 本篇阅读的代码片段来自于30-seconds-of-python. initialize_2d_list def initialize_2d_list(w,h, val = None): return [[val for x in range(w)] for y in range(h)] # EXAMPLES initialize_2d_list…
一.前述 AdaBoost算法和GBDT(Gradient Boost Decision Tree,梯度提升决策树)算法是基于Boosting思想的机器学习算法.在Boosting思想中是通过对样本进行不同的赋值,对错误学习的样本的权重设置的较大,这样,在后续的学习中集中处理难学的样本,最终得到一系列的预测结果,每个预测结果有一个权重,较大的权重表示该预测效果较好. 二.具体原理 AdaBoost,是英文"Adaptive Boosting"(自适应増强)的缩写,由Yoav Freun…
一.前述 ANN人工神经网络有两个或两个以上隐藏层,称为DNN 只有一个隐藏层是多层感知机 没有隐藏层是感知机 二.反向传播应用举例 举例: 正向传播,反向传播是一次迭代, 正向传播:在开始的每一层上都有一个参数值w,初始的时候是随机的,前向带入的是每一个样本值. 反向传播:然后反过来求所有的梯度值.如果是BGD则再根据公式wt=wt-1-ag进行调整所有w值. 然后再正向传播,迭代,以此类推. softmax通常用于最后一层的激活函数 前面层用relu函数 三.激活函数之Relu 公式: 解释…
一.前述 SparkStreaming是流式处理框架,是Spark API的扩展,支持可扩展.高吞吐量.容错的实时数据流处理,实时数据的来源可以是:Kafka, Flume, Twitter, ZeroMQ或者TCP sockets,并且可以使用高级功能的复杂算子来处理流数据.例如:map,reduce,join,window .最终,处理后的数据可以存放在文件系统,数据库等,方便实时展现. 二.SparkStreaming与Storm的区别 1.Storm是纯实时的流式处理框架,SparkSt…
一.前述 Spark是基于内存的计算框架,性能要优于Mapreduce,可以实现hadoop生态圈中的多个组件,是一个非常优秀的大数据框架,是Apache的顶级项目.One stack  rule  them all  霸气. 但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法 二.具体细节 1.Spark与MapReduce的区别 都是分布式计算框架,Spark基于内存,…
奇异值分解(Singular Value Decompositon,SVD),可以实现用小得多的数据集来表示原始数据集. 优点:简化数据,取出噪声,提高算法的结果 缺点:数据的转换可能难以理解 适用数据类型:数值型数据 SVD最早的应用之一是信息检索,我们称利用SVD的方法为隐形语义索引(LSI)或者隐形语义分析(LSA). 在LSI中,一个矩阵是有文档和词语组成的.当我们在该矩阵上应用SVD的时候,就会构建出多个奇异值.这些奇异值代表了文档中的概念或者主题,这一特点可以用于更高效的文档检索.…
test14.py #-*- coding:utf-8 import sys sys.path.append("svdRec.py") import svdRec from numpy import * from numpy import linalg as la # U, Sigma, VT = linalg.svd([[1, 1], [7, 7]]) # print(U) # print(Sigma) # print(VT) # Data = svdRec.loadExData()…