diff --git a/docs/2.k-近邻算法.md b/docs/2.k-近邻算法.md index 51510543..708f98af 100644 --- a/docs/2.k-近邻算法.md +++ b/docs/2.k-近邻算法.md @@ -53,11 +53,11 @@ knn 算法按照距离最近的三部电影的类型,决定未知电影的类 适用数据范围:数值型和标称型 ``` -## KNN 项目实战 +## KNN 项目案例 -### 项目实战1: 优化约会网站的配对效果 +### 项目案例1: 优化约会网站的配对效果 -> 概述: +#### 项目概述 海伦使用约会网站寻找约会对象。经过一段时间之后,她发现曾交往过三种类型的人: * 不喜欢的人 @@ -71,13 +71,7 @@ knn 算法按照距离最近的三部电影的类型,决定未知电影的类 现在她收集到了一些约会网站未曾记录的数据信息,这更有助于匹配对象的归类。 -海伦把这些约会对象的数据存放在文本文件 [datingTestSet2.txt](https://github.com/apachecn/MachineLearning/blob/master/input/2.KNN/datingTestSet2.txt) 中,总共有 1000 行。海伦约会的对象主要包含以下 3 种特征: - -* 每年获得的飞行常客里程数 -* 玩视频游戏所耗时间百分比 -* 每周消费的冰淇淋公升数 - -> 使用 KNN 改进约会网站的配对效果 +#### 开发流程 ``` 收集数据:提供文本文件 @@ -90,7 +84,15 @@ knn 算法按照距离最近的三部电影的类型,决定未知电影的类 使用算法:产生简单的命令行程序,然后海伦可以输入一些特征数据以判断对方是否为自己喜欢的类型。 ``` -* 将文本记录转换为 NumPy 的解析程序: +> 收集数据:提供文本文件 + +海伦把这些约会对象的数据存放在文本文件 [datingTestSet2.txt](https://github.com/apachecn/MachineLearning/blob/master/input/2.KNN/datingTestSet2.txt) 中,总共有 1000 行。海伦约会的对象主要包含以下 3 种特征: + +* 每年获得的飞行常客里程数 +* 玩视频游戏所耗时间百分比 +* 每周消费的冰淇淋公升数 + +> 准备数据:使用 Python 解析文本文件 ```Python def file2matrix(filename): @@ -109,7 +111,7 @@ def file2matrix(filename): return returnMat,classLabelVector ``` -* 使用 Matplotlib 创建散点图 +> 分析数据:使用 Matplotlib 画二维散点图 ```Python import matplotlib @@ -120,13 +122,22 @@ ax.scatter(datingDataMat[:, 1], datingDataMat[:, 2]) plt.show() ``` +> 训练算法:此步骤不适用于 k-近邻算法 + +> 测试算法:使用海伦提供的部分数据作为测试样本。 + 测试样本和非测试样本的区别在于: + 测试样本是已经完成分类的数据,如果预测分类与实际类别不同,则标记为一个错误。 + +> 使用算法:产生简单的命令行程序,然后海伦可以输入一些特征数据以判断对方是否为自己喜欢的类型。 + + [完整代码地址](https://github.com/apachecn/MachineLearning/blob/master/src/python/2.KNN/kNN.py): -> 优化点 +#### 要点补充 归一化是一个让权重变为统一的过程,更多细节请参考: https://www.zhihu.com/question/19951858 -### 项目实战2: 手写数字识别系统 +### 项目案例2: 手写数字识别系统 > 概述