forked from liuzhongkai123/Machine-Learning-Practice
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
560de13
commit 16ef509
Showing
5 changed files
with
119 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -210,3 +210,4 @@ FakesAssemblies/ | |
GeneratedArtifacts/ | ||
_Pvt_Extensions/ | ||
ModelManifest.xml | ||
*.zip |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.