Skip to content

Commit

Permalink
Add coursera nots
Browse files Browse the repository at this point in the history
  • Loading branch information
geekinglcq committed Apr 1, 2016
1 parent 560de13 commit 16ef509
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -210,3 +210,4 @@ FakesAssemblies/
GeneratedArtifacts/
_Pvt_Extensions/
ModelManifest.xml
*.zip
30 changes: 30 additions & 0 deletions Notes/Coursera Machine Learning Week10 大批数据.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#Coursera Machine Learning Week10 大批数据
----
[Coursera Machine Learning](https://www.coursera.org/learn/machine-learning/home/welcome) Lunar's note
Tags: MachineLearning Coursera
##大批量数据学习
###大训练集
在很多情况下,大数据量带来的好处显而易见,但是在某些情况下,更多的数据不仅没有好处,还会带来计算上的问题,所以在决定使用大批量数据前要注意斟酌。(可以利用[前面提到的学习曲线](https://www.zybuluo.com/lunar/note/301822)
###随机梯度下降 Stochastic Gradient Descent
相比于之前用的一般的批量梯度下降,随机梯度下降先将数据随机排序,然后对于每个数据单独去拟合,而不是像之前那样对所有数据一起拟合。单独拟合的话,不需要等到求完所有数据都计算一遍就能得出下降量。
随机梯度下降的迭代次数非常多,下降路线较为曲折,但是每次迭代的速度很快,收敛后会在最优区域徘徊。
批量梯度下降迭代次数较小,下降路线较直,但是每次迭代需要较多时间,最后收敛后就不会移动。

+ 小批梯度下降

|梯度下降方法|样本使用|
|----|----|
|批量梯度下降|每次迭代使用m个数据|
|随机梯度下降|每次迭代使用1个数据|
|小批梯度下降|每次迭代使用b个数据$b\in(1,m)$|

随机梯度下降判断收敛的方法:
对于每k次迭代(比如1000次),计算着k次迭代的平均代价函数,画出图像判断收敛。
###在线学习
在线学习的要旨在于,每次获取一个样本,使用它更新算法,然后丢弃那个样本。
适合于长期有较大数据流量的网站,因为总是有新的用户会提供样本,而且在线算法会反映出新的用户的特征。
根本区别在于不使用固定的数据集。
###映射约减 Map Reduce
将训练集分为几个子集,分给不同的计算机计算出各自的临时变量,然后将临时变量融合并进行迭代,


Binary file not shown.
88 changes: 88 additions & 0 deletions Notes/Coursera Machine Learning Week9 异常检测-推荐系统.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
#Coursera Machine Learning Week9 异常检测/推荐系统
----
[Coursera Machine Learning](https://www.coursera.org/learn/machine-learning/home/welcome) Lunar's note
Tags: MachineLearning Coursera

[TOC]

##异常检测 Anomaly detection
###高斯分布 Gaussian Distrubution
又叫~~正太~~正态分布Normal Distrubution。
对于$x\in \Re$,如果期望为$\mu$,方差为$\sigma^2$,那么我们就可以称,$x\sim \aleph(\mu,\sigma^2)$(读作x服从mu和sigma的高斯分布)。
![维基百科](https://upload.wikimedia.org/wikipedia/commons/thumb/8/8a/Normal_approximation_to_binomial.png/325px-Normal_approximation_to_binomial.png)
该分布的概率分布曲线像是山丘,以$x=\mu$对称,山丘的陡峭程度和
相关,$\sigma$越小,曲线越陡峭。

#### 参数估计
对于给定的数据集,如果认为该数据分布符合正态分布,那么可以对他们进行参数估计,即利用数据集的分布情况来估算正态分布的参数($\mu和\sigma$)。
$\mu = \frac{1}{m}\Sigma^m_{i=1}x^i$
$\sigma^2 = \frac{1}{m}\Sigma^m_{i=1}(x^i-\mu)^2$
ps.概率论课上这两个公式的分母都是$m-1$但是在机器学习领域更通用m,虽然在数学理论上二者不同,但是实际应用中差别很小。
###算法
首先,我们要算出某个样本的估算密度,对于有n个特征值的样本x,
$p(x)=\Pi_{i=1}^n p(x_i,\mu_i,\sigma^2_i)=\Pi_{i=1}^n \frac{1}{\sqrt{2\pi}\sigma_i}exp(-\frac{(x_i-\mu_j)^2}{2\sigma_j^2})$。
下面是具体算法步骤
1. 选择出有利于检测出异常的特征值。
2. 对于给出的无标签数据集,计算出正态分布的参数。
3. 对于新的样本,计算出$p(x)$,当小于阈值时($p(x)<\varepsilon$),判定为异常。
###算法的评估
通过带标签的数据,我们可以用数字量化对算法的评估。
假定CV集和测试集都是带标签的,而训练集是不带标签的数据。
在训练结束后,我们通过CV集/测试集的数据计算出评估量:

+ 真/假 阴/阳 值
+ 召回率/查准率
+ $F_1-值$
关于这些值的含义在[Week6](https://www.zybuluo.com/lunar/note/301822)有提及。
**选择 $\epsilon$ 值通常通过CV集中的F-score值来判断。**
###监督学习 vs. 异常检测
|异常检测|监督学习|
|---|---|
|正负样本数量相差非常悬殊,有一项非常小|正负样本数量都很大|
|异常的类型多样(但数量不一定多),难以预料|训练集样本异常包含大多数或几乎所有的异常类型,且类型数较少|
| 欺诈检测|垃圾邮件分类|
|生产检测|天气预测|
|机器故障检测|癌症诊断|
###特征值选择
+ 高斯化
对于分布看起来不像正态分布的特征量,我们可以通过转换,比如log运算使其分布更加贴合高斯分布。
+ 特征值
选择更加能够区分正常样本和异常样本的特征值。
###改进:多元高斯分布
以上的异常检测不能兼顾到特征值之间的联系。比如网站用户检测,每月登陆1次可能是正常的,每月消费10笔也可能是正常的,但是如果同一用户每月只登陆一次但是消费10笔,那么可能就是异常的,然而以上的检测并不会考虑这个。当然我们可以通过增加二者的比率(每次登陆消费笔数)来解决,但是当特征值较多时,就无法如此简单的解决。所以我们引入多元高斯分布。
对于$\mu \in \Re^n,\Sigma \in \Re^{n*n}$,
$p(x;\mu,\Sigma)=\frac{1}{(2\pi)^{n/2}|\Sigma|^{\frac{1}{2}}}exp(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))$
这里$\Sigma$是个n*n的矩阵,$|\Sigma|$是该矩阵的行列式的值。
利用如下公式进行参数拟合
$\mu = \frac{1}{m}\Sigma^m_{i=1}x^i \quad \Sigma = \frac{1}{m}\Sigma^m_{i=1}(x^i-\mu)(x^i-\mu)^T$。
接下来对example,计算$p(x)$并和阈值比较。
如果数据含有重复特征值或者冗余(线性相关)特征值(如$x_1=x_2\qquad x_3=x_1+x_2$),那么协方差矩阵$\Sigma$会是不可逆的,也就不能使用多元高斯模型(m>n时也不能用)。
##推荐系统 Recommender System
###基于内容的推荐
设置基于内容的特征量,值越大表示包含该特征内容越多。比如($x_1(romance)$),那么一部电影的$x_1$表示该电影的爱情片成分有多少。将用户看过的电影的基于内容的特征值作为输入X,评分作为输出y,那么我们可以通过回归算法拟合每个用户的参数,并通过此对用户未评分的电影进行评级。
###协同过滤 Collaborative Filtering
不同于上面基于内容的推荐,这里我们不事先对电影的内容提取特征值,相反,我们对用户的喜好提取特征值。
如:用户对爱情电影的喜好为5,对动作电影的喜好为1。那么大量搜集这些信息后就可以结合用户给不同电影的评分,得到电影的内容特征值。
我们可以看出,前面是通过电影内容特征估计用户喜好特征,后面是通过用户喜好特征来估计电影内容特征,这两种方法可以结合起来:

+ 具体算法
![Collaborative filtering.png-66kB][1]
我们将其统一起来,其评估函数加起来形成一个新的评估函数$J(x^1...x^m,\theta^1...\theta^u)$,最小化$J$。
+ 步骤
1. 初始化$x^1...x^m,\theta^1...\theta^u$
2. 利用梯度下降最小化$J$,不断更新参数。
3. 对于每个用户和每个电影可以估算出评分值。

+ 向量化实现
将用户对各个电影的评分可以用矩阵表示。
$$
Y=\begin{bmatrix}
5&5&0&0\\
5&?&?&0\\
?&4&0&?\\
0&0&5&4\\
0&0&5&0\\
\end{bmatrix}
$$
$Y^{ij}$表示用户j对电影i的评分。那么就有$Y=X\Theta^T$,$\Theta$是各个用户的特征值;$X$是电影的特征矩阵,每行为一部电影的各个特征。
[1]: http://static.zybuluo.com/lunar/tiir2lav8zjupf4ojldqu1lc/Collaborative%20filtering.png
Binary file not shown.

0 comments on commit 16ef509

Please sign in to comment.