mirror of
https://github.com/apachecn/ailearning.git
synced 2026-05-08 14:52:28 +08:00
modify knn.md
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
那么动作片具有哪些共有特征,使得动作片之间非常相似,而与爱情片存在着明显的差别呢?<br/>
|
||||
例如: 1.打斗次数 2.亲吻次数<br/>
|
||||
动作片中也会存在接吻镜头,爱情片中也会存在打斗场景,我们不能单纯依靠是否存在打斗或者亲吻镜头来判断影片的类型。但是爱情片中的亲吻镜头更多,动作片中的打斗场景也更频繁,基于此类场景在某部电影中出现的次数可以用来进行电影分类。<br/>
|
||||
基于电影中出现的亲吻、打斗出现的次数,使用k-近邻算法构造程序,自动划分电影的题材类型。
|
||||
基于电影中出现的亲吻、打斗出现的次数,使用 k-近邻算法构造程序,自动划分电影的题材类型。
|
||||
|
||||
## k-近邻分类算法
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
```
|
||||
存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。
|
||||
输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本中特征最相似数据(最近邻)的分类
|
||||
标签。一般来说,我们只选择样本数据集中前 k 个最相似的数据,这就是 k-近邻算法中 k 的来历。通常k是一个不大于 20 的整数。
|
||||
最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。
|
||||
标签。一般来说,我们只选择样本数据集中前 k 个最相似的数据,这就是 k-近邻算法中 k 的来历。通常 k 是一个不大于 20 的整数。
|
||||
最后,选择 k 个最相似数据中出现次数最多的分类,作为新数据的分类。
|
||||
```
|
||||
|
||||
```
|
||||
@@ -29,7 +29,7 @@
|
||||

|
||||
|
||||
```
|
||||
现在根据上面我们得到的样本集中所有电影与未知电影的距离,按照距离递增排序,可以找到k个距离最近的电影。
|
||||
现在根据上面我们得到的样本集中所有电影与未知电影的距离,按照距离递增排序,可以找到 k 个距离最近的电影。
|
||||
假定 k=3,则三个最靠近的电影依次是, He's Not Really into Dudes 、 Beautiful Woman 和 California Man。
|
||||
k-近邻算法按照距离最近的三部电影的类型,决定未知电影的类型,而这三部电影全是爱情片,因此我们判定未知电影是爱情片。
|
||||
```
|
||||
@@ -40,7 +40,7 @@
|
||||
收集数据:任何方法
|
||||
准备数据:距离计算所需要的数值,最好是结构化的数据格式
|
||||
分析数据:任何方法
|
||||
训练算法:此步骤不适用于k-近邻算法
|
||||
训练算法:此步骤不适用于 k-近邻算法
|
||||
测试算法:计算错误率
|
||||
使用算法:输入样本数据和结构化的输出结果,然后运行 k-近邻算法判断输入数据分类属于哪个分类,最后对计算出的分类执行后续处理
|
||||
```
|
||||
@@ -73,12 +73,18 @@
|
||||
|
||||
尽管发现了上述规律,但是海伦依然无法将约会网站推荐的匹配对象归入恰当的类别。她觉得可以在周一到周五约会那些魅力一般的人,而周末则更喜欢与那些极具魅力的人为伴。海伦希望我们的分类软件可以更好地帮助她将匹配对象划分到确切的分类中。此外海伦还收集了一些约会网站未曾记录的数据信息。她认为这些数据更有助于匹配对象的归类。
|
||||
|
||||
海伦收集约会数据已经有一段时间,她把这些数据存放在文本文件 datingTestSet2.txt 文件中,每个样本数据占据一行,总共有 1000 行。海伦的样本主要包含以下 3 中特征:
|
||||
|
||||
* 每年获得的飞行常客里程数
|
||||
* 玩视频游戏所耗时间百分比
|
||||
* 每周消费的冰淇淋公升数
|
||||
|
||||
> 示例:使用 k-近邻算法改进约会网站的配对效果
|
||||
|
||||
```
|
||||
收集数据:提供文本文件
|
||||
准备数据:使用 Python 解析文本文件
|
||||
分析数据:使用 Matlotlib 画二维扩散图
|
||||
分析数据:使用 Matplotlib 画二维扩散图
|
||||
训练算法:此步骤不适用于 k-近邻算法
|
||||
测试算法:使用海伦提供的部分数据作为测试样本。
|
||||
测试样本和非测试样本的区别在于:
|
||||
@@ -126,7 +132,7 @@ plt.show()
|
||||
|
||||
## 归一化数值(将数值转化到:0~1之间)
|
||||
|
||||
样本3和样本4的距离:
|
||||
样本 3 和样本 4 的距离:
|
||||
$$\sqrt{(0-67)^2 + (20000-32000)^2 + (1.1-0.1)^2 }$$
|
||||
|
||||
我们很容易发现: 上面方程中数字差值最大的属性对计算结果的影响最大。所以我们进行归一化处理是必不可少的。<br>
|
||||
@@ -135,11 +141,11 @@ $$\sqrt{(0-67)^2 + (20000-32000)^2 + (1.1-0.1)^2 }$$
|
||||
|
||||
## 总结
|
||||
|
||||
* k-近邻算法其实就是根据空间两个向量距离来判断类别性,关键的是引入k值,保证了一定的稳定性,很明显的缺点就是每次都要与所有样本数据进行对比。
|
||||
* 文中处理约会数据时,归一化的方法是对于消除影响很十分重要的
|
||||
* 阅读本章之前建议阅读一下numpy的文档
|
||||
* [numpy英文文档](https://docs.scipy.org/doc/numpy-dev/user/quickstart.html "NumPy英文文档")
|
||||
* [numpy中文文档](http://old.sebug.net/paper/books/scipydoc/numpy_intro.html "NumPy中文文档")
|
||||
* k-近邻算法其实就是根据空间两个向量距离来判断类别,关键的是引入 k 值,保证了一定的稳定性,很明显的缺点就是每次都要与所有样本数据进行对比。
|
||||
* 文中处理约会数据时,归一化的方法是对于消除影响十分重要的
|
||||
* 阅读本章之前建议阅读一下 numpy 的文档
|
||||
* [numpy英文文档](https://docs.scipy.org/doc/numpy-dev/user/quickstart.html "NumPy 英文文档")
|
||||
* [numpy中文文档](http://old.sebug.net/paper/books/scipydoc/numpy_intro.html "NumPy 中文文档")
|
||||
|
||||
* * *
|
||||
|
||||
|
||||
Reference in New Issue
Block a user