吴恩达结束

This commit is contained in:
yinkanglong_lab
2020-10-12 22:54:32 +08:00
parent 884c111bb5
commit df32365b3f
30 changed files with 328 additions and 14 deletions

View File

@@ -1,4 +1,5 @@
{
"python.linting.pylintEnabled": true,
"python.linting.enabled": true
"python.linting.enabled": true,
"python.pythonPath": "C:\\Python\\python.exe"
}

View File

@@ -0,0 +1,6 @@
主要任务:
1. 完成吴恩达课程和作业(编程实现)
2. 完成机器学习基石(笔记+编程)
3. 完成统计学习方法(笔记+编程熟悉numpy和matplotlib
4. 复习线性代数3blue1brown和数理统计一门课程重新做笔记

View File

@@ -25,7 +25,8 @@
下午 完成15-16
晚上 完成17-19
-----------------
吴恩达课程完成。
-------------------------------
10.5 机器学习基石上完成
10.6 机器学习基石下的一半
@@ -35,22 +36,28 @@
10.8 机器学习基石完成
> 整理好相关的机器学习笔记。进行附上代码的实现。
--------------------
-------------------------------
10.9-10.11 统计学习方法
10.9-10.11 统计学习方法,书籍结合视频教程
10.11-10.20 机器学习西瓜书
10.11-10.20 机器学习西瓜书,书籍结合视频教程
10.20-10.25 机器学习实战编程。sklearn
10.20-10.25 机器学习实战编程。sklearn,书籍结合视频教程
10.25-10.30 TensorFlow教程学会
-----------------------------------
11.01-11.10 神经网络的五套课程(仅仅学习三套就够了,因为后边的是针对专门的领域的)
11.10-11.20 联邦学习
11.10-11.20 联邦学习+情报,相关论文
-----------------------------------
基础知识->算法实现->科研论文->系统实现
----------------------------------
> 关于未来的思考。你应该知道自己毕业后回选择什么样的岗位是算法岗还是开发岗。如果是开发岗现在就应该重新学习C++以及相关的一系列基础知识了。如果是算法岗现在应该去刷LeetCode上的各种算法了。如果是机器学习岗位现在应该开始了解各种机器学习相关的内容然后发表相关方向的论文。

View File

@@ -17,8 +17,11 @@
* 完成了python3-numpy-scipy-matplotlib-pandas机器学习系列工具的学习。需要通过具体的编程项目进行熟练。
## 第五周9.28-10.4
* 吴恩达课程完成。
* 吴恩达课程开始
* 机器学习相关工具的熟练。
* 完成了张小玉部分的界面。
##
## 第六周10.5-10.11
* 吴恩达机器学习完成
* 张小玉部分界面编程和报告完成。

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 816 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 561 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 482 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 537 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 475 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 KiB

View File

@@ -27,4 +27,9 @@
<li><b>优化</b>:线性优化,非线性优化(凸优化/非凸优化)以及其衍生的求解方法如梯度下降、牛顿法、基因算法和模拟退火等</li>
<li><b>数值计算</b>:上溢与下溢,平滑处理,计算稳定性(如矩阵求逆过程)</li>
<li><b>微积分</b>:偏微分,链式法则,矩阵求导等</li>
</ul>
</ul>
## 课程总结
![](../img/课程总结.png)

View File

@@ -35,6 +35,8 @@ k_{feature} = U(:,1:k)\\
k_{main} = k_{feature}^T*x
$$
> 协方差表示两个随机变量进行线性运算时的相关性大小。
## 选取主成分的个数
* 通过特征值累计,占比例
@@ -59,9 +61,6 @@ $$
* 通过PCA降低特征数防止过拟合的方式很愚蠢。PCA降低特征数的原理本质上是减少特征之前的现行相关性添加新的多项式特征的原理本质上是增加特征之间的现行相关性。这样相互冲突的操作是多余的。
## 编程任务
* 使用python完成主成分分析过程观察分析的结果。对主城分析的结果进行分析。结合概率论和数理统计的内容判断前k个特征向量占主成分的多少。

View File

@@ -1,2 +1,70 @@
# 异常检测
## 异常检测动机
* 定义一个描述事件的特征向量
* 当事件发生的特征向量偏离正常事件的特征向量时,被认为是异常事件。
* 飞机引擎的各个参数,判断飞机引擎是否正常。
* 优点类似有监督学习,但是只给出了单侧数据集的标签。
## 高斯分布-正态分布
## 异常检测算法
* 首先使用极大似然法,假定样本的每一个参数符合正太分布,给出正太分布的模型。
* 然后将样本代入概率模型,计算每一个特征的分布概率,然后连乘。
* 设定以个边界值,当概率小于某个边界值的时候,表示样本数据不正常。
* 在这里假定样本的各个特征之间相互独立,连乘表示其联合概率密度。
> 并不是一种极其学习算法,而是一种简单的数据预处理算法,或者说统计学方法,通过统计学的计算,确定新给的样本是否存在问题,完成异常检测。
![](../img/异常检测.png)
## 开发和评估异常检测系统
在开发机器学习系统的过程中,关键是做选择,而不是实现机器学习系统。应该学会选择特征、选择训练算法、选择预处理、选择错误检测算法的方法,通过组合现有的方法,达到一个比较好的效果。
使用高斯分布进行异常检测的过程中,只考虑了单个特征变量的分布,而没有考虑各个特征变量之间可能存在的关系。
1. 使用训练集,计算高维高斯分布模型。统计学方法。
2. 使用交叉验证集和测试集对模型进行验证和评估,评估的方法,使用犯第一类和第二类错误的概率。
3. 使用交叉验证集选择合适的参数。
![](../img/异常检测系统.png)
## 异常检测VS监督学习
* 异常检测中通常具有很少量的正样本。大量的负样本。可以通过异常检测模型,描述正样本的特征。
* 监督学习中,通常包含大量的正样本和负样本,可以用来学习正负样本的特征。
## 选择异常检测算法要是用的特征
* 绘制数据的分布,通过对数据的处理,转换为高斯分布。
* 可以通过构造新的特征,来描述可能存在的异常值。
## 多变量高斯分布
* 当多个变量之间相互独立的时候,联合概率密度,即各个独立变量的概率密度的乘积。
$$
p(x;\mu;\Sigma)=\frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}} \exp{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)}
$$
* 当多个变量之间不独立的时候,使用协方差矩阵,表示各个变量之间的关系。
## 使用多变量高斯分布的异常检测
![](../img/多元高斯分布异常检测.png)
* 相比于之前的高斯分布异常检测,添加了随机变量之间的相关性,主要考虑线性相关性。协方差矩阵主要显示了随机变量之间的线性相关性
* 独立高斯分布与多元高斯分布进行一场检测的选择如下。
![](../img/独立高斯分布与多元高斯分布.png)

View File

@@ -0,0 +1,85 @@
# 推荐系统
## 问题规划
* 电影和用户的评分相关性
* 使用用户对电影的评分,进行协同过滤的模型。
## 基于内容的推荐算法
![](../img/基于内容的推荐系统.png)
主要思想:
* 基于用户浏览过的数据集,对用户尚未浏览的数据集进行评分。
* 假定我们已经知道,单个数据样本的特征标签。
* 通过多元线性回归+每个用户的历史数据集,训练得到每一个用户的线性回归参数$\theta$
## 协同过滤
* 特征学习,自行学习要使用的特征。
* 没有考虑用户之间的关联性。首先通过用户对电影特征的喜爱程度,反向
* 基于浏览过同一个电影的用户数据,对电影进行评分。同样也是基于内容的。前者是基于用户浏览记录+电影特征判断用户对特征的的爱好,后者是通过电影被浏览的记录判断电影包含的特征。
![](../img/协同过滤.png)
```
用户
电影
特征
基于内容的推荐算法:用户-电影 + 电影-特征 = 用户-特征
协同过滤: 用户-电影 + 用户-特征 = 电影-特征
两者可以结合,进行循环训练,能够收敛到更好的模型。
用户-特征 -> 电影-特征 -> 用户-特征
```
> * 基于内容的推荐算法:已知用户-电影,电影-特征,求解用户-特征,用户-电影。
> * 协同过滤:已知用户-电影,用户-特征,求解电影-特征,用户-电影。
### 两种算法进行对比
* 基于内容的电影推荐
![](../img/基于内容的推荐算法.png)
* 基于内容的特征生成
![](../img/协同过滤算法.png)
## 协同过滤算法
* 协同过滤算法原理,同时优化“基于内容的特征生成”和“基于内容的电影推荐”两部分
![](../img/协同过滤算法原理.png)
* 协同过滤算法的实现。
* 初始化用户-电影特征关系参数$\theta$和电影特征$x_i$
* 最小化代价函数。对所有用户-电影特征关系参数$\theta$和电影特征$x_i$使用梯度下降算法,进行计算。
* 最终生成用户-电影特征参数和电影特征的解。然后使用这两个解,生成用户推荐。
![](../img/协同过滤算法实现.png)
## 向量化
* 使用协同过滤,实现电影推荐的例子。
* 又称为低秩矩阵分解。可以对低秩矩阵进行矩阵化运算。
![](../img/协同过滤算法矢量化.png)
* 协同过滤算法获得的电影特征无法进行可读理解。
* 可以通过计算两个电影特征之间的距离,识别两个电影是否相似。
![](../img/协同过滤算法特征距离.png)
## 均值规范化
* 将各个数据进行均值规范化处理,能够让从来没有进行评分的用户,拥有平均的评分。

View File

@@ -0,0 +1,58 @@
# 大数据集
## 大数据集机器学习
* 通过大量数据,能够减少数据方差带来的模型误差。但不能解决模型偏差带来的模型误差。(有待考虑)
## 随机梯度下降算法
* 数据集很大的时候,普通梯度下降会变得困难。使用随机梯度下降,能够解决数据集过大的现象。
* batch梯度下降。一次对所有的数据进行梯度下降。
* 随机梯度下降stochastic gradient descent
* random shuffle example
* repeat gradient descent on one example
### 两种梯度下降算法对比
![](../img/两种梯度下降算法对比.png)
### 随机梯度下降算法过程
![](../img/随机梯度下降算法.png)
## mini-batch 梯度下降算法
* 选取少量样本进行梯度下降。
* 需要有非常高效的向量化方法,对小范围内的数据进行求和运算
![](../img/minibatch梯度下降.png)
## 随机梯度下降的收敛问题
* 学习率一般是固定的参数,如果想让代价函数收敛在更小的位置,可以随着训练过程降低学习率。
* 保持固定的学习率能够方便调试。
## 在线机器学习
* 针对不断增加的连续的数据流。不断增加数据的网站,连续的数据流==> 在线机器学习。一边学习一边使用。
* 邮寄包裹的例子:用户的统计学特征、发货地、目的地、给出的价格、用户选择还是离开。根据以上特征,训练处,什么时候用户留下,什么时候用户离开,并给出推荐的结果。
* 一般使用逻辑回归的方式,判定给定价格下用户留下的概率,或者在一定概率下,用户留下的价格。
* 在线机器学习的优点:能够使用不断变化的用户偏好。
* 点击率预测学习。用户特征(搜索关键词)----手机特征,用户是否点击,建立用户特征和手机特征之间的匹配关系。
* 与随机梯度下降非常相似,不同点在于,随机梯度下降,会使用固定的数据集,在线机器学习,使用不断变化的数据集。
## map-reduce算法
* map-reduce思想
![](../img/map-reduce.png)
* map-reduce 过程,可以处理$\Sigma$累加的部分通过reduce过程对计算结果累计。必要条件算法能够表示成对训练集的一种求和
* 可以在单个机器的不同核心上执行map-reduce的过程
* 某些现行代数库在进行向量化运算的过程中会通过多个核心进行优化不必使用MapReduce

View File

@@ -0,0 +1,54 @@
# 机器学习案例-Photo OCR
## 问题描述
* 主要目的:
* 复杂的机器学习系统是如何组建出来的
* 机器学习流水线的概念。
* 如何分配机器学习资源
* 问题描述:照片的光学识别。
1. 找出由文字的区域text detection
2. 字符分割character segment
3. 字符识别character classification
* 机器学习流水线photo ocr pipeline
* image -> text detection -> character segment -> character classification
* 将图片传入一系列机器学习组件,完成一系列任务。
## 滑动窗口
* 使用一个固定大小滑动窗口,在待检测的图片上遍历所有可能存在目标的区域。
* 调整滑动窗口的大小将滑动窗口映射为固定大小然后继续进行滑动并检测窗口中是否存在目标。100-50的区域通过数据处理映射为50-25的检测单元然后进行目标分析
## 获取大量数据和人工数据
### 人工合成数据
* 识别字体图片中:使用网络上个中免费的字体,添加各种不同的背景,对字体进行缩放旋转扭曲等操作,人工合成数据集。
* 语音识别:给正常的语音添加各种不同的背景噪音。
### 是否需要获得大量数据
* 保证假设函数的偏差很小
* 考虑是否能够快速获取十倍于现在的数据集
* 人工合成
* 众包服务
* 网上搜集
## 时间规划
* 做机器学习,最重要的是时间,其次是数据,然后是算法选择,最后是系统实现和调参。
* 考虑机器学习系统、机器学习流水线上,准确率的瓶颈在哪里。
* 一个机器学习流水线的实例。
![](../img/人脸识别机器学习流水线.png)
> 如果自己开发及其学习的过程,应该也要建立相应的流水线,每一个流水线上单独的算法,都应该可以发表一篇论文。关键是如何设计机器学习的流水线过程----------------应该通过广泛阅读相关论文,论证如何实现机器学习系统。
* 建议:把机器学习问题分成很多模块,对整个系统进行上下限分析,给出需要投入时间最多的模块,合理规划任务。

View File

@@ -0,0 +1,28 @@
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
x, y = np.mgrid[-5:5:.1, -5:5:.1]
sigma = [[1, 0.9], [0.9, 3]]
# print(x.size)
xf = x.flatten()
yf = y.flatten()
xy = np.stack((xf, yf), axis=1)
# print(xy)
z1 = 1/(2*np.pi*np.sqrt(np.linalg.det(sigma)))
z2 = -1/2.0*np.sum(np.matmul(xy, sigma)*xy, axis=1)
z = z1*np.exp(z2)
z = np.reshape(z, (100, 100))
# print(z2)
print(x.shape, y.shape, z.shape)
figure = plt.figure()
ax = Axes3D(figure)
ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'))
plt.show()

View File

@@ -103,7 +103,7 @@ $$
### 性质6$\chi^2变换$
* 条件
$$
x\sim N_p(\mu,\Sigma),\Simga>0
x\sim N_p(\mu,\Sigma),\Sigma>0
$$
* 结论