Hoeffding不等式的证明
Hoeffding不等式在机器学习的理论知识中非常重要,是证明VC-bound的基础,这篇文章给出其证明。
Hoeffding不等式首先给出Hoeffding不等式的结论
X_1,...,X_n是独立同分布的随机变量,X_i服从参数为p的伯努利分布,\\
即\mathbb P(X_i=1)=p,\mathbb P(X_i=0)=1-p,那么\\
\mathbb P(\Big|\overline X -\mathbb E[\overline X]\Big|\ge t )\le2e^{-2nt^2}\\
其中\overline X=\frac 1 n\sum_{i=1}^n X_i,\mathbb E[\overline X]=\frac1n\mathbb E[\sum_{i=1}^n X_i]=p,t>0\\下面就来证明这个结论,证明方法主要受到MIT概率课程的启发。
首先给出一个引理
引理1 (马尔可夫不等式)
Z为非负随机变量,那么\mathbb P(Z\ge c)\le \frac{\mathbb E[Z]}{c}这个引理是马尔可夫不等式,后面证明中会用到,这个不等式的证明比较 ...
Neural Networks for Machine Learning Lecture 6
课程地址:https://www.coursera.org/learn/neural-networks
老师主页:http://www.cs.toronto.edu/~hinton
备注:笔记内容和图片均参考老师课件。
这节课主要介绍了几种优化的方法,这里回顾下。
神经网络中更新权重的方法为梯度下降,简单来说,梯度下降可以分为以下两种
Full-batch gradient descent这种梯度下降算法就是每次计算全量的梯度然后进行更新,这样有两个问题,一是数据量太大的时候计算太慢,二是如果数据重复很多,那么就会带来不必要的计算,于是这样就有了Stochastic gradient descent
Stochastic gradient descent和Full-batch gradient descent相对,Stochastic gradient descent每次只取一部分数据,然后计算其梯度,于是这样又会产生一种极端情况——每次只取一个数据,这种叫做“online”,老师说由于计算能力的问题,这种算法效果不如mini-batch(每次取少量数据)效果好,所以一般情况下都使用 ...
Neural Networks for Machine Learning Lecture 5
课程地址:https://www.coursera.org/learn/neural-networks
老师主页:http://www.cs.toronto.edu/~hinton
备注:笔记内容和图片均参考老师课件。
这一讲主要讲了图像识别以及卷积神经网络,感觉有点蜻蜓点水,这里主要回顾下重点。
卷积神经网络与池化在图像识别时,由于一个物体可能会旋转,以及出现在不同的位置,所以用多种方式表示同一个像素,具体做法如下:
这里的意思是对同一张图像只提取一部分特征,但是可以重复提取多次,但是注意对应的权重是同一个,具体如下:
$h_1,h_2$对应的权重都是上图。这样做确实可以增加许多信息,但是特征有点重复,处理这个问题的办法是池化,做法是将输出值取平均,具体如下:
这样做的好处是可以处理更大的数据,坏处是无法确定特征的位置。
Neural Networks for Machine Learning Lecture 4
课程地址:https://www.coursera.org/learn/neural-networks
老师主页:http://www.cs.toronto.edu/~hinton
备注:笔记内容和图片均参考老师课件。
这一章的内容其实没怎么看懂,这里就把课件中没证明的公式简单证明一下。
首先是Softmax的公式
y_i = \frac{e^{z_i}}{∑_{j∈group }e^{z_j}}\\
\frac{∂y_i}{∂z_i}= \frac{e^{z_i}∑_{j∈group }e^{z_j}-e^{z_i}e^{z_i}}{(∑_{j∈group }e^{z_j})^2}
=\frac{e^{z_i}}{∑_{j∈group }e^{z_j}}\frac{∑_{j∈group }e^{z_j} -e^{z_i}}{∑_{j∈group }e^{z_j}}=y_i(1-y_i)\\
\frac{∂y_i}{∂z_j}=\frac{e^{z_i}}{(∑_{j∈group }e^{z_j})^2}(-e^{z_j})=-\frac{e^{z_i}e^{z_j}}{(∑_{j ...
利用sklearn计算SVM的一些参数
之前在做learning from data支持向量机一章习题的时候,需要计算SVM的一些参数,例如超平面的方程,截距等等,这里简单总结一下。
我们知道,SVM算法最后是求解如下二次规划问题
\min_{w,b,\xi}\quad \frac 1 2 w^Tw+C\sum_{n=1}^{N}\xi_n \\
\text{subject to} \quad y_n (w^Tz_n+b) \ge1-\xi_n \\
\xi_n\ge0其中$z_n=\phi(x_n)$
这里我把问题统一起来,如果是Hard Margin,那么取$\xi_n=0$即可,如果没有没有特征转换,那么$z_n=x_n$。现在的问题是通过sklearn求解$w,b$,下面分别介绍原始数据以及进行特征转换的情形下如何求解这两个参数。
原始数据import numpy as np
import matplotlib.pyplot as plt
N = 20
x1 = np.random.uniform(0, 1, N)
x2 = np.random.uniform(-1, 1, N)
x = []
for i in ...
奇异值分解(1)——奇异值分解的证明
在学习机器学习的过程中经常碰到奇异值分解,之前对这个知识点不太熟悉,花了一点时间去学习了相关知识,准备写三篇博客,分别为奇异值分解的证明,奇异值分解的性质,奇异值分解的应用,这一篇是有关奇异值分解的证明,话不多说,进入正题。
首先来看定义
奇异值分解(Singular Value Decomposition)设$A$是一个$m\times n$矩阵, 则存在$m$阶正交矩阵$U$和$n$阶正交矩阵$V$, 满足
A=U \left[
\begin{matrix}
\sigma_1 && & \\
& \ddots && \\
&&\sigma_r& \\
&&&0
\end{matrix}
\right] V^T=U\sum V^T 其中$\text{r = rank A},\sum\in R^{m\times n}$. 习惯上,设 $\sigma_1\ge\sigma_2\ge…\ge\sigma_r>0$,称$\sigma_1,…,\sigma_r$为奇异值(singular value). 称$U$和$V$的前$r$ ...
利用matplotlib库中pcolormesh作彩图
在做Learning from data课本习题4.4的时候,需要作彩图,对matplotlib中pcolormesh专门研究了下,这里详细记录一波,其实这部分作图和之前隐函数作图的流程非常相似,可以从后面看到。
首先看个最简单的图。
import matplotlib.pyplot as plt
import numpy as np
#定义点的数量
n=500
#作点
x=np.linspace(-10,10,500)
y=np.linspace(-10,10,500)
#构造点
X,Y=np.meshgrid(x,y)
Z=np.sin(X+Y)
#作图
plt.pcolormesh(X,Y,Z)
plt.show()
整个流程和隐函数是基本一致的,接下来看一些参数,参数还是非常多的,这里主要介绍cmap,vmin,vmax,除此之外,还会介绍colorbar方法,下面分别看下。
cmap参数cmap参数是设置颜色,设置方法是首先利用plt.cm.get_cmap设置样式,然后将这个样式传递给pcolormesh,具体的颜色类型可以参考官网
https://matplot ...
Python隐函数作图
在使用Python作图的过程中,碰到了几次需要隐函数作图的问题,目前我暂时只知道两种方法,一种是使用sympy库,另一种是使用matplotlib中等高线的方法,这里分别总结下。
Sympy库隐函数作图Sympy库隐函数作图主要使用了plot_implicit函数以及parse_expr函数,首先来简单看下该plot_implicit函数的参数说明。def plot_implicit(expr, x_var=None, y_var=None, **kwargs):
"""A plot function to plot implicit equations / inequalities.
Arguments
=========
- ``expr`` : The equation / inequality that is to be plotted.
- ``x_var`` (optional) : symbol to plot on x-axis or tuple giving symbol
and range as ``(sym ...
机器学习中的数学知识总结
这篇应该算个flag以及目录帖,两周前就打算开始写这个方面,但是总是一拖再拖,所以干脆先把flag立了,也算给自己一个动力吧。
之所以要总结机器学习中的数学知识,是因为发现学习的过程中有些部分不太扎实,有的知识点也是完全不了解,所以想干脆记录下学习的过程中遇到的难点重点。简单来说,机器学习中数学的知识点也就三个方面,分别是高等数学,线性代数以及概率论,目前我高等数学还没碰到比较大的问题,所以这部分可能暂时没有。现在打算整理的线代知识有奇异值分解(SVD),矩阵的微分性质,概率论的问题有hoeffding不等式以及VC bound。这篇文章应该会给出总结的知识的目录,方便查阅。
Neural Networks for Machine Learning Lecture 3
课程地址:https://www.coursera.org/learn/neural-networks
老师主页:http://www.cs.toronto.edu/~hinton
备注:笔记内容和图片均参考老师课件。
Lecture3主要介绍了反向传播算法,这里简单回顾下。
先回顾下公式,首先是linear neuron
z=b+\sum_{i}x_iw_i但是线性神经元还是很弱的,所以老师这里引入了logistic neuron
y=\frac {1}{1+e^{-z}},\frac {dy}{dz}=y(1-y)我们现在有损失函数$E=\frac {1}{2}(t-y)^2$,关于$w_i$求偏导可得
\frac {\partial y}{\partial w_i}=\frac {\partial z}{\partial w_i}\frac {\partial y}{\partial z}=x_iy(1-y)\\
\frac {\partial E}{\partial w_i}=\sum_{n}\frac {\partial y^n}{\partial w_i}\frac ...
北理Python爬虫课程总结
总算断断续续把北理这门爬虫课程学完了,也做了一些笔记,强烈推荐这门课,非常适合新手入门,个人后续打算找一本爬虫的书看一下,学习一些进阶知识,也会多实践下。
斯坦福CS106A作业6
这次的作业是做一个姓名使用趋势的展示作业,综合了很多知识,收获很大。
NameSurfer
/*
* File: NameSurfer.java
* ---------------------
* When it is finished, this program will implements the viewer for
* the baby-name database described in the assignment handout.
*/
import acm.program.*;
import java.awt.event.*;
import javax.swing.*;
public class NameSurfer extends Program implements NameSurferConstants {
/* Method: init() */
/**
* This method has the responsibility for reading in the data base
* and initializing the ...