diff --git a/.vscode/settings.json b/.vscode/settings.json index cc67606f..e2ed35a7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,5 @@ { "python.linting.pylintEnabled": true, - "python.linting.enabled": true + "python.linting.enabled": true, + "python.pythonPath": "C:\\Python\\python.exe" } \ No newline at end of file diff --git a/工作日志/2020年10月12日-本周计划.md b/工作日志/2020年10月12日-本周计划.md new file mode 100644 index 00000000..aa3a9142 --- /dev/null +++ b/工作日志/2020年10月12日-本周计划.md @@ -0,0 +1,6 @@ +主要任务: + +1. 完成吴恩达课程和作业(编程实现) +2. 完成机器学习基石(笔记+编程) +3. 完成统计学习方法(笔记+编程,熟悉numpy和matplotlib) +4. 复习线性代数(3blue1brown)和数理统计(一门课程,重新做笔记) \ No newline at end of file diff --git a/工作日志/2020年10月1日-本月计划.md b/工作日志/2020年10月1日-本月计划.md index 579b7179..e283a8a1 100644 --- a/工作日志/2020年10月1日-本月计划.md +++ b/工作日志/2020年10月1日-本月计划.md @@ -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上的各种算法了。如果是机器学习岗位,现在应该开始,了解各种机器学习相关的内容,然后发表相关方向的论文。 + + diff --git a/工作日志/总结.md b/工作日志/总结.md index 1c3b821a..625d0c96 100644 --- a/工作日志/总结.md +++ b/工作日志/总结.md @@ -17,8 +17,11 @@ * 完成了python3-numpy-scipy-matplotlib-pandas机器学习系列工具的学习。需要通过具体的编程项目进行熟练。 ## 第五周(9.28-10.4) -* 吴恩达课程完成。 +* 吴恩达课程开始 * 机器学习相关工具的熟练。 * 完成了张小玉部分的界面。 -## \ No newline at end of file +## 第六周(10.5-10.11) + +* 吴恩达机器学习完成 +* 张小玉部分界面编程和报告完成。 \ No newline at end of file diff --git a/机器学习/吴恩达机器学习/img/map-reduce.png b/机器学习/吴恩达机器学习/img/map-reduce.png new file mode 100644 index 00000000..330b00b1 Binary files /dev/null and b/机器学习/吴恩达机器学习/img/map-reduce.png differ diff --git a/机器学习/吴恩达机器学习/img/minibatch梯度下降.png b/机器学习/吴恩达机器学习/img/minibatch梯度下降.png new file mode 100644 index 00000000..a014f2e8 Binary files /dev/null and b/机器学习/吴恩达机器学习/img/minibatch梯度下降.png differ diff --git a/机器学习/吴恩达机器学习/img/两种梯度下降算法对比.png b/机器学习/吴恩达机器学习/img/两种梯度下降算法对比.png new file mode 100644 index 00000000..b3243ffa Binary files /dev/null and b/机器学习/吴恩达机器学习/img/两种梯度下降算法对比.png differ diff --git a/机器学习/吴恩达机器学习/img/人脸识别机器学习流水线.png b/机器学习/吴恩达机器学习/img/人脸识别机器学习流水线.png new file mode 100644 index 00000000..c09d6b9e Binary files /dev/null and b/机器学习/吴恩达机器学习/img/人脸识别机器学习流水线.png differ diff --git a/机器学习/吴恩达机器学习/img/协同过滤.png b/机器学习/吴恩达机器学习/img/协同过滤.png new file mode 100644 index 00000000..8c37bdc0 Binary files /dev/null and b/机器学习/吴恩达机器学习/img/协同过滤.png differ diff --git a/机器学习/吴恩达机器学习/img/协同过滤算法.png b/机器学习/吴恩达机器学习/img/协同过滤算法.png new file mode 100644 index 00000000..4bff4982 Binary files /dev/null and b/机器学习/吴恩达机器学习/img/协同过滤算法.png differ diff --git a/机器学习/吴恩达机器学习/img/协同过滤算法原理.png b/机器学习/吴恩达机器学习/img/协同过滤算法原理.png new file mode 100644 index 00000000..f058ebcd Binary files /dev/null and b/机器学习/吴恩达机器学习/img/协同过滤算法原理.png differ diff --git a/机器学习/吴恩达机器学习/img/协同过滤算法实现.png b/机器学习/吴恩达机器学习/img/协同过滤算法实现.png new file mode 100644 index 00000000..85454e95 Binary files /dev/null and b/机器学习/吴恩达机器学习/img/协同过滤算法实现.png differ diff --git a/机器学习/吴恩达机器学习/img/协同过滤算法特征距离.png b/机器学习/吴恩达机器学习/img/协同过滤算法特征距离.png new file mode 100644 index 00000000..2dee4459 Binary files /dev/null and b/机器学习/吴恩达机器学习/img/协同过滤算法特征距离.png differ diff --git a/机器学习/吴恩达机器学习/img/协同过滤算法矢量化.png b/机器学习/吴恩达机器学习/img/协同过滤算法矢量化.png new file mode 100644 index 00000000..7f22c29f Binary files /dev/null and b/机器学习/吴恩达机器学习/img/协同过滤算法矢量化.png differ diff --git a/机器学习/吴恩达机器学习/img/基于内容的推荐算法.png b/机器学习/吴恩达机器学习/img/基于内容的推荐算法.png new file mode 100644 index 00000000..23add1ff Binary files /dev/null and b/机器学习/吴恩达机器学习/img/基于内容的推荐算法.png differ diff --git a/机器学习/吴恩达机器学习/img/基于内容的推荐系统.png b/机器学习/吴恩达机器学习/img/基于内容的推荐系统.png new file mode 100644 index 00000000..07a38cf9 Binary files /dev/null and b/机器学习/吴恩达机器学习/img/基于内容的推荐系统.png differ diff --git a/机器学习/吴恩达机器学习/img/多元高斯分布异常检测.png b/机器学习/吴恩达机器学习/img/多元高斯分布异常检测.png new file mode 100644 index 00000000..2142cb4e Binary files /dev/null and b/机器学习/吴恩达机器学习/img/多元高斯分布异常检测.png differ diff --git a/机器学习/吴恩达机器学习/img/异常检测.png b/机器学习/吴恩达机器学习/img/异常检测.png new file mode 100644 index 00000000..d911bea9 Binary files /dev/null and b/机器学习/吴恩达机器学习/img/异常检测.png differ diff --git a/机器学习/吴恩达机器学习/img/异常检测系统.png b/机器学习/吴恩达机器学习/img/异常检测系统.png new file mode 100644 index 00000000..b6e88558 Binary files /dev/null and b/机器学习/吴恩达机器学习/img/异常检测系统.png differ diff --git a/机器学习/吴恩达机器学习/img/独立高斯分布与多元高斯分布.png b/机器学习/吴恩达机器学习/img/独立高斯分布与多元高斯分布.png new file mode 100644 index 00000000..1b2dc5c4 Binary files /dev/null and b/机器学习/吴恩达机器学习/img/独立高斯分布与多元高斯分布.png differ diff --git a/机器学习/吴恩达机器学习/img/课程总结.png b/机器学习/吴恩达机器学习/img/课程总结.png new file mode 100644 index 00000000..f30a7fb4 Binary files /dev/null and b/机器学习/吴恩达机器学习/img/课程总结.png differ diff --git a/机器学习/吴恩达机器学习/img/随机梯度下降算法.png b/机器学习/吴恩达机器学习/img/随机梯度下降算法.png new file mode 100644 index 00000000..2eeb1149 Binary files /dev/null and b/机器学习/吴恩达机器学习/img/随机梯度下降算法.png differ diff --git a/机器学习/吴恩达机器学习/学习笔记/01机器学习基础.md b/机器学习/吴恩达机器学习/学习笔记/01机器学习基础.md index c457584a..1d2b97df 100644 --- a/机器学习/吴恩达机器学习/学习笔记/01机器学习基础.md +++ b/机器学习/吴恩达机器学习/学习笔记/01机器学习基础.md @@ -27,4 +27,9 @@
  • 优化:线性优化,非线性优化(凸优化/非凸优化)以及其衍生的求解方法如梯度下降、牛顿法、基因算法和模拟退火等
  • 数值计算:上溢与下溢,平滑处理,计算稳定性(如矩阵求逆过程)
  • 微积分:偏微分,链式法则,矩阵求导等
  • - \ No newline at end of file + + + +## 课程总结 + +![](../img/课程总结.png) \ No newline at end of file diff --git a/机器学习/吴恩达机器学习/学习笔记/14主成分分析.md b/机器学习/吴恩达机器学习/学习笔记/14主成分分析.md index e26dcf5a..0138b917 100644 --- a/机器学习/吴恩达机器学习/学习笔记/14主成分分析.md +++ b/机器学习/吴恩达机器学习/学习笔记/14主成分分析.md @@ -35,6 +35,8 @@ k_{feature} = U(:,1:k)\\ k_{main} = k_{feature}^T*x $$ +> 协方差表示两个随机变量进行线性运算时的相关性大小。 + ## 选取主成分的个数 * 通过特征值累计,占比例 @@ -59,9 +61,6 @@ $$ * 通过PCA降低特征数,防止过拟合的方式很愚蠢。PCA降低特征数的原理本质上是减少特征之前的现行相关性,添加新的多项式特征的原理,本质上是增加特征之间的现行相关性。这样相互冲突的操作是多余的。 - - - ## 编程任务 * 使用python完成主成分分析过程,观察分析的结果。对主城分析的结果进行分析。结合概率论和数理统计的内容,判断前k个特征向量,占主成分的多少。 diff --git a/机器学习/吴恩达机器学习/学习笔记/15异常检测.md b/机器学习/吴恩达机器学习/学习笔记/15异常检测.md index b0eab120..432e32dc 100644 --- a/机器学习/吴恩达机器学习/学习笔记/15异常检测.md +++ b/机器学习/吴恩达机器学习/学习笔记/15异常检测.md @@ -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) \ No newline at end of file diff --git a/机器学习/吴恩达机器学习/学习笔记/16推荐系统.md b/机器学习/吴恩达机器学习/学习笔记/16推荐系统.md new file mode 100644 index 00000000..314a5ee2 --- /dev/null +++ b/机器学习/吴恩达机器学习/学习笔记/16推荐系统.md @@ -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) + + +## 均值规范化 + +* 将各个数据进行均值规范化处理,能够让从来没有进行评分的用户,拥有平均的评分。 diff --git a/机器学习/吴恩达机器学习/学习笔记/17大数据集.md b/机器学习/吴恩达机器学习/学习笔记/17大数据集.md new file mode 100644 index 00000000..056c2525 --- /dev/null +++ b/机器学习/吴恩达机器学习/学习笔记/17大数据集.md @@ -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 diff --git a/机器学习/吴恩达机器学习/学习笔记/18案例Photo OCR.md b/机器学习/吴恩达机器学习/学习笔记/18案例Photo OCR.md new file mode 100644 index 00000000..c2ce6c9c --- /dev/null +++ b/机器学习/吴恩达机器学习/学习笔记/18案例Photo OCR.md @@ -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) + + +> 如果自己开发及其学习的过程,应该也要建立相应的流水线,每一个流水线上单独的算法,都应该可以发表一篇论文。关键是如何设计机器学习的流水线过程----------------应该通过广泛阅读相关论文,论证如何实现机器学习系统。 + +* 建议:把机器学习问题分成很多模块,对整个系统进行上下限分析,给出需要投入时间最多的模块,合理规划任务。 + + diff --git a/机器学习/吴恩达机器学习/编程作业/15多变量高斯分布.py b/机器学习/吴恩达机器学习/编程作业/15多变量高斯分布.py new file mode 100644 index 00000000..5aff528e --- /dev/null +++ b/机器学习/吴恩达机器学习/编程作业/15多变量高斯分布.py @@ -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() diff --git a/概率论与数理统计/第20节 多元正态分布.md b/概率论与数理统计/第20节 多元正态分布.md index e6ed40cf..2f5d1549 100644 --- a/概率论与数理统计/第20节 多元正态分布.md +++ b/概率论与数理统计/第20节 多元正态分布.md @@ -103,7 +103,7 @@ $$ ### 性质6:$\chi^2变换$ * 条件 $$ -x\sim N_p(\mu,\Sigma),\Simga>0 +x\sim N_p(\mu,\Sigma),\Sigma>0 $$ * 结论