diff --git a/Day16-20/16-20.Python语言进阶.md b/Day16-20/16-20.Python语言进阶.md index 4f1c607..caed2ef 100755 --- a/Day16-20/16-20.Python语言进阶.md +++ b/Day16-20/16-20.Python语言进阶.md @@ -938,7 +938,7 @@ 例子:可插拔的哈希算法(策略模式)。 ```Python - class StreamHasher(): + class StreamHasher: """哈希摘要生成器""" def __init__(self, alg='md5', size=4096): diff --git a/Day66-80/68.NumPy的应用-1.md b/Day66-80/68.NumPy的应用-1.md index f5b50df..07511e3 100755 --- a/Day66-80/68.NumPy的应用-1.md +++ b/Day66-80/68.NumPy的应用-1.md @@ -757,7 +757,7 @@ array([ True, True, True, True, True, False, False, False, False]) 代码: ```Python -array19[array20 > 5] +array19[array19 > 5] ``` 输出: @@ -781,7 +781,7 @@ array([False, True, False, True, False, True, False, True, False]) 代码: ```Python -array19[array20 % 2 == 0] +array19[array19 % 2 == 0] ``` 输出: diff --git a/Day81-90/81.人工智能和机器学习概述.md b/Day81-90/81.人工智能和机器学习概述.md index 3241f6f..2740521 100755 --- a/Day81-90/81.人工智能和机器学习概述.md +++ b/Day81-90/81.人工智能和机器学习概述.md @@ -1,6 +1,6 @@ ## 人工智能和机器学习概述 -所谓“人工智能”通常是泛指让机器具有像人一样的智慧的技术,其目的是让机器像人一样能够感知、思考和解决问题;而“机器学习”通常是指让计算机通过学习现有的数据,实现认知的更新和进步。显然,机器学习是实现人工智能的一种途径,这也是我们的课程要讨论的内容。现如今,“机器学习”和“大数据”可以说是最时髦的两个词汇,而在弱人工智能阶段,无论是“机器学习”还是“大数据”最终要解决的问题本质上是一样的,就是让计算机将纷繁复杂的数据处理成有用的信息,这样就可以发掘出数据带来的意义以及隐藏在数据背后的规律,简单的说就是用现有的数据对将来的状况做出预测和判断。 +所谓“人工智能”通常是泛指让机器具有像人一样的智慧的技术,其目的是让机器像人一样能够感知、思考和解决问题;而“机器学习”通常是指让计算机通过学习现有的数据,实现认知的更新和进步。显然,机器学习是实现人工智能的一种途径,这也是我们的课程要讨论的内容。现如今,“人工智能”和“大数据”可以说是最时髦的两个词汇,而目前我们所处的弱人工智能阶段,无论是“机器学习”还是“大数据”最终要解决的问题本质上是一样的,就是让计算机将纷繁复杂的数据处理成有用的信息,这样就可以发掘数据中潜在的价值以及隐藏在数据背后的规律,简单的说就是用现有的数据对将来的状况做出预测和判断。 在讨论机器学习相关内容之前,我们先按照问题的“输入”和“输出”对用计算机求解的问题进行一个分类,如下所示: diff --git a/Day81-90/82.k最近邻分类.md b/Day81-90/82.k最近邻算法.md similarity index 77% rename from Day81-90/82.k最近邻分类.md rename to Day81-90/82.k最近邻算法.md index 1568098..beef33c 100755 --- a/Day81-90/82.k最近邻分类.md +++ b/Day81-90/82.k最近邻算法.md @@ -2,19 +2,49 @@ $k$最近邻(简称kNN,k-Nearest Neighbor)是Cover和Hart在1968年提出的一种简单的监督学习算法,可用于字符识别、文本分类、图像识别等领域。kNN的工作机制非常简单:给定测试样本,基于某种距离度量(如:欧式距离、曼哈顿距离等)找出训练集中与其最接近的$k$个训练样本,然后基于这$k$个“最近邻居”的信息来进行预测。对于分类任务,可以在$k$个最近邻居中选择出现次数最多的类别标签作为预测的结果;对于回归任务,可以使用$k$个最近邻居实际输出(目标值)的平均值作为预测的结果,当然也可以根据距离的远近进行加权平均,距离越近的样本权重值就越大。 -### 案例:电影分类预测 +### 距离的度量 + +1. 欧氏距离 + +$$ +d = \sqrt{\sum_{k=1}^n(x_{1k}-x_{2k})^2} +$$ + +2. 曼哈顿距离 + +$$ +d = \sum_{k=1}^n \mid {x_{1k}-x_{2k}} \mid +$$ + +3. 切比雪夫距离 + +$$ +d = max(\mid x_{1k}-x_{2k} \mid) +$$ + +4. 闵可夫斯基距离 + - 当$p=1$时,就是曼哈顿距离 + - 当$p=2$时,就是欧式距离 + - 当$p \to \infty$时,就是切比雪夫距离 + +$$ +d = \sqrt[p]{\sum_{k=1}^n \mid x_{1k}-x_{2k} \mid ^p} +$$ + +5. 余弦距离 + $$ + cos(\theta) = \frac{\sum_{k=1}^n x_{1k}x_{2k}}{\sqrt{\sum_{k=1}^n x_{1k}^2} \sqrt{\sum_{k=1}^n x_{2k}^2}} + $$ + +### 鸢尾花数据集介绍 -### k值的选择和交叉检验 +### kNN算法实现 -k值的选择对于kNN算法的结果有非常显著的影响。下面用李航博士的《统计学习方法》一书中的叙述,来对k值的选择加以说明。 -如果选择较小的$k$值,就相当于用较小的邻域中的训练实例进行预测,“学习”的近似误差会减小,只有与输入实例较近(相似的)训练实例才会对预测结果起作用;但缺点是“学习”的估计误差会增大,预测结果会对近邻的实例点非常敏感,如果近邻的实例点刚好是噪声,预测就会出错。换句话说,$k$值的减小就意味着整体模型变得复杂,容易发生**过拟合**。 -如果选择较大的$k$值,就相当于用较大的邻域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测起作用,使预测发生错误。对于$k=N$的极端情况(其中$N$代表所有的训练实例的数量),那么无论输入实例是什么,都会预测它属于训练实例中最多的类,很显然,这样的模型完全忽略了训练实例中大量的有用信息,是不可取的。 - -实际应用中,$k$的取值通常都比较小,可以通过交叉检验的方式来选择较好的$k$值。 +###使用Scikit-learn实现kNN @@ -32,4 +62,15 @@ k值的选择对于kNN算法的结果有非常显著的影响。下面用李航 1. 惰性学习 2. 输出的可解释性不强 3. 不擅长处理不均衡样本 -4. 计算量比较大 \ No newline at end of file +4. 计算量比较大 + + +### k值的选择和交叉检验 + +k值的选择对于kNN算法的结果有非常显著的影响。下面用李航博士的《统计学习方法》一书中的叙述,来对k值的选择加以说明。 + +如果选择较小的$k$值,就相当于用较小的邻域中的训练实例进行预测,“学习”的近似误差会减小,只有与输入实例较近(相似的)训练实例才会对预测结果起作用;但缺点是“学习”的估计误差会增大,预测结果会对近邻的实例点非常敏感,如果近邻的实例点刚好是噪声,预测就会出错。换句话说,$k$值的减小就意味着整体模型变得复杂,容易发生**过拟合**。 + +如果选择较大的$k$值,就相当于用较大的邻域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测起作用,使预测发生错误。对于$k=N$的极端情况(其中$N$代表所有的训练实例的数量),那么无论输入实例是什么,都会预测它属于训练实例中最多的类,很显然,这样的模型完全忽略了训练实例中大量的有用信息,是不可取的。 + +实际应用中,$k$的取值通常都比较小,可以通过交叉检验的方式来选择较好的$k$值。 diff --git a/Day81-90/83.决策树.md b/Day81-90/83.决策树.md index 6c9a279..fbd8f21 100755 --- a/Day81-90/83.决策树.md +++ b/Day81-90/83.决策树.md @@ -1,2 +1,2 @@ -## 决策树 +## 决策树和随机森林 diff --git a/Day81-90/83.推荐系统实战-1.md b/Day81-90/83.推荐系统实战-1.md deleted file mode 100755 index 55ca245..0000000 --- a/Day81-90/83.推荐系统实战-1.md +++ /dev/null @@ -1,2 +0,0 @@ -## 推荐系统实战(1) - diff --git a/Day81-90/86.K-均值聚类.md b/Day81-90/84.聚类算法.md similarity index 100% rename from Day81-90/86.K-均值聚类.md rename to Day81-90/84.聚类算法.md diff --git a/Day81-90/84.贝叶斯分类.md b/Day81-90/84.贝叶斯分类.md deleted file mode 100755 index 943ef88..0000000 --- a/Day81-90/84.贝叶斯分类.md +++ /dev/null @@ -1,2 +0,0 @@ -## 贝叶斯分类 - diff --git a/Day81-90/85.朴素贝叶斯算法.md b/Day81-90/85.朴素贝叶斯算法.md new file mode 100755 index 0000000..28b0ed1 --- /dev/null +++ b/Day81-90/85.朴素贝叶斯算法.md @@ -0,0 +1,2 @@ +## 朴素贝叶斯算法 + diff --git a/Day81-90/85.支持向量机.md b/Day81-90/86.支持向量机.md similarity index 100% rename from Day81-90/85.支持向量机.md rename to Day81-90/86.支持向量机.md diff --git a/Day81-90/89.PyTorch概述.md b/Day81-90/89.PyTorch概述.md index b079043..fee059f 100755 --- a/Day81-90/89.PyTorch概述.md +++ b/Day81-90/89.PyTorch概述.md @@ -1,2 +1,2 @@ -## PyTorch入门 +## PyTorch概述