Machine Learning Algorithms Study Notes(6)—遗忘的数学知识

机器学习中遗忘的数学知识 php

最大似然估计( Maximum likelihood ) html

最大似然估计,也称为最大概似估计,是一种统计方法,它用来求一个样本集的相关几率密度函数的参数。这个方法最先是遗传学家以及统计学家罗纳德·费雪爵士在1912年至1922年间开始使用的。web

最大似然估计的原 算法

给定一个几率分布,假定其几率密度函数(连续分布)或几率质量函数(离散分布)为,以及一个分布参数,咱们能够从这个分布中抽出一个具备个值的采样,经过利用,咱们就能计算出其几率 apache

可是,咱们可能不知道的值,尽管咱们知道这些采样数据来自于分布。那么咱们如何才能估计出呢?一个天然的想法是从这个分布中抽出一个具备个值的采样,而后用这些采样数据来估计.网络

一旦咱们得到,咱们就能从中找到一个关于的估计。最大似然估计会寻找关于的最可能的值(即,在全部可能的取值中,寻找一个值使这个采样的"可能性"最大化)。这种方法正好同一些其余的估计方法不一样,如非偏估计,非偏估计未必会输出一个最可能的值,而是会输出一个既不高估也不低估的app

要在数学上实现最大似然估计法,咱们首先要定义似然函数:机器学习

而且在的全部取值上,使这个函数最大化(一阶导数)。这个使可能性最大的值即被称为最大似然估计分布式

注意:ide

  • 这里的似然函数是指不变时,关于的一个函数
  • 最大似然估计函数不必定是唯一的,甚至不必定存在

 

离散分布,离散有限参数空间

考虑一个抛硬币的例子。假设这个硬币正面跟反面轻重不一样。咱们把这个硬币抛80次(即,咱们获取一个采样并把正面的次数记下来,正面记为H,反面记为T)。并把抛出一个正面的几率记为,抛出一个反面的几率记为(所以,这里的即至关于上边的)。假设咱们抛出了49个正面,31个反面,即49次H,31次T。假设这个硬币是咱们从一个装了三个硬币的盒子里头取出的。这三个硬币抛出正面的几率分别为, , .这些硬币没有标记,因此咱们没法知道哪一个是哪一个。使用最大似然估计,经过这些试验数据(即采样数据),咱们能够计算出哪一个硬币的可能性最大。这个似然函数取如下三个值中的一个

咱们能够看到当时,似然函数取得最大值。这就是的最大似然估计

1.3. 离散分布,连续参数空间

如今假设例子1中的盒子中有无数个硬币,对于中的任何一个, 都有一个抛出正面几率为的硬币对应,咱们来求其似然函数的最大值

其中. 咱们可使用微分法来求最值。方程两边同时对微分,并使其为零

其解为, ,以及.使可能性最大的解显然是(由于这两个解会使可能性为零)。所以咱们说最大似然估计值

这个结果很容易通常化。只须要用一个字母代替49用以表达伯努利试验中的被观察数据(即样本)的"成功"次数,用另外一个字母表明伯努利试验的次数便可。使用彻底一样的方法便可以获得最大似然估计值:

对于任何成功次数为,试验总数为的伯努利试验


连续分布,连续参数空间

最多见的连续几率分布正态分布,其几率密度函数以下

如今有个正态随机变量的采样点,要求的是一个这样的正态分布,这些采样点分布到这个正态分布可能性最大(也就是几率密度积最大,每一个点更靠近中心点),其个正态随机变量的采样的对应密度函数(假设其独立并服从同一分布)为

或:

,

这个分布有两个参数:.有人可能会担忧两个参数与上边的讨论的例子不一样,上边的例子都只是在一个参数上对可能性进行最大化。实际上,在两个参数上的求最大值的方法也差很少:只须要分别把可能性 在两个参数上最大化便可。固然这比一个参数麻烦一些,可是一点也不复杂。使用上边例子一样的符号,咱们有.

最大化一个似然函数同最大化它的天然对数是等价的。由于天然对数log是一个连续且在似然函数的值域严格递增的上凸函数。[注意:可能性函数(似然函数)的天然对数跟信息熵以及Fisher信息联系紧密。]求对数一般可以必定程度上简化运算,好比在这个例子中能够看到

这个方程的解是.这的确是这个函数的最大值,由于它是里头唯一的一阶导数等于零的点而且二阶导数严格小于零

同理,咱们对求导,并使其为零

这个方程的解是.

所以,其关于最大似然估计

 Jensen不等式

回顾优化理论中的一些概念。设f是定义域为实数的函数,若是对于全部的实数x,,那么f是凸函数。当x是向量时,若是其hessian矩阵H是半正定的(),那么f是凸函数。若是或者,那么称f是严格凸函数。

Jensen不等式表述以下:

若是f是凸函数,X是随机变量,那么

 

 

特别地,若是f是严格凸函数,那么当且仅当,也就是说X是常量。

这里咱们将简写为。

若是用图表示会很清晰:

图中,实线f是凸函数,X是随机变量,有0.5的几率是a,有0.5的几率是b。(就像掷硬币同样)。X的指望值就是a和b的中值了,图中能够看到成立。

当f是(严格)凹函数当且仅当-f是(严格)凸函数。

Jensen不等式应用于凹函数时,不等号方向反向,也就是。

 

 奇异值分解

 

奇异值分解,singular value decomposition(SVD)是线性代数中一种重要的矩阵分解

奇异值和特征值基础知识

特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。二者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是同样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧:

 

特征值

若是说一个向量v是方阵A的特征向量,将必定能够表示成下面的形式:

    这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式:

    其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每个对角线上的元素就是一个特征值。我这里引用了一些参考文献中的内容来讲明一下。首先要明确的是一个矩阵其实就是一个线性变换,由于一个矩阵乘以一个向量后获得的向量,其实就至关于将这个向量进行了线性变换。好比说下面的一个矩阵:

它其实对应的线性变换是下面的形式:

由于这个矩阵M乘以一个向量(x,y)的结果是:

上面的矩阵是对称的,因此这个变换是一个对xy轴的方向一个拉伸变换(每个对角线上的元素将会对一个维度进行拉伸变换,当值>1时,是拉长,当值<1时时缩短),当矩阵不是对称的时候,假如说矩阵是下面的样子:

它所描述的变换是下面的样子:

这实际上是在平面上对一个轴进行的拉伸变换(如蓝色的箭头所示),在图中,蓝色的箭头是一个最主要的变化方向(变化方向可能有不止一个),若是咱们想要描述好一个变换,那咱们就描述好这个变换主要的变化方向就行了。反过头来看看以前特征值分解的式子,分解获得的Σ矩阵是一个对角阵,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变化方向。

    当矩阵是高维的状况下,那么这个矩阵就是高维空间下的一个线性变换,这个线性变化可能无法经过图片来表示,可是能够想象,这个变换也一样有不少的变换方向,咱们经过特征值分解获得的前N个特征向量,那么就对应了这个矩阵最主要的N个变化方向。咱们利用这前N个变化方向,就能够近似这个矩阵(变换)。也就是以前说的:提取这个矩阵最重要的特征。总结一下,特征值分解能够获得特征值与特征向量,特征值表示的是这个特征到底有多重要,而特征向量表示这个特征是什么,能够将每个特征向量理解为一个线性的子空间,咱们能够利用这些线性的子空间干不少的事情。不过特征值分解也有不少的局限,好比说变换的矩阵必须是方阵。 \

   奇异值

    下面谈谈奇异值分解。特征值分解是一个提取矩阵特征很不错的方法,可是它只是对方阵而言的,在现实的世界中,咱们看到的大部分矩阵都不是方阵,好比说有N个学生,每一个学生有M科成绩,这样造成的一个N * M的矩阵就不多是方阵,咱们怎样才能描述这样普通的矩阵呢的重要特征呢?奇异值分解能够用来干这个事情,奇异值分解是一个能适用于任意的矩阵的一种分解的方法

假设A是一个N * M的矩阵,那么获得的U是一个N * N的方阵(里面的向量是正交的,U里面的向量称为左奇异向量),Σ是一个N * M的矩阵(除了对角线的元素都是0,对角线上的元素称为奇异值),V'(V的转置)是一个N * N的矩阵,里面的向量也是正交的,V里面的向量称为右奇异向量),从图片来反映几个相乘的矩阵的大小可得下面的图片

 

 

那么奇异值和特征值是怎么对应起来的呢?首先,咱们将一个矩阵A的转置 * A,将会获得一个方阵,咱们用这个方阵求特征值能够获得:   

这里获得的v,就是咱们上面的右奇异向量。此外咱们还能够获得:

这里的σ就是上面说的奇异值,u就是上面说的左奇异向量。奇异值σ跟特征值相似,在矩阵Σ中也是从大到小排列,并且σ的减小特别的快,在不少状况下,前10%甚至1%的奇异值的和就占了所有的奇异值之和的99%以上了。也就是说,咱们也能够用前r大的奇异值来近似描述矩阵,这里定义一下部分奇异值分解:

    r是一个远小于mn的数,这样矩阵的乘法看起来像是下面的样子:

   

右边的三个矩阵相乘的结果将会是一个接近于A的矩阵,在这儿,r越接近于n,则相乘的结果越接近于A。而这三个矩阵的面积之和(在存储观点来讲,矩阵面积越小,存储量就越小)要远远小于原始的矩阵A,咱们若是想要压缩空间来表示原矩阵A,咱们存下这里的三个矩阵:UΣV就行了。

 

Spark MLlib实现SVD计算

示例数据

1 0 0 0 2

0 0 3 0 0

0 0 0 0 0

0 4 0 0 0

 

示例代码

 

Java code

public static void main(String[] args) {

SparkConf conf = new SparkConf().setAppName("SVDTest").setMaster("local[2]");

 

JavaSparkContext sc = new JavaSparkContext(conf);

JavaRDD<String> data = sc.textFile("/home/yurnom/data/svd.txt");

JavaRDD<Vector> rows = data.map(s -> {

double[] values = Arrays.asList(SPACE.split(s))

.stream()

.mapToDouble(Double::parseDouble)

.toArray();

return Vectors.dense(values);

});

 

RowMatrix mat = new RowMatrix(rows.rdd());

//第一个参数3意味着取top 3个奇异值,第二个参数true意味着计算矩阵U,第三个参数意味小于1.0E-9d的奇异值将被抛弃

SingularValueDecomposition<RowMatrix, Matrix> svd = mat.computeSVD(3, true, 1.0E-9d);

RowMatrix U = svd.U(); //矩阵U

Vector s = svd.s(); //奇异值

Matrix V = svd.V(); //矩阵V

System.out.println(s);

System.out.println("-------------------");

System.out.println(V);

}

 

示例结果

[4.0,3.0,2.23606797749979]

-------------------

0.0 0.0 -0.44721359549995787

-1.0 0.0 0.0

0.0 1.0 0.0

0.0 0.0 0.0

0.0 0.0 -0.8944271909999159

 

 

参考文献

 

[1] Machine Learning Open Class by Andrew Ng in Stanford http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=MachineLearning

[2] Yu Zheng, Licia Capra, Ouri Wolfson, Hai Yang. Urban Computing: concepts, methodologies, and applications. ACM Transaction on Intelligent Systems and Technology. 5(3), 2014

[3] Jerry Lead http://www.cnblogs.com/jerrylead/

[3]《大数据-互联网大规模数据挖掘与分布式处理》 Anand Rajaraman,Jeffrey David Ullman著,王斌译

[4] UFLDL Tutorial http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial

[5] Spark MLlib之朴素贝叶斯分类算法 http://selfup.cn/683.html

[6] MLlib - Dimensionality Reduction http://spark.apache.org/docs/latest/mllib-dimensionality-reduction.html

[7] 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用 http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html

[8] 浅谈 mllib 中线性回归的算法实现 http://www.cnblogs.com/hseagle/p/3664933.html

[9] 最大似然估计 http://zh.wikipedia.org/zh-cn/%E6%9C%80%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1

[10] Deep Learning Tutorial http://deeplearning.net/tutorial/

 

 

 

 

 

 

附 录

 Andrew Ng 在斯坦福大学的CS229机器学习课程内容

Andrew Ng -- Stanford University CS 229 Machine Learning

This course provides a broad introduction to machine learning and statistical pattern recognition.

Topics include:

supervised learning (generative/discriminative learning, parametric/non-parametric learning, neural networks, support vector machines);

learning theory (bias/variance tradeoffs; VC theory; large margins);

unsupervised learning (clustering, dimensionality reduction, kernel methods);

reinforcement learning and adaptive control. The course will also discuss recent applications of machine learning, such as to robotic control, data mining, autonomous navigation, bioinformatics, speech recognition, and text and web data processing.

 

 中英文词语对照

neural networks 神经网络

activation function 激活函数

hyperbolic tangent 双曲正切函数

bias units 偏置项

activation 激活值

forward propagation 前向传播

feedforward neural network 前馈神经网络(参照Mitchell的《机器学习》的翻译)

 

Softmax回归 Softmax Regression

有监督学习 supervised learning

无监督学习 unsupervised learning

深度学习 deep learning

logistic回归 logistic regression

截距项 intercept term

二元分类 binary classification

类型标记 class labels

估值函数/估计值 hypothesis

代价函数 cost function

多元分类 multi-class classification

权重衰减 weight decay

 

深度网络 Deep Networks

深度神经网络 deep neural networks

非线性变换 non-linear transformation

激活函数 activation function

简洁地表达 represent compactly

"部分-总体"的分解 part-whole decompositions

目标的部件 parts of objects

高度非凸的优化问题 highly non-convex optimization problem

共轭梯度 conjugate gradient

梯度的弥散 diffusion of gradients

逐层贪婪训练方法 Greedy layer-wise training

自动编码器 autoencoder

微调 fine-tuned

自学习方法 self-taught learning