在初次了解学习有关基本机器学习模型过程中,看到自己无处学习无处了解的窘迫,虽然我知道,在没有学校教学支撑的过程中信息闭塞是尤其可怕,很多东西都是需要付费的。我想通过我自己学习过程获得的东西在此做一简单分享。
KNN算法数学原理
如果一个样本在特征空间中的K个最相似(即特征空间中最邻近)的样本(下图中的三个区块)中的大多数属于某一个类别,则该样本也属于这个类别。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。详情如下图:
(图片来源于百度百科)
那么在上述算法描述中提出的近邻是如何实现的呢?据此,我们L2范数,即欧氏距离
除此之外,KNN算法中的超参数k代表着在进行分类时所考虑的最近邻样本的数量。在KNN算法中,当需要对一个新的数据点进行分类时,算法会找到最接近该数据点的k个邻居样本,并通过它们的类别来决定新数据点的分类。因此,超参数k的选择会直接影响到算法的性能和分类结果。
一般来说,选择合适的k值对KNN算法的性能至关重要。如果选择一个较小的k值,模型会更加复杂,容易受到噪声的影响,导致过拟合;而选择一个较大的k值则可能忽略了样本局部的特征,导致欠拟合。在实际应用中,通常通过学习曲线等方法来选择最优的k值,以达到最好的分类效果。
KNN算法应用
我们使用python语言进行案例示范:
我们对鸢尾花数据集提取了特征数据以及目标数据,观察数据,没有较大的数据波动,没有字符型数据,据此不考虑特征工程。
很明显K值的取值影响分类效果
那么如何解决这个问题呢?据此,引入学习曲线:
运行结果如下:
在图中可以清晰的找到最优k值,或者,可以通过numpy数组获取score最大时的下标。
至此,大致的算法模型训练好了。我们可以通过
knn.predict()
来进行其他数据的预测。