写在前面:

    上篇把机器学习的“家谱”聊了个遍,今天终于轮到上手真刀真枪——scikit-learn。别被它洋气的名字吓到,在我看来,它就像机器学习的“瑞士军刀”:不用自己造轮子,几行代码就能跑算法、看结果、画图一条龙。我们的第一个任务,是让电脑学会“认邻居”——K近邻(KNN)。听起来高大上?其实就是“谁离你近,你就跟谁一伙”。我会把每一步都拆成小白视角:从pip安装、数据载入,到调参、可视化,全程零废话。跟着敲完,你会收获人生第一张“算法决策边界”彩图,以及一份“我也行”的成就感。下一小时,一起把KNN驯成自家小宠物吧!

scikit-learn简介

        scikit - learn是一个开源的机器学习库,它是基于Python语言的。它建立在多种科学计算库之上。利用这些底层库,为机器学习提供了一整套简洁易用的工具

scikit-learn特点

        简洁高效:提供了简单高效的算法和工具,方便用户直接使用

        模块化设计:采用模块化设计,使得用户可以根据需要自由组合不同的算法和工具,支持随时用随时导入

        算法多样:提供了丰富多样的机器学习算法,包括分类、回归、聚类、降维等,满足用户不同需求

scikit-learn网站与中文文档

Scikit-learn官网:https://scikit-learn.org/stable/#

Scikit-learn中文文档:https://scikitlearn.com.cn/

scikit-learn安装与使用

01安装scikit-learn

可以使用pip或conda等包管理工具进行安装

eg:pip install -U scikit-learn

02基本使用方法

导入必要的模块和函数

新建一个.py文件

输入下面命令

from sklearn.linear_model import LinearRegression

上面是对于scikit—learn的简要介绍,只需要我们做稍微了解,学会运用此类工具即可

接下来,进入到我们需要了解的第一个机器学习算法——KNN(K近邻)算法

KNN(K近邻算法)

我们开始从这样几个方面来认识KNN算法

1.算法理论

2.使用scikit—learn实现算法

3.数学方法实现算法

1.算法理论

KNN算法概念

        K最近邻(K-Nearest Neighbor,KNN)分类算法属于数据挖局分类技术中最简单的方法之一,是著名的模式识别统计学方法,在机器学习分类算法中占有相当大的地位。它是一个理论上比较成熟的方法。既是最简单的机器学习算法之一,也是基于实例的学习方法中最基本的,又是最好的文本分类算法之一,藉由这样的特点,我们将其放在最开始讲解,希望可以让读者快速地了解机器学习算法的精髓与内核

KNN算法介绍

        定义:KNN(K-Nearest Neighbor) k个最近的邻居,即每个样本都可以用它最接近的k个邻居来代表,KNN算法属于监督学习方式的分类算法,通过测量不同数据点之间的距离进行分类回归分析

        原理-“近朱者赤”是一种基于实例的学习(instance-based learning),属于懒惰学习(Lazy learning),即KNN没有显示的学习过程,也就是说没有训练阶段(仅仅是把样本保存起来,训练时间开销为零)它是通过测量不同数据点的之间的距离进行分类或者回归。

        特点: KNN算法简单易懂,易于实现;无需训练阶段,直接进行分类或者回归;适用于多分类问题;对数据集的大小和维度不敏感

算法三要素

        1.K值选择

        2.距离选择

        3.分类规则选择

 1.K值选择

        算法中的K在KNN中,称为超参数(Hyper parameter)(超参数就是需要你手动设定的参数),需要人为选择不同的K值

        因此,K值选择就会相应的存在一些优点和问题

        K值太小:针对于数据信息比较复杂的数据集,K值取得小=影响目标点的样本少=可能提供更加详细的决策边界,但是目标点容易受到局部特殊结构的影响,模型收到噪声(可以理解为数据集当中的少数异常数据)和异常值的影响更大

        选择较小的K值,就相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合(相当于过度学习导致模型“僵化”,这里稍作了解后面会有详细说明)

        K值过大:考虑到更多的全局信息,对于数据相对没有什么明显趋势的数据集,较大的K值可以提供更稳定的决策边界;然而在更为复杂的数据集中,较大的K值可能会导致模型过于简单,无法准确捕获数据的局部特征

        选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单

        当我们取到极端情况K=N时(N为训练样本个数),此时无论输入是什么,都只是在简单的预测他属于在实例当中最多的

2.距离选择

        K近邻法(K-Nearest Neighbor,KNN):计算新的点(测试点)到每一个已知点(标签点)的距离,并比对距离,使用不同的距离公式会得到不同的分类效果。后面会介绍一下常用的距离计算方法

3.分类规则选择

        分类问题:对新的实例,根据与之相邻的K个训练实例的类别,通过多数表决法或者加权多数表决法等方式进行预测

        回归问题:对新的实例,根据与之相邻的K个训练实例的标签,通过均值计算进行预测

KNN算法步骤

        输入:训练数据集T={(x1,y1),(x2,y2)...(xn,yn)},x1为实例的特征向量,yi={c1,c2,c3...ck}为实例类别

        输出:测试实例x所属的类别y

        步骤:

(1)选择参数K

(2)计算未知实例与所有已知实例的距离(可选择多种计算距离的方式)

  (3)   选择最近K个已知实例

  (4)   根据少数服从多数的投票法则(Majority-voting),让未知实例归类为K个最近邻样本中最多数的类别。

KNN算法思想

        K近邻算法,假定给定一个训练数据集,其中实例标签已定,当输入新的实例时,可以根据其最近的K个训练实例的标签,预测新实例对应的标注信息(标签属于哪一类)

图例

        图中绿色的点就是我们要预测的那个点,假设K=3。那么KNN算法就会找到与它距离最近的三个点(这里用圆圈把它圈起来了),看看哪种类别多一些,比如这个例子中是蓝色三角形多一些,新来的绿色点就归类到蓝三角了

注意:决策边界

定义:

决策边界是分类算法中用于区分不同类别的虚拟边界,通俗讲就是在什么范围内归为当前类

边界效果:

决策边界是否合理,直接影响到分类效果的好坏

KNN与决策边界:

KNN算法通过计算待分类样本与已知样本之间的距离,找到最近的K个样本,并根据这些样本的类型信息进行投票,以确定待分类样本的类别

结语

把 KNN 的“家谱”翻到这里,我们已经完成了三件事:

  1. 把 scikit-learn 这把“瑞士军刀”握在手里——会装、会导、知道去哪查文档;

  2. 把 KNN 的理论家底拆成三颗扣子:K 值、距离、投票规则,随用随扣;

  3. 在纸上跑完了算法全流程,连决策边界长啥样都提前剧透给你。

下一步,就该让代码替我们“画图”而不是“话图”——下篇直接上手:

  • 了解如何具体计算数据点间的距离;

  • 学习交叉验证,评估一个机器学习模型的表现;

  • 使用Scikit-learn以及数学方法实现KNN算法”。

休息五分钟,活动手腕,下篇见——一起把 KNN 从理论宠物养成代码萌宠!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐