机器学习实战(一):k-近邻算法(基础篇)
机器学习是一门比较难懂的技术行域,在学习机器学习的过程中,要有足够的耐心。机器学习实战对Python掌握要求较高,建议如果是小白的同学,可以先去看懂Python基础再进行机器学习实战,会有事半功倍的效果。以下是我对学习机器学习实践的一些笔记和总结,希望对你有帮助。k-近邻算法是机器学习中的第一个分类算法,在明白他的实质前,我们先来看一个实例。
一,动作片与爱情片
众所周知,大家在手机上用各种app选择自己喜欢的电影的时候,通常都会带有目的性。比如你喜欢武打片,那你就会去动作片区域找你喜欢的电影;你喜欢青春恋爱,那你就会去爱情片区域找你想要的电影;你喜欢爱情动作片,emmmm,自行想象。那么问题来了,在这些app中,这些电影所谓的动作篇,爱情片是怎么定义的呢?
下面给大家看个表格:
电影名称 | 打斗镜头 | 接吻镜头 | 电影类型 |
---|---|---|---|
California Man | 3 | 104 | 爱情片 |
He’s Not Really into Dudes | 2 | 100 | 爱情片 |
Beautiful Woman | 1 | 81 | 爱情片 |
Kevin Longblade | 101 | 10 | 动作片 |
Robo Slayer 3000 | 99 | 5 | 动作片 |
Amped Ⅱ | 98 | 2 | 动作片 |
? | 18 | 90 | 未知 |
由上面的表格可以很容易的看出来,所谓的爱情片,接吻镜头明显多于打斗镜头,而动作篇的打斗镜头明显大于接吻镜头。接下来看看表格中的未知电影,很明显,它的接吻镜头明显大于打斗镜头,我们可以很确定的把它归为爱情片。可是,这是一个讲道理的世界,我们不可能只是凭感觉将这部电影贸然地归为爱情片,我们得拿出所谓的“证据”。
在这里我们可以将表格中的数据在一个直角坐标系中表示出来
由图片可知:蓝色是动作片,红色是爱情片,绿色则是我们需要确定的电影类型。从图中可以看出来绿色的点明显趋向于红色的点,那我们可以尝试,是否可以用点点之间的距离来确定这个未知电影的类型。
我们来看看每一部电影到未知电影的距离:
电影名称 | 与未知电影的距离 |
---|---|
California Man | 20.5 |
He’s Not Really into Dudes | 18.7 |
Beautiful Woman | 19.2 |
Kevin Longblade | 115.3 |
Robo Slayer 3000 | 117.4 |
Amped Ⅱ | 118.9 |
现在我们得到了每个电影与未知电影的区别,我们将其按照递增排序。我们找出离未知电影最近的k部电影,假设k=3,则发现三部电影都为爱情片,由此,我们可以得出,未知电影为爱情片。
恭喜你,看到这里,你已经懂得了k-邻近算法的实际应用了。k-邻近算法(kNN)属于一种较为简单的分类方法,你可以将数据想象成一堆点,每一个点都标有标签,找出未知数据所形成的那个点距离最近的k个点,依据k个点中标签出现概率最大的点进行分类。这就是k-近邻算法的实质。
k-近邻算法的基本流程:
- 收集数据:可以使用任何方法
- 准备数据:距离计算所需要的数值,最好是结构化的数据格式
- 分析数据:可以使用方法
- 训练算法:此步骤不适用于近邻算法
- 测试算法:计算错误率
- 使用算法:首先需要输入样本数和结构化的输出结果,然后运行k-近邻算法判定输入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理。
这个流程不仅适用于k-近邻算法,也在后续的很多算法中都适用,这个在后续会接着提到。