forked from apachecn/Interview
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1mrliu
authored and
1mrliu
committed
Dec 26, 2017
1 parent
4142c2f
commit 5838e79
Showing
2 changed files
with
59 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,61 @@ | ||
# KNN 概述 | ||
k-近邻(kNN, k-NearestNeighbor)算法是一种基本分类与回归方法,我们这里只讨论分类问题中的 k-近邻算法。 | ||
|
||
一句话总结:近朱者赤近墨者黑! | ||
|
||
k 近邻算法的输入为实例的特征向量,对应于特征空间的点;输出为实例的类别,可以取多类。k 近邻算法假设给定一个训练数据集,其中的实例类别已定。分类时,对新的实例,根据其 k 个最近邻的训练实例的类别,通过多数表决等方式进行预测。因此,k近邻算法不具有显式的学习过程。 | ||
|
||
k 近邻算法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”。 k值的选择、距离度量以及分类决策规则是k近邻算法的三个基本要素。 | ||
# KNN场景 | ||
电影可以按照题材分类,那么如何区分动作片和爱情片呢? | ||
1.动作片 打斗次数更多 | ||
2.爱情片 亲吻次数更多 | ||
基于电影中的亲吻、打斗出现的次数,使用 k-近邻算法构造程序,就可以自动划分电影的题材类型。 | ||
![ /Users/liudong/kaggle/static/images/KNN-image/knn-1-movie.png][image-1] | ||
现在根据上面我们得到的样本集中所有电影与未知电影的距离,按照距离递增排序,可以找到 k 个距离最近的电影。 | ||
假定 k=3,则三个最靠近的电影依次是, He's Not Really into Dudes 、 Beautiful Woman 和 California Man。 | ||
knn 算法按照距离最近的三部电影的类型,决定未知电影的类型,而这三部电影全是爱情片,因此我们判定未知电影是爱情片。 | ||
# KNN原理 | ||
## KNN工作原理 | ||
1.假设有一个带有标签的样本数据集(训练样本集),其中包含每条数据与所属分类的对应关系。 | ||
2.输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较。 | ||
计算新数据与样本数据集中每条数据的距离。 | ||
对求得的所有距离进行排序(从小到大,越小表示越相似)。 | ||
取前k(k 一般小于等于 20 )个样本数据对应的分类标签。 | ||
3.求 k 个数据中出现次数最多的分类标签作为新数据的分类。 | ||
## KNN通俗理解 | ||
给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的 k 个实例,这 k 个实例的多数属于某个类,就把该输入实例分为这个类。 | ||
## KNN开发流程 | ||
收集数据:任何方法 | ||
准备数据:距离计算所需要的数值,最好是结构化的数据格式 | ||
分析数据:任何方法 | ||
训练算法:此步骤不适用于 k-近邻算法 | ||
测试算法:计算错误率 | ||
使用算法:输入样本数据和结构化的输出结果,然后运行 k-近邻算法判断输入数据分类属于哪个分类,最后对计算出的分类执行后续处理 | ||
## KNN算法特点 | ||
优点:精度高、对异常值不敏感、无数据输入假定 | ||
缺点:计算复杂度高、空间复杂度高 | ||
适用数据范围:数值型和标称型 | ||
# KNN项目案例 | ||
## 项目案例1: 优化约会网站的配对效果 | ||
### 项目概述 | ||
海伦使用约会网站寻找约会对象。经过一段时间之后,她发现曾交往过三种类型的人: | ||
|
||
》不喜欢的人 | ||
》魅力一般的人 | ||
》极具魅力的人 | ||
|
||
她希望: | ||
》工作日与魅力一般的人约会 | ||
》周末与极具魅力的人约会 | ||
》不喜欢的人则直接排除掉 | ||
现在她收集到了一些约会网站未曾记录的数据信息,这更有助于匹配对象的归类。 | ||
## 开发流程 | ||
收集数据:提供文本文件 | ||
准备数据:使用 Python 解析文本文件 | ||
分析数据:使用 Matplotlib 画二维散点图 | ||
训练算法:此步骤不适用于 k-近邻算法 | ||
测试算法:使用海伦提供的部分数据作为测试样本。 | ||
测试样本和非测试样本的区别在于: | ||
测试样本是已经完成分类的数据,如果预测分类与实际类别不同,则标记为一个错误。 | ||
使用算法:产生简单的命令行程序,然后海伦可以输入一些特征数据以判断对方是否为自己喜欢的类型。 |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.