diff --git a/AGNES.md b/AGNES.md
index 12d0440..31239d3 100644
--- a/AGNES.md
+++ b/AGNES.md
@@ -1,15 +1,14 @@
-# AGNES算法
+# 2.10 AGNES算法
`AGNES`算法是一种聚类算法,最初将每个对象作为一个簇,然后这些簇根据某些距离准则被一步步地合并。两个簇间的相似度有多种不同的计算方法。聚类的合并过程反复进行直到所有的对象最终满足簇数目。所以理解`AGNES`算法前需要先理解一些距离准则。
-# 距离准则
-## 为什么需要距离
+## 2.10.1 为什么需要距离
`AGNES`算法是一种自底向上聚合的层次聚类算法,它先会将数据集中的每个样本看作一个初始簇,然后在算法运行的每一步中找出距离最近的两个簇进行合并,直至达到预设的簇的数量。所以`AGNES`算法需要不断的计算簇之间的距离,这也符合聚类的核心思想(物以类聚,人以群分),因此怎样度量两个簇之间的距离成为了关键。
-## 距离的计算
+## 2.10.2 距离的计算
衡量两个簇之间的距离通常分为最小距离、最大距离和平均距离。在`AGNES`算法中可根据具体业务选择其中一种距离作为度量标准。
@@ -37,7 +36,7 @@
假设给定簇$$C_i$$与$$C_j$$,$$|C_i|,|C_j|$$分别表示簇 i 与簇 j 中样本的数量,则平均距离为:$$d_{min}=\frac{1}{|C_i||C_j|}\sum_{x\in i}\sum_{z\in j}dist(x, z)$$
-# AGNES 算法流程
+## 2.10.3 AGNES算法流程
`AGNES`算法是一种自底向上聚合的层次聚类算法,它先会将数据集中的每个样本看作一个**初始簇**,然后在算法运行的每一步中找出距离最近的两个簇进行合并,直至达到预设的簇的数量。
diff --git a/algorithm.md b/algorithm.md
index 0742922..0441465 100644
--- a/algorithm.md
+++ b/algorithm.md
@@ -1,3 +1,5 @@
+# 2. 常见机器学习算法
+
本章主要介绍`10`种常见的机器学习算法(模型)的原理,理解模型的原理对于以后使用一些机器学习库实现业务功能时是有好处的。
diff --git a/bayes.md b/bayes.md
index aa0671a..1f75059 100644
--- a/bayes.md
+++ b/bayes.md
@@ -1,8 +1,8 @@
-# 朴素贝叶斯分类器
+# 2.7 朴素贝叶斯分类器
朴素贝叶斯分类算法是基于贝叶斯理论和特征条件独立假设的分类算法。对于给定的训练集,首先基于特征条件独立假设学习数据的概率分布。然后基于此模型,对于给定的特征数据`x`,利用贝叶斯定理计算出标签`y`。朴素贝叶斯分类算法实现简单,预测的效率很高,是一种常用的分类算法。
-##条件概率
+## 2.7.1 条件概率
朴素贝叶斯分类算法是基于贝叶斯定理与特征条件独立假设的分类方法,因此想要了解朴素贝叶斯分类算法背后的算法原理,就不得不用到概率论的一些知识,首当其冲就是**条件概率**。
@@ -45,7 +45,7 @@
假设事件`A`为第一次为次品,事件`B`为第二次为正品。则`P(AB)=P(A)*P(B|A)=(10/100)*(90/99)=0.091`。
-##全概率公式
+## 2.7.2 全概率公式
**贝叶斯公式**是**朴素贝叶斯分类算法**的核心数学理论,在了解贝叶斯公式之前,我们需要先了解**全概率公式**的相关知识。
@@ -94,7 +94,7 @@ $$
引例中小明选择哪条路去公司的概率是**两两互不相容的**(只能选其中一条路去公司),**并且和为`1`**。所以小明不迟到的概率可以通过全概率公式来计算,而引例中的计算过程就是用的全概率公式。
-##贝叶斯公式
+## 2.7.3 贝叶斯公式
当已知引发事件发生的各种原因的概率,想要算该事件发生的概率时,我们可以用**全概率公式**。但如果现在反过来,已知事件已经发生了,但想要计算引发该事件的各种原因的概率时,我们就需要用到**贝叶斯公式**了。
@@ -118,7 +118,7 @@ $$
-##贝叶斯算法流程
+## 2.7.4 贝叶斯算法流程
在炎热的夏天你可能需要买一个大西瓜来解暑,但虽然你的挑西瓜的经验很老道,但还是会有挑错的时候。尽管如此,你可能还是更愿意相信自己经验。假设现在在你面前有一个纹路清晰,拍打西瓜后声音浑厚,按照你的经验来看这个西瓜是好瓜的概率有`80`%,不是好瓜的概率有`20`%。那么在这个时候你下意识会认为这个西瓜是好瓜,因为它是好瓜的概率大于不是好瓜的概率。
diff --git a/classification_metrics.md b/classification_metrics.md
index d44befc..bf3e5e3 100644
--- a/classification_metrics.md
+++ b/classification_metrics.md
@@ -1,7 +1,7 @@
-# 分类模型性能评估指标
+# 3.1 分类模型性能评估指标
-##准确度的缺陷
+## 3.1.1 准确度的缺陷
准确度这个概念相信对于大家来说肯定并不陌生,就是正确率。例如模型的预测结果与数据真实结果如下表所示:
@@ -24,7 +24,7 @@
看到这里您应该已经体会到了,一个分类模型如果光看准确度是不够的,尤其是对这种样本**极度不平衡**的情况(`10000`条健康信息数据中,只有`1`条的类别是患有癌症,其他的类别都是健康)。
-##混淆矩阵
+## 3.1.2 混淆矩阵
想进一步的考量分类模型的性能如何,可以使用其他的一些性能指标,例如精准率和召回率。但这些指标计算的基础是**混淆矩阵**。
@@ -62,7 +62,7 @@
**所以模型分类性能越好,混淆矩阵中非对角线上的数值越小。**
-## 精准率
+## 3.1.3 精准率
**精准率(Precision)**指的是模型预测为`Positive`时的预测准确度,其计算公式如下:
@@ -85,7 +85,7 @@ $$
`0.4`这个值表示癌症检测系统的预测结果中如果有`100`个人被预测成患有癌症,那么其中有`40`人是真的患有癌症。**也就是说,精准率越高,那么癌症检测系统预测某人患有癌症的可信度就越高。**
-##召回率
+## 3.1.4 召回率
**召回率(Recall)**指的是我们关注的事件发生了,并且模型预测正确了的比值,其计算公式如下:
@@ -108,7 +108,7 @@ $$
从计算出的召回率可以看出,假设有`100`个患有癌症的病人使用这个系统进行癌症检测,系统能够检测出`80`人是患有癌症的。**也就是说,召回率越高,那么我们感兴趣的对象成为漏网之鱼的可能性越低。**
-##精准率与召回率之间的关系
+## 3.1.5 精准率与召回率之间的关系
假设有这么一组数据,菱形代表`Positive`,圆形代表`Negtive` 。
@@ -121,7 +121,7 @@ $$
从上图可知,**模型的精准率变高,召回率会变低,精准率变低,召回率会变高。**
-##F1 Score
+## 3.1.6 F1 Score
上一节中提到了精准率变高,召回率会变低,精准率变低,召回率会变高。那如果想要同时兼顾精准率和召回率,这个时候就可以使用**F1 Score**来作为性能度量指标了。
@@ -147,7 +147,7 @@ $$
这也说明了只有当模型的精准率和召回率都比较高时`F1 Score`才会比较高。这也是`F1 Score`能够同时兼顾精准率和召回率的原因。
-## ROC曲线
+## 3.1.7 ROC曲线
`ROC`曲线(`Receiver Operating Characteristic Curve`)描述的是`TPR`(`True Positive Rate`)与 `FPR`(`False Positive Rate`)之间关系的曲线。
@@ -203,7 +203,7 @@ $$
那么模型`A`的性能比模型`B`的性能好,因为模型`A`当`FPR`较低时所对应的`TPR`比模型`B`的低`FPR`所对应的`TPR`更高。由由于随着`FPR`的增大,`TPR`也会增大。所以ROC曲线与横轴所围成的面积越大,模型的分类性能就越高。而`ROC`曲线的面积称为`AUC`。
-#####AUC
+## 3.1.8 AUC
很明显模型的`AUC`越高,模型的二分类性能就越强。`AUC`的计算公式如下:
diff --git a/cluster_metrics.md b/cluster_metrics.md
index 4d81ef4..662372b 100644
--- a/cluster_metrics.md
+++ b/cluster_metrics.md
@@ -1,8 +1,8 @@
-# 聚类模型性能评估指标
+# 3.3 聚类模型性能评估指标
聚类的性能度量大致分为两类:一类是将聚类结果与某个参考模型作为参照进行比较,也就是所谓的**外部指标**;另一类是则是直接度量聚类的性能而不使用参考模型进行比较,也就是**内部指标**。
-##外部指标
+## 3.3.1 外部指标
**外部指标通常使用 Jaccard Coefficient(JC系数)、Fowlkes and Mallows Index(FM指数)以及 Rand index(Rand指数)。**
@@ -95,7 +95,7 @@ $$
因此刚刚的例子中,$$RandI=\frac{2*(2+8)}{6*(6-1)}=\frac{2}{3}$$。
-##内部指标
+## 3.3.2 内部指标
**内部指标通常使用 Davies-Bouldin Index (DB指数)以及 Dunn Index(Dunn指数)。**
diff --git a/decision_tree.md b/decision_tree.md
index f69a4ed..c0d069e 100644
--- a/decision_tree.md
+++ b/decision_tree.md
@@ -1,6 +1,6 @@
-# 决策树
+# 2.5 决策树
-## 什么是决策树
+## 2.5.1 什么是决策树
决策树说白了就是一棵能够替我们做决策的树,或者说是我们人的脑回路的一种表现形式。比如我看到一个人,然后我会思考这个男人有没有买车。那我的脑回路可能是这样的:
@@ -11,7 +11,7 @@
构造决策树时会遵循一个指标,有的是按照**信息增益**来构建,这种叫**ID3算法**,有的是**信息增益比**来构建,这种叫**C4.5**算法,有的是按照**基尼系数**来构建的,这种叫**CART**算法。在这里主要介绍一下**ID3算法**。
-## ID3算法
+## 2.5.2 ID3算法
整个**ID3算法**其实主要就是围绕着**信息增益**来的,所以要弄清楚**ID3算法**的流程,首先要弄清楚什么是**信息增益**,但要弄清楚信息增益之前有个概念必须要懂,就是**熵**。所以先看看什么是熵。
diff --git a/intro.md b/intro.md
index cb3b95b..cbf2b7e 100644
--- a/intro.md
+++ b/intro.md
@@ -1,14 +1,25 @@
-这些年来,大数据先是被神化,继而又被妖魔化,到了今天,其实谁也不知道别人所谓的大数据指的是什么。有时候大数据的定义里既有平台(硬件)又有分析技术。但为了说清楚大数据和人工智能的关系,我们还是回归大数据的本质:海量的、多维度、多形式的数据。
+# 致读者
-任何智能的发展,其实都需要一个学习的过程。而近期人工智能之所以能取得突飞猛进的进展,不能不说是因为这些年来大数据长足发展的结果。正是由于各类感应器和数据采集技术的发展,我们开始拥有以往难以想象的的海量数据,同时,也开始在某一领域拥有深度的、细致的数据。而这些,都是训练某一领域“智能”的前提。
+为什么要写这一系列教程呢?
-如果我们把人工智能看成一个嗷嗷待哺拥有无限潜力的婴儿,某一领域专业的海量的深度的数据就是喂养这个天才的奶粉。奶粉的数量决定了婴儿是否能长大,而奶粉的质量则决定了婴儿后续的智力发育水平。
+我相信作为IT行业的从业者,我们都会有一种感觉:计算机领域的技术更新实在是太快了,要学习的内容实在太多了,但是时代在高速发展,特别是近年来,人工智能,大数据的浪潮,让我们学习的内容变得更多了,作为一名从业者,我们很想把这些知识都掌握并能熟练运用,可是在选择教材和资料学习的时候,又经常会发现没有合适的一套教程能让我从入门到比较全面的掌握大数据和人工智能领域的核心知识。
-与以前的众多数据分析技术相比,人工智能技术立足于神经网络,同时发展出多层神经网络,从而可以进行深度机器学习。与以外传统的算法相比,这一算法并无多余的假设前提(比如线性建模需要假设数据之间的线性关系),而是完全利用输入的数据自行模拟和构建相应的模型结构。这一算法特点决定了它是更为灵活的、且可以根据不同的训练数据而拥有自优化的能力。
+- 市面上关于这些领域的知识都比较零散,缺乏系统性,而国外翻译的作品,语言的组织很多并不符合我们国人的习惯;
+- 目前有很多资料都很陈旧了,像现在HBase都2.X的版本了,架构和一些API都发生了改变,Hadoop也3.X版本了,端口、架构、API也改动很大,但是现在很多的书籍和网上的资料还停留在老版本,而英文资料也有很多都已经过时了,很多书籍和网上的资料还停留在几年前的架构和API上,导致我们想要验证那些代码和案例的时候往往不能成功重现,所以当我们想要选一本合适的书籍或者是找一门教程来学习这些技术的时候,就感觉非常沮丧了;
+- 我们在查看大数据人工智能书籍的时候,经常会想要编写书中代码去验证书中提到的案例,但是很多时候遇到的情况却是书中提到的数据我们获取不到,在网络上也找不到可以下载的地址(特别是国外的),这就又大大的增加了学习的门槛。
-但这一显著的优点带来的便是显著增加的运算量。在计算机运算能力取得突破以前,这样的算法几乎没有实际应用的价值。大概十几年前,我们尝试用神经网络运算一组并不海量的数据,整整等待三天都不一定会有结果。但今天的情况却大大不同了。高速并行运算、海量数据、更优化的算法共同促成了人工智能发展的突破。所以大数据与人工智能的关系非常密切。
+所以我们的目标就是想要编写出一系列能有效提高读者学习效率,降低学习门槛并且能有效提升读者动手实践能力的教程,为此我们专门为本系列教程提供了线上的实践案例和编程环境,线上教程是以游戏式闯关的模式构建的,教程中的案例都可以在 www.educoder.net 网站上找到对应的案例,环境安装的内容也能找到对应的实验环境。
-本系列书籍主要针对大数据与人工智能两个方向中使用最广的技术编写了四本书,分别为:《HBase入门指南》,《xxx》,《xxx》与《机器学习 原理与实践》。
+本系列教程主要涵盖了此次师资研修班中想要分享给你的知识,以及想要分享,又由于时间不够,来不及分享的知识。
+
+
+我们希望:
+
+- 你在翻阅本系列教程时,能够回想起会议中所提到的内容和知识,以及会议中没有涉及到的扩展知识,觉得不虚此行;
+- 你在学习本系列教程时,通过平台与教程相结合,能有效的降低你学习的门槛,提升学习效率;
+- 这一系列教程能够给你带来一次愉快而轻松的阅读体验,并在其中能掌握书中的内容,如:安装配置,核心知识点。
+
+
+但由于时间紧张,编者水平有限,本系列教程只编写了其中部分内容,书中难免存在疏漏与不足之处,在这里深表歉意。不过,我们希望在今后的日子里打磨出更加全面,更加系统,更加规范的教程。而如何打磨出更好的教程,需要你宝贵的意见和建议,你的反馈就是我们团队持续改进的动力。恳请读者和专家提出您宝贵的意见和建议。EduCoder团队将竭尽所能,不断提高书籍质量,为广大读者提供更好的书籍。
-由于编者水平有限,加之时间仓促,书中难免存在疏漏与不足之处,恳请读者和专家提出您宝贵的意见和建议。educoder团队将竭尽所能,不断提高书籍质量,为广大读者提供更好的书籍。
diff --git a/kMeans.md b/kMeans.md
index a8464c4..1bad756 100644
--- a/kMeans.md
+++ b/kMeans.md
@@ -1,4 +1,4 @@
-# k Means
+# 2.9 k Means
**k Means**是属于机器学习里面的非监督学习,通常是大家接触到的第一个聚类算法,其原理非常简单,是一种典型的基于**距离**的聚类算法。**距离**指的是每个样本到质心的距离。那么,这里所说的质心是什么呢?
diff --git a/kNN.md b/kNN.md
index 1a5fa77..1be51d2 100644
--- a/kNN.md
+++ b/kNN.md
@@ -1,8 +1,8 @@
-# kNN
+# 2.1 kNN
**kNN算法**其实是众多机器学习算法中最简单的一种,因为该算法的思想完全可以用`8`个字来概括:**“近朱者赤,近墨者黑”**。
-## kNN算法解决分类问题
+## 2.1.1 kNN算法解决分类问题
假设现在有这样的一个样本空间(由样本组成的一个空间),该样本空间里有宅男和文艺青年这两个类别,其中红圈表示宅男,绿圈表示文艺青年。如下图所示:
@@ -39,7 +39,7 @@
可以看出宅男和文艺青年的比分是`2 : 2`,那么可以尝试将属于宅男的`2`个样本与我的总距离和属于文艺青年的`2`个样本与我的总距离进行比较。然后选择总距离最小的标签作为预测结果。在这个例子中预测结果为文艺青年(宅男的总距离为`4.2 + 9.5`,文艺青年的总距离为`7.7 + 5.8`)。
-## kNN算法解决回归问题
+## 2.1.2 kNN算法解决回归问题
很明显,刚刚使用**kNN算法**解决了一个分类问题,那**kNN算法**能解决回归问题吗?当然可以!
diff --git a/linear_regression.md b/linear_regression.md
index 8da1e7a..6eb8f1a 100644
--- a/linear_regression.md
+++ b/linear_regression.md
@@ -1,6 +1,6 @@
-# 线性回归
+# 2.2 线性回归
-## 什么是线性回归
+## 2.2.1 什么是线性回归
线性回归是什么意思?可以拆字释义。回归肯定不用我多说了,那什么是线性呢?我们可以回忆一下初中时学过的直线方程:$$y=k*x+b$$
@@ -26,7 +26,7 @@
喏,其实找直线的过程就是在做线性回归,只不过这个叫法更有高大上而已。
-## 损失函数
+## 2.2.2 损失函数
那既然是找直线,那肯定是要有一个评判的标准,来评判哪条直线才是最好的。道理我们都懂,那咋评判呢?其实只要算一下实际房价和我找出的直线根据房子大小预测出来的房价之间的差距就行了。说白了就是算两点的距离。当把所有实际房价和预测出来的房价的差距(距离)算出来然后做个加和,就能量化出现在预测的房价和实际房价之间的误差。例如下图中我画了很多条小数线,每一条小数线就是实际房价和预测房价的差距(距离)。
@@ -47,7 +47,7 @@ $$
-## 怎样计算出线性回归的解?
+## 2.2.3 怎样计算出线性回归的解?
现在你应该已经弄明白了一个事实,那就是我只要找到一组参数(也就是线性方程每一项上的系数)能让我的损失函数的值最小,那我这一组参数就能最好的拟合我现在的训练数据。
diff --git a/logistic_regression.md b/logistic_regression.md
index 9f29f58..9094d30 100644
--- a/logistic_regression.md
+++ b/logistic_regression.md
@@ -1,8 +1,8 @@
-# 逻辑回归
+# 2.3 逻辑回归
逻辑回归是属于机器学习里面的监督学习,它是以回归的思想来解决分类问题的一种非常经典的二分类分类器。由于其训练后的参数有较强的可解释性,在诸多领域中,逻辑回归通常用作 `baseline`模型,以方便后期更好的挖掘业务相关信息或提升模型性能。
-## 逻辑回归大体思想
+## 2.3.1 逻辑回归大体思想
### 什么是逻辑回归
@@ -36,7 +36,7 @@ $$sigmoid$$函数的公式为:$$\sigma(t)=1/1+e^{-t}$$
从$$sigmoid$$函数的图像可以看出当$$t$$趋近于$$-\infty$$时函数值趋近于$$0$$,当$$t$$趋近于$$+\infty$$时函数值趋近于$$1$$。可见$$sigmoid$$函数的值域是$$(0,1)$$,满足我们要将$$(-\infty,+\infty)$$的实数转换成$$(0,1)$$的概率值的需求。因此**逻辑回归**在预测时可以看成$$\hat p=1/(1+e^{-Wx+b})$$,如果$$\hat p>0.5$$时预测为一种类别,否则预测为另一种类别。
-## 逻辑回归的损失函数
+## 2.3.2 逻辑回归的损失函数
在预测样本属于哪个类别时取决于算出来的$$\hat p$$。从另外一个角度来说,假设现在有一个样本的真实类别为 $$1$$ ,模型预测样本为类别 $$1$$ 的概率为 $$0.9$$ 的话,就意味着这个模型认为当前样本的类别有 $$90\%$$ 的可能性为 $$1$$ ,有 $$10\%$$ 的可能性为 $$0$$ 。所以从这个角度来看,逻辑回归的损失函数与 $$\hat p$$ 有关。
diff --git a/machine_learning.md b/machine_learning.md
index 8a6e792..b378855 100644
--- a/machine_learning.md
+++ b/machine_learning.md
@@ -1,4 +1,4 @@
-# 机器学习概述
+# 1. 机器学习概述
近年来,全球新一代信息技术创新浪潮迭起。作为全球信息领域产业竞争的新一轮焦点,人工智能的发展也迎来了第三次浪潮,它正在推动工业发展进入新的阶段,掀起第四次工业革命的序幕。而作为人工智能的重要组成部分,机器学习也成了炙手可热的概念。本章将向您介绍机器学习的基础知识,为后面的学习打好基础。
diff --git a/metrics.md b/metrics.md
index 8fe340a..0697336 100644
--- a/metrics.md
+++ b/metrics.md
@@ -1,3 +1,5 @@
+# 3. 模型评估指标
+
当模型训练好之后,我们需要有指标来量化我们的模型的性能好不好。而且模型的性能不单单只有一个维度,所以模型的好坏通常会用多个指标来进行衡量。例如,现在想要衡量一个分类模型的性能,您可能第一时间会想到用准确率来衡量模型的好坏,但是准确率高并不一定就代表模型的性能高,因此可能会需要使用如`F1 Score`、`AUC`等指标来衡量。所以在什么情况下使用什么样的性能评估指标,每个指标的数值的含义时什么,是我们在评估模型性能时必须要学会的知识。
diff --git a/multi-class-learning.md b/multi-class-learning.md
index a4fadc2..faf2653 100644
--- a/multi-class-learning.md
+++ b/multi-class-learning.md
@@ -1,8 +1,8 @@
-# 多分类学习
+# 2.4 多分类学习
现实中常遇到多分类学习任务。有些二分类算法可以直接推广到多分类,但在更多情形下,我们是基于一些策略,利用二分类算法来解决多分类问题。例如:`OvO`、`OvR`。
-## OvO
+## 2.4.1 OvO
假设现在训练数据集的分布如下图所示(其中`A`,`B`,`C`代表训练数据的类别):
@@ -22,7 +22,7 @@