文章目录
一、算法概念
什么是KNN?
K-近邻 (KNN) 是一种监督算法。KNN 背后的基本思想是在训练空间中找到距离新数据点最近的 K 个数据点,然后根据 k 个最近数据点中多数类别对新数据点进行分类,类似于“物以类聚”的思想,将一个样本的类别归于它的邻近样本。K-近邻算法是一种惰性学习模型(lazy learning),也称为基于实例学习模型,这与勤奋学习模型(eager learning)不一样。
勤奋学习模型在训练模型的时候会很耗资源,它会根据训练数据生成一个模型,在预测阶段直接带入数据就可以生成预测的数据,所以在预测阶段几乎不消耗资源。
惰性学习模型在训练模型的时候不会估计由模型生成的参数,他可以即刻预测,但是会消耗较多资源,例如KNN模型,要预测一个实例,需要求出与所有实例之间的距离。
K-近邻算法是一种非参数模型,参数模型使用固定的数量的参数或者系数去定义模型,非参数模型并不意味着不需要参数,而是参数的数量不确定,它可能会随着训练实例数量的增加而增加,当数据量大的时候,看不出解释变量和响应变量之间的关系的时候,使用非参数模型就会有很大的优势,而如果数据量少,可以观察到两者之间的关系的,使用相应的模型就会有很大的优势。
存在一个样本集,也就是训练集,每一个数据都有标签,也就是我们知道样本中每个数据与所属分类的关系,输入没有标签的新数据后,新数据的每个特征会和样本集中的所有数据对应的特征进行比较,算出新数据与样本集其他数据的欧几里得距离,这里需要给出K值,这里会选择与新数据距离最近的K个数据,其中出现次数最多的分类就是新数据的分类,一般k不会大于20。
KNN在做回归和分类的主要区别,在于最后做预测时候的决策不同。在分类预测时,一般采用多数表决法。在做回归预测时,一般使用平均值法。
多数表决法:分类时,哪些样本离我的目标样本比较近,即目标样本离哪个分类的样本更接近。
平均值法: 预测一个样本的平均身高,观察目标样本周围的其他样本的平均身高,我们认为平均身高是目标样本的身高。
这里就运用了KNN的思想。KNN方法既可以做分类,也可以做回归,这点和决策树等算法相同。
由上图KNN分类算法可以发现,数据分为蓝色和绿色两个类别,当有一个新的数据点(红色)出现,并且 K = 5时,可以看到红色点有 3 个绿色近邻样本和 2个蓝色近邻样本,这说明蓝点将被归类为绿色类,因为多数投票为 3。同样,当 K 值变化时,圆内的近邻样本数量会增加,新的数据点被归类到其对应的多数投票类中。
在 KNN 回归中,因变量是连续的,分布在整个特征空间中。当有新的数据点红色点出现时,会使用某种距离度量(如欧几里得距离)找到最接近的新数据点的 K 个近邻样本。找到这些邻居后,新数据点的预测值通过计算这些邻居的因变量值的平均值来确定。
例如,假设我们想预测学生的考试成绩,而已知的特征是学习时长。我们已经有了许多学生的学习时长和对应的考试成绩数据。现在,针对一个新来的学生,我们知道他的学习时长,通过 KNN 回归,我们可以找到学习时长最接近的 K 个学生,然后将这 K 个学生的考试成绩取平均值,作为这个新学生的成绩预测。
二、算法原理
(一)K值选择
K
K
K值的选择与样本分布有关,一般选择一个较小的
K
K
K值,可以通过交叉验证来选择一个比较优的
K
K
K值,默认值是5。如果数据是三维以下的,如果数据是三维或者三维以下的,可以通过可视化观察来调参。
当
k
=
1
k=1
k=1时的
k
k
k近邻算法称为最近邻算法,此时将点
X
X
X分配给特征空间中其最近邻的点的类。即:
C
n
1
n
n
(
X
)
=
Y
(
1
)
C_{n}^{1nn}(X)=Y_{(1)}
Cn1nn(X)=Y(1)
K
K
K值的选择会对
k
k
k近邻法的结果产生重大影响。若
K
K
K值较小,则相当于用较小的邻域中的训练样本进行预测,"学习"的偏差减小。
只有与输入样本较近的训练样本才会对预测起作用,预测结果会对近邻的样本点非常敏感。
若
k
k
k近邻的训练样本点刚好是噪声,则预测会出错。即: 值的减小意味着模型整体变复杂,易发生过拟合。
优点:减少"学习"的偏差。
缺点:增大"学习"的方差(即波动较大)。
若
K
K
K值较大,则相当于用较大的邻域中的训练样本进行预测。
这时输入样本较远的训练样本也会对预测起作用,使预测偏离预期的结果。
K
K
K值增大意味着模型整体变简单。
优点:减少"学习"的方差(即波动较小)。
缺点:增大"学习"的偏差。
应用中,
K
K
K值一般取一个较小的数值。通常采用交叉验证法来选取最优的
K
K
K值,
K
K
K值的选择取决于数据集和问题。较小的
K
K
K值可能导致过度拟合,而较大的
K
K
K值可能导致欠拟合,可以尝试不同的
K
K
K值,以找到特定数据集的最佳值。
(二)距离度量
距离度量是 KNN 算法中用来计算数据点之间相似性的重要组成部分,以下是几种常见的距离度量类型:
1、欧式距离
欧式距离是 KNN 中最广泛使用的距离度量,表示两个数据点在欧几里得空间中的直线距离。
计算公式如下:
d
(
x
,
y
)
=
∑
i
=
1
n
(
x
i
−
y
i
)
2
d(x,y)=\sqrt{\sum_{i=1}^n\left(x_i-y_i\right)^2}
d(x,y)=i=1∑n(xi−yi)2
2、曼哈顿距离
曼哈顿距离(Manhattan Distance)是一种衡量两点之间距离的方式,两个点之间的距离是沿着网格(即水平和垂直方向)的路径总和,而不是像欧几里得距离那样的直线距离。
计算公式如下:
d ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ d(x,y)=\sum_{i=1}^n|x_i-y_i| d(x,y)=i=1∑n∣xi−yi∣
3、闵可夫斯基距离
闵可夫斯基距离是一个广义的距离度量,可以根据参数 𝑝的不同,生成多种常见的距离度量,如曼哈顿距离和欧几里得距离。计算方法是绝对差和的 p 次方根.例如:
如果 p = 1,简化为曼哈顿距离,即绝对差的和。
如果 p = 2,简化为欧几里得距离,即平方差的和的平方根。
距离度量必须满足一些条件:
非负性:任意两点之间的距离不能为负。
同一性:点与自身的距离为零。
对称性:两点之间的距离相同。
三角不等式:两点之间的距离应小于或等于通过第三点的路径之和。
计算公式如下所示:
d
(
x
,
y
)
=
(
∑
i
=
1
n
∣
x
i
−
y
i
∣
p
)
1
p
d(x,y)=\left(\sum_{i=1}^n|x_i-y_i|^p\right)^{\frac1p}
d(x,y)=(i=1∑n∣xi−yi∣p)p1
(三)决策规则
1、分类决策规则
KNN算法的分类决策通常基于多数表决原则,即在新样本的
K
K
K个最近邻中,哪个类别的样本数最多,则预测新样本属于该类别。此外,也可以根据样本与新数据点之间的距离远近进行加权投票,即离新样本越近的邻居样本权重越大,影响力也越大。分类的决策规则可以用经验风险最小化来解释,假设我们要最小化分类中的错误,即最小化0-1 损失函数。这个损失函数可以表示为:
L
=
1
K
∑
x
i
∈
N
K
(
X
)
I
(
y
i
≠
c
m
)
=
1
−
1
K
∑
x
i
∈
N
K
(
X
)
I
(
y
i
=
c
m
)
L=\dfrac{1}{K}\sum_{{{x}}_i\in\mathcal{N}_K({{X}})}I({y}_i\neq c_m)=1-\dfrac{1}{K}\sum_{{{x}}_i\in\mathcal{N}_K({{X}})}I({y}_i=c_m)
L=K1xi∈NK(X)∑I(yi=cm)=1−K1xi∈NK(X)∑I(yi=cm)
其中:
∙
\bullet
∙
X
{{X} }
X是新样本点。
∙
\bullet
∙
N
k
(
x
)
\mathcal{N} _k( {{x} } )
Nk(x)是新样本
∙
\bullet
∙
X
{{X}}
X的 K 个最近邻的集合。
∙
\bullet
∙
y
i
{y} _i
yi是近邻
x
i
{{x}}_i
xi 的实际标签。
∙
\bullet
∙
c
m
c_m
cm是预测的类别,即我们希望找到的多数类别。
∙
\bullet
∙
I
(
y
i
≠
c
m
)
I( {y} _i\neq c_m)
I(yi=cm)是指示函数,表示近邻
x
i
{{x}}_i
xi的实际类别与
c
m
c_m
cm是否相同。
通过这个公式可以看到,损失函数
L
L
L表示的是分类错误的比例。为了最小化损失函数,我们需要找到一个类别
c
m
c_{m}
cm使得近邻中属于该类别的样本数量最大。因此,损失函数最小化等价于多数表决:
c
m
=
arg
max
c
m
∑
x
i
∈
N
k
(
X
)
I
(
y
i
=
c
m
)
c_m=\arg\max_{c_m}\sum_{{{x}}_i\in\mathcal{N}_k({{X}})}I({y}_i=c_m)
cm=argcmmaxxi∈Nk(X)∑I(yi=cm)
2、回归决策规则
对于 KNN 回归,决策规则与分类类似,但在回归问题中,输出是连续值,而不是类别。因此,KNN 回归通常采用均值回归,即新样本的预测值是 K 个最近邻样本的目标值的均值。同样,我们也可以基于样本与新样本点之间的距离进行加权投票,距离越近的邻居对预测的影响力越大。
在回归问题中,我们依然可以使用经验风险最小化的思想,回归中的损失函数一般是均方误差(MSE)。回归问题的损失函数表示为:
L
=
1
K
∑
x
i
∈
N
K
(
X
)
(
y
i
−
y
^
)
2
L=\dfrac{1}{K}\sum_{{{x}}_i\in\mathcal{N}_K({{X}})}({y}_i-\hat{y})^2
L=K1xi∈NK(X)∑(yi−y^)2
其中:
∙
\bullet
∙
y
^
\hat{y}
y^表示新样本的预测值。
∙
\bullet
∙
y
i
{y} _i
yi是近邻点
x
i
{{x}}_i
xi的实际值。
这个损失函数表示新样本X预测值与近邻点实际值之间平方误差的平均值。为了最小化均方误差,最优的预测值
y
^
\hat{y}
y^应该是近邻样本实际值
y
i
{y}_i
yi的平均值,即:
y
^
=
1
K
∑
x
i
∈
N
K
(
X
)
y
i
\hat{y}=\frac{1}{K}\sum_{{{x}}_i\in\mathcal{N}_K({{X}})}{y}_i
y^=K1xi∈NK(X)∑yi
因此,KNN 回归算法的预测值是近邻点的平均值,即均值回归。
总结来说,KNN 算法的分类和回归决策规则虽然任务不同,但核心思想都是通过找到最近的K个邻居,然后根据这些邻居的属性 (类别或值) 进行多数表决或均值计算,从而做出预测。
三、算法优缺点
优点
1、KNN 可用于分类和回归任务,适应性强。
无需训练:算法不需要训练阶段,直接使用数据进行预测,节省计算资源。
2、由于依赖于邻居的多数投票,KNN 对噪声数据具有较强的抗干扰能力,不易受异常值影响。
3、KNN 在小数据集上表现良好,不需要大量数据即可进行预测。
4、不需要对数据做出特定假设,适合多种数据分布。
5、算法直观易懂,便于实现和应用。
缺点
1、正确选择 K 值很重要,影响模型的性能,但不同数据集的最佳 K 值不同。
2、在类别不平衡的数据集中,KNN 可能偏向于多数类别。
3、当特征维度很高时,KNN 的效果会下降,因为距离计算不精确,难以找到有意义的近邻。
四、KNN分类任务实现
(一)数据加载和样本分区
首先,利用文本算子对数据集进行读入,
其次,连接样本分区算子,划分测试集和训练集的比例为2:8
然后接类型算子,设置Feature列和Label列
(二)训练模型
连接KNN分类算子,这里我们将K值设置为3,点击应用并执行,
执行结束后得到KNN模型
(三)模型评估和模型可视化
连接评估算子对模型进行评估
得到训练集和测试集的各评估指标结果,如下所示:
右击模型可以查看模型的模型信息,可以得到模型混淆矩阵、特征重要性等结果
也可以连接二维箱线图,绘制Iris数据集中不同特征(sepal_length, sepal_width、petal_length、petal_width)在不同分类(Species)下的分布图
执行后可以得到绘制结果,如下图所示:
五、KNN回归任务实现
首先,利用文本算子对数据集进行读取
其次,连接样本样本分区算子划分训练集和测试集,训练集和测试集比例为8:2
然后连接类型算子设置Label列和Feature列
(二)训练模型
连接KNN回归算子,设置模型超参数K值为3
右键执行后得到KNN模型
(三)模型评估和模型可视化
连接评估算子,对模型进行评估
得到训练集和测试集评估结果如下图所示:
右击可以查看模型信息,得到模型特征重要性图、实际值—残差值散点图和残差立方图等结果,如下所示:
六、总结
相比传统代码方式,利用Sentosa_DSML社区版完成机器学习算法的流程更加高效和自动化,传统方式需要手动编写大量代码来处理数据清洗、特征工程、模型训练与评估,而在Sentosa_DSML社区版中,这些步骤可以通过可视化界面、预构建模块和自动化流程来简化,有效的降低了技术门槛,非专业开发者也能通过拖拽和配置的方式开发应用,减少了对专业开发人员的依赖。
Sentosa_DSML社区版提供了易于配置的算子流,减少了编写和调试代码的时间,并提升了模型开发和部署的效率,由于应用的结构更清晰,维护和更新变得更加容易,且平台通常会提供版本控制和更新功能,使得应用的持续改进更为便捷。
Sentosa数据科学与机器学习平台(Sentosa_DSML)是力维智联完全自主知识产权的一站式人工智能开发部署应用平台,可同时支持零代码“拖拉拽”与notebook交互式开发,旨在通过低代码方式帮助客户实现AI算法模型的开发、评估与部署,结合完善的数据资产化管理模式与开箱即用的简捷部署支持,可赋能企业、城市、高校、科研院所等不同客户群体,实现AI普惠、化繁为简。
Sentosa_DSML产品由1+3个平台组成,以数据魔方平台(Sentosa_DC)为主管理平台,三大功能平台包括机器学习平台(Sentosa_ML)、深度学习平台(Sentosa_DL)和知识图谱平台(Sentosa_KG)。力维智联凭借本产品入选“全国首批人工智能5A等级企业”,并牵头科技部2030AI项目的重要课题,同时服务于国内多家“双一流”高校及研究院所。
为了回馈社会,矢志推动全民AI普惠的实现,不遗余力地降低AI实践的门槛,让AI的福祉惠及每一个人,共创智慧未来。为广大师生学者、科研工作者及开发者提供学习、交流及实践机器学习技术,我们推出了一款轻量化安装且完全免费的Sentosa_DSML社区版软件,该软件包含了Sentosa数据科学与机器学习平台(Sentosa_DSML)中机器学习平台(Sentosa_ML)的大部分功能,以轻量化一键安装、永久免费使用、视频教学服务和社区论坛交流为主要特点,同样支持“拖拉拽”开发,旨在通过零代码方式帮助客户解决学习、生产和生活中的实际痛点问题。
该软件为基于人工智能的数据分析工具,该工具可以进行数理统计与分析、数据处理与清洗、机器学习建模与预测、可视化图表绘制等功能。为各行各业赋能和数字化转型,应用范围非常广泛,例如以下应用领域:
金融风控:用于信用评分、欺诈检测、风险预警等,降低投资风险;
股票分析:预测股票价格走势,提供投资决策支持;
医疗诊断:辅助医生进行疾病诊断,如癌症检测、疾病预测等;
药物研发:进行分子结构的分析和药物效果预测,帮助加速药物研发过程;
质量控制:检测产品缺陷,提高产品质量;
故障预测:预测设备故障,减少停机时间;
设备维护:通过分析机器的传感器数据,检测设备的异常行为;
环境保护:用于气象预测、大气污染监测、农作物病虫害防止等;
客户服务:通过智能分析用户行为数据,实现个性化客户服务,提升用户体验;
销售分析:基于历史数据分析销量和价格,提供辅助决策;
能源预测:预测电力、天然气等能源的消耗情况,帮助优化能源分配和使用;
智能制造:优化生产流程、预测性维护、智能质量控制等手段,提高生产效率。
欢迎访问Sentosa_DSML社区版的官网https://sentosa.znv.com/,免费下载体验。同时,我们在B站、CSDN、知乎、博客园等平台有技术讨论博客和应用案例分享,欢迎广大数据分析爱好者前往交流讨论。
Sentosa_DSML社区版,重塑数据分析新纪元,以可视化拖拽方式指尖轻触解锁数据深层价值,让数据挖掘与分析跃升至艺术境界,释放思维潜能,专注洞察未来。
社区版官网下载地址:https://sentosa.znv.com/
社区版官方论坛地址:http://sentosaml.znv.com/
B站地址:https://space.bilibili.com/3546633820179281
CSDN地址:https://blog.csdn.net/qq_45586013?spm=1000.2115.3001.5343
知乎地址:https://www.zhihu.com/people/kennethfeng-che/posts
博客园地址:https://www.cnblogs.com/KennethYuen
