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 @@
-## OvR +## 2.4.2 OvR 如果想要使用逻辑回归算法来解决这种`3`分类问题,可以使用`OvR`。`OvR`(`One Vs Rest`)是使用二分类算法来解决多分类问题的一种策略。从字面意思可以看出它的核心思想就是**一对剩余**。一对剩余的意思是当要对`n`种类别的样本进行分类时,分别取一种样本作为一类,将剩余的所有类型的样本看做另一类,这样就形成了`n`个二分类问题。所以和`OvO`一样,在训练阶段需要进行划分。 diff --git a/pingpong/Policy Gradient.md b/pingpong/Policy Gradient.md index 83f747f..a996d57 100644 --- a/pingpong/Policy Gradient.md +++ b/pingpong/Policy Gradient.md @@ -1,4 +1,4 @@ -# Policy Gradient +# 5.2.2 Policy Gradient ## Policy Gradient的核心思想 diff --git a/pingpong/coding.md b/pingpong/coding.md index 870e7bc..162dfce 100644 --- a/pingpong/coding.md +++ b/pingpong/coding.md @@ -1,4 +1,4 @@ -# 使用Policy Gradient玩乒乓球游戏 +# 5.2.3 使用Policy Gradient玩乒乓球游戏 ## 安装 gym diff --git a/pingpong/introduction.md b/pingpong/introduction.md index 53a58ed..7045908 100644 --- a/pingpong/introduction.md +++ b/pingpong/introduction.md @@ -1,4 +1,4 @@ -# 使用强化学习玩乒乓球游戏 +# 5.2 使用强化学习玩乒乓球游戏 `2013`年伦敦的一家人工智能公司`Deep Mind`发表了一篇论文`“Playing Atari with Deep Reinforcement Learning”`,一个月后`Google`就收购了这家公司。从那之后,`Reinforcement Learning`在人工智能领域就火了起来。`2016`年`AlphaGo`赢了与人类的围棋比赛,它也是用的强化学习。 diff --git a/pingpong/what is reinforce learning.md b/pingpong/what is reinforce learning.md index 3474847..b6e3220 100644 --- a/pingpong/what is reinforce learning.md +++ b/pingpong/what is reinforce learning.md @@ -1,4 +1,4 @@ -# 什么是强化学习 +# 5.2.1 什么是强化学习 强化学习是一类算法,是让计算机实现从一开始完全随机的进行操作,通过不断地尝试,从错误中学习,最后找到规律,学会了达到目的的方法。 diff --git a/random_forest.md b/random_forest.md index b638546..3b64581 100644 --- a/random_forest.md +++ b/random_forest.md @@ -1,8 +1,8 @@ -# 随机森林 +# 2.6 随机森林 既然有决策树,那有没有用多棵决策树组成森林的算法呢?有!那就是**随机森林**。随机森林是一种叫**Bagging**的算法框架的变体。所以想要理解**随机森林**首先要理解**Bagging**。 -## Bagging +## 2.6.1 Bagging ### 什么是Bagging @@ -46,7 +46,7 @@ $$
-## 随机森林 +## 2.6.2 随机森林 **随机森林**是**Bagging**的一种扩展变体,**随机森林**的训练过程相对与**Bagging**的训练过程的改变有: diff --git a/regression_metrics.md b/regression_metrics.md index 4b345f0..d959538 100644 --- a/regression_metrics.md +++ b/regression_metrics.md @@ -1,6 +1,6 @@ -# 回归模型性能评估指标 +# 3.2 回归模型性能评估指标 -##MSE +## 3.2.1 MSE `MSE(Mean Squared Error)`叫做均方误差,其实就是线性回归的损失函数。公式如下: @@ -10,7 +10,7 @@ $$ 其中$$y^i$$表示第`i`个样本的真实标签,$$p^i$$表示模型对第`i`个样本的预测标签。线性回归的目的就是让损失函数最小。那么模型训练出来了,我们在测试集上用损失函数来评估模型就行了。 -##RMSE +## 3.2.2 RMSE `RMSE(Root Mean Squard Error)`均方根误差,公式如下: @@ -22,7 +22,7 @@ $$ 例如:要做房价预测,每平方是万元,我们预测结果也是万元。那么差值的平方单位应该是千万级别的。那我们不太好描述自己做的模型效果。怎么说呢?我们的模型误差是多少千万?于是干脆就开个根号就好了。我们误差的结果就跟我们数据是一个级别的了,在描述模型的时候就说,我们模型的误差是多少万元。 -##MAE +## 3.2.3 MAE `MAE(Mean Aboslute Error)`,公式如下: @@ -32,7 +32,7 @@ $$ `MAE`虽然不作为损失函数,确是一个非常直观的评估指标,它表示每个样本的预测标签值与真实标签值的`L1`距离。 -#####R-Squared +## 3.2.4 R-Squared 上面的几种衡量标准针对不同的模型会有不同的值。比如说预测房价 那么误差单位就是万元。数子可能是`3`,`4`,`5`之类的。那么预测身高就可能是`0.1`,`0.6`之类的。没有什么可读性,到底多少才算好呢?不知道,那要根据模型的应用场景来。看看分类算法的衡量标准就是正确率,而正确率又在 `0~1`之间,最高百分之百。最低`0`。如果是负数,则考虑非线性相关。很直观,而且不同模型一样的。那么线性回归有没有这样的衡量标准呢? diff --git a/sklearn.md b/sklearn.md index 850d5b3..d94efc5 100644 --- a/sklearn.md +++ b/sklearn.md @@ -1,18 +1,18 @@ -# 使用sklearn进行机器学习 +# 4. 使用sklearn进行机器学习 -## 写在前面 +## 4.1 写在前面 这是一个`sklearn`的`hello world`级教程,想要更加系统更加全面的学习`sklearn`建议查阅`sklearn`的[官方网站](https://scikit-learn.org/stable/)。 -## sklearn简介 +## 4.2 sklearn简介 `scikit-learn`(简记`sklearn`),是用`python`实现的机器学习算法库。`sklearn`可以实现数据预处理、分类、回归、降维、模型选择等常用的机器学习算法。基本上只需要知道一些`python`的基础语法知识就能学会怎样使用`sklearn`了,所以`sklearn`是一款非常好用的`python`机器学习库。 -## sklearn的安装 +## 4.3 sklearn的安装 和安装其他第三方库一样简单,只需要在命令行中输入 `pip install scikit-learn` 即可。 -## sklearn的目录结构 +## 4.4 sklearn的目录结构 `sklearn`提供的接口都封装在不同的目录下的不同的`py`文件中,所以对`sklearn`的目录结构有一个大致的了解,有助于我们更加深刻地理解`sklearn`。目录结构如下: @@ -20,7 +20,7 @@ 其实从目录名字可以看出目录中的`py`文件是干啥的。比如`cluster`目录下都是聚类算法接口, `ensemble`目录下都是集成学习算法的接口。 -## 使用sklearn识别手写数字 +## 4.5 使用sklearn识别手写数字 接下来不如通过一个实例来感受一下`sklearn`的强大。 @@ -131,7 +131,7 @@ acc = accuracy_score(y_test, result) print(acc) ``` -## 更好地验证算法性能 +## 4.6 更好地验证算法性能 在划分训练集与测试集时会有这样的情况,可能模型对于数字`1`的识别准确率比较低 ,而测试集中没多少个数字为`1`的样本,然后用测试集测试完后得到的准确率为`0.96`。然后你可能觉得哎呀,我的模型很厉害了,但其实并不然,因为这样的测试集让你的模型的性能有了误解。那有没有更加公正的验证算法性能的方法呢?有,那就是**k-折验证**! diff --git a/some term.md b/some term.md index b66591a..9f4fbb3 100644 --- a/some term.md +++ b/some term.md @@ -1,6 +1,6 @@ -# 机器学习常用术语 +# 1.2 机器学习常用术语 -## 训练集,测试集,样本,特征 +## 1.2.1 训练集,测试集,样本,特征 假设收集了一份西瓜数据: @@ -21,7 +21,7 @@ 因此,这份数据是一个有`4`个**样本**,`3`个**特征**的**训练集**,训练集的**标签**是“甜不甜”。 -## 欠拟合与过拟合 +## 1.2.2 欠拟合与过拟合 最好的情况下,模型应该不管在训练集上还是测试集上,它的性能都不错。但是有的时候,我模型在训练集上的性能比较差,那么这种情况我们称为**欠拟合**。那如果模型在训练集上的性能好到爆炸,但在测试集上的性能却不尽人意,那么这种情况我们称为**过拟合**。 @@ -34,7 +34,7 @@
-## 验证集与交叉验证 +## 1.2.3 验证集与交叉验证 在真实业务中,我们可能没有真正意义上的测试集,或者说不知道测试集中的数据长什么样子。那么怎样在没有测试集的情况下来验证模型好还是不好呢?这个时候就需要**验证集**了。 diff --git a/svm.md b/svm.md index 846bc17..ddac098 100644 --- a/svm.md +++ b/svm.md @@ -1,6 +1,6 @@ -# 支持向量机 +# 2.8 支持向量机 -## 线性可分支持向量机 +## 2.8.1 线性可分支持向量机 例如逻辑回归这种广义线性模型对数据进行分类时,其实本质就是找到一条 **决策边界** ,然后将数据分成两个类别(边界的一边是一种类别,另一边是另一种类别)。如下图中的两条线是两种模型产生的 **决策边界** : @@ -171,7 +171,7 @@ $$ 于是,对任意训练样本$$(x_i,y_i)$$,总有$$\alpha_i=0$$或$$y_if(x_i)=1$$。若$$\alpha_i=0$$,则该样本将不会出现在式子$$4$$中,也就不会对$$f(x)$$,有任何影响。若$$\alpha_i>0$$,则必有$$y_if(x_i)=1$$,所对应的样本点位于最大间隔边界上,是一个支持向量。这显示出支持向量机的一个重要性质: 训练完后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关。 -##线性支持向量机 +## 2.8.2 线性支持向量机 假如现在有一份数据分布如下图: @@ -246,7 +246,7 @@ $$ $$ -##smo算法 +## 2.8.3 smo算法 序列最小优化算法($$smo$$算法)是一种启发式算法, $$SVM$$中的模型参数可以使用该算法进行求解。其基本思路是:如果所有变量的解都满足此最优化问题的$$KKT$$条件,那么这个最优化问题的解就得到了。因为$$KKT$$条件是该最优化问题的充分必要条件。否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。子问题有两个变量,一个是违反$$KKT$$条件最严重的那一个,另一个由约束条件自动确定。如此,$$smo$$算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。具体如下: diff --git a/titanic/EDA.md b/titanic/EDA.md index de2c5ba..b7a37b6 100644 --- a/titanic/EDA.md +++ b/titanic/EDA.md @@ -1,4 +1,4 @@ -# 探索性数据分析(EDA) +# 5.1.1 探索性数据分析(EDA) 探索性数据分析(`EDA`)说白了就是通过可视化的方式来看看数据中特征与特征之间,特征与目标之间的潜在关系,看看有什么有用的线索可以挖掘,例如哪些数据是噪声,有哪些特征的相关性比较低,后续可以造出哪些新的特征等。 diff --git a/titanic/feature engerning.md b/titanic/feature engerning.md index 9547467..fa374f9 100644 --- a/titanic/feature engerning.md +++ b/titanic/feature engerning.md @@ -1,4 +1,4 @@ -# 特征工程 +# 5.1.2 特征工程 什么是特征工程?其实每当我们拿到数据时,并不是所有的特征都是有用的,可能有许多冗余的特征需要删掉,或者根据`EDA`的结果,我们可以根据已有的特征来添加新的特征,这其实就是特征工程。 diff --git a/titanic/fit and predict.md b/titanic/fit and predict.md index c0a0834..67cb322 100644 --- a/titanic/fit and predict.md +++ b/titanic/fit and predict.md @@ -1,4 +1,4 @@ -# 构建模型进行预测 +# 5.1.3 构建模型进行预测 做好数据预处理后,可以将数据喂给机器学习模型来进行训练和预测了。不过在构建模型之前,要使用处理训练集数据的方式来处理测试集。 diff --git a/titanic/introduction.md b/titanic/introduction.md index 416481c..3ddbe81 100644 --- a/titanic/introduction.md +++ b/titanic/introduction.md @@ -1,4 +1,4 @@ -# 泰坦尼克生还预测 +# 5.1 泰坦尼克生还预测 ## 写在前面的话 diff --git a/titanic/tuning.md b/titanic/tuning.md index 625da0b..a85c9a4 100644 --- a/titanic/tuning.md +++ b/titanic/tuning.md @@ -1,4 +1,4 @@ -# 调参 +# 5.1.4 调参 很多机器学习算法有很多可以调整的参数(即超参数),例如我们用的随机森林需要我们指定森林中有多少棵决策树,每棵决策树的最大深度等。这些超参数都或多或少的会影响这模型的性能。那么怎样才能找到合适的超参数,来让我们的模型性能达到比较好的效果呢?可以使用网格搜索! diff --git a/what's machine_learning.md b/what's machine_learning.md index f1e91e8..e7fa660 100644 --- a/what's machine_learning.md +++ b/what's machine_learning.md @@ -1,10 +1,10 @@ -# 什么是机器学习 +# 1.1 什么是机器学习 机器学习的定义有很多种,但是最准确的定义是:"A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E." 这个定义除了非常押韵之外,还体现了机器学习的几个关键点,即:`task`, `experience` 和 `performance`。 -## task +## 1.1.1 task **task** 指的是机器学习所需要完成的任务。机器学习能够完成的任务主要有:**分类、回归、聚类**。 @@ -33,7 +33,7 @@ 细心的你可能注意到了,**分类和回归问题的训练集中都是带有标签的**。也就是说数据已经告诉了机器学习算法我这条数据的答案是这个,那条数据的答案是那个,就像有老师在监督学生做题目一样,一看到学生做错了就告诉他题目做错了,看到学生做对了就鼓励他。所以用来解决**分类和回归**问题的机器学习算法又称为**监督学习**。而像用来解决**聚类**问题的机器学习算法又称为**无监督学习**。 -## experience +## 1.1.2 experience **experience**指的根据历史数据总结归纳出规律的过程,即学习过程,或模型的训练过程。**模型**这个词看上去很高大上,其实可以把他看成是一个函数。例如:现在想用机器学习来识别图片里的是香蕉还是苹果,那么机器学习所的事情就是得到一个比较好的函数,当输入一张香蕉图片时,能得到识别结果为香蕉的输出,当输入一张苹果图片时,能得到识别结果为苹果的输出。 @@ -42,6 +42,6 @@ 至于这样一个函数(**模型**)里面长什么样子,这就与具体的机器学习算法有关了。对机器学学习算法感兴趣可以阅读**常见机器学习算法**章节。 -## performance +## 1.1.3 performance **performance**指的是模型的性能。对于不同的任务,有不同的衡量模型性能的标准。例如分类时可能会根据模型的**准确率**,**精准率**,**召回率**,**AUC**等指标来衡量模型的好坏,回归时会看看模型的**MSE**,**RMSE**,**r2 score**等指标,回归时会以**FM指数**,**DB指数**等指标来衡量聚类的效果怎么样。对各种性能指标感兴趣可以阅读**模型评估指标**章节。 \ No newline at end of file diff --git a/work flow.md b/work flow.md index 071a8c2..378fdfd 100644 --- a/work flow.md +++ b/work flow.md @@ -1,4 +1,4 @@ -# 机器学习项目流程 +# 1.3 机器学习项目流程 当我们拿到一个项目需求,并想要使用机器学习技术来实现时,往往会按照**理解问题与问题转换、获取数据、数据清洗与预处理、特征工程、模型训练与调优**这`5`个步骤来走。 diff --git a/xx introduction.md b/xx introduction.md index 449cf1e..8dae2b4 100644 --- a/xx introduction.md +++ b/xx introduction.md @@ -1,4 +1,4 @@ -# 综合实战案例 +# 5. 综合实战案例 纸上得来终觉浅,绝知此事要躬行。当我们学会了机器学习算法原理,知道了怎样使用`sklearn`来快速编写机器学习程序之后,需要进行大量的实战演练来提升我们的技能和实操能力。所以在本章中提供了两个综合实战案例:一个是`kaggle`中最为经典的也是最适合入门的机器学习比赛---泰坦尼克生还预测。另一个是使用强化学习来让程序自己玩乒乓球游戏。希望通过这两个实战案例,能够提升您对机器学习的兴趣以及使用机器学习技术解决实际问题的能力。