乐趣区

关于机器学习:使用KNN进行分类和回归

个别状况下 k -Nearest Neighbor (KNN)都是用来解决分类的问题,其实 KNN 是一种能够利用于数据分类和预测的简略算法,本文中咱们将它与简略的线性回归进行比拟。

KNN 模型是一个简略的模型,能够用于回归和分类工作。大部分的机器学习算法都是用它的名字来形容的 KNN 也是一样,应用一个空间来示意街坊的度量,度量空间依据汇合成员的特色定义它们之间的间隔。对于每个测试实例,应用邻域来预计响应变量的值。预计能够应用最多 k 个邻域来进行,超参数控制算法的学习形式; 它们不是依据训练数据预计进去的,而是基于一些间隔函数抉择的最近的 k 个街坊。

在本文中,咱们将重点介绍二元分类,为了避免平局 k 通常设置为奇数。与分类工作不同,在回归工作中,特征向量与实值标量而不是标签相关联,KNN 是通过对响应变量均值或加权均值来进行预测。

惰性学习和非参数模型

惰性学习是 KNN 的标记。惰性学习器,也称为基于实例的学习器,这种学习器很少或基本不解决训练数据。与线性回归等踊跃学习的算法不同,KNN 不会预计在训练阶段概括训练数据的模型的参数。惰性学习有利有弊,训练一个踊跃学习的老本可能很高,但应用生成的模型进行预测的老本少。通过将系数乘以特色并增加偏置参数就能够预测简略的后果,计算成本低,预测速度快。然而一个惰性的学习者做出预测的老本是很高的,因为 KNN 预测须要在计算测试实例和训练实例之间的间隔,也就是要拜访所有的训练数据。

参数模型应用固定数量的参数或系数来汇总数据。无论应用多少个训练实例,参数的数量都放弃不变。非参数可能看起来用词不当,因为它并不意味着模型没有参数;相同,它意味着参数的数量随着训练数据的数量而变动。

当不相熟响应变量和解释变量之间的关系时,非参数模型可能会很有用。KNN 就是这种非参数模型,如果实例彼此靠近,则响应变量可能具备类似的值。当训练数据稀缺或曾经晓得这种关系时,带有假如的模型可能会比非参数模型有用。

应用 KNN 进行分类

咱们应用一个简略的问题作为,咱们须要依据一个人的身高和体重来预测他或她的性别的状况。这里有两个标签能够调配给响应变量,这就是为什么这个问题被称为二元分类。下表记录了九个训练实例:

KNN 能够应用的特色没有数量限度,但不能可视化三个以上的特色(这是因为咱们生存在 3 维空间,无奈可视化更多维的数据)。通过创立散点图,能够应用 matplotlib 可视化数据:

从图中能够看到,男性往往比女性更高更重,这一点由 x 标记所示。咱们的教训也与这个察看后果统一。要依据一个人的身高和体重来预测他 / 她的性别。须要定义间隔测量指标:咱们将测量两点之间的欧氏间隔。在二维空间中,计算欧氏间隔如下:

下一步是计算查问实例和所有训练实例之间的间隔:

将 k 设置为 3,咱们将抉择三个最近的实例来进行预测。在上面的脚本中,计算测试和训练实例之间的间隔,并确定每个街坊的最常见性别:

在上面的图中,圆圈示意查问实例,放大的标记示意它最近的三个街坊:

有两个女性街坊和一个性男街坊。所以咱们测试实例的后果是女性。应用 scikit-learn 实现 KNN 分类器,代码如下:

LabelBinarizer 先将字符串转换为整数,fit 办法创立了从标签字符串到整数的映射。输出标签应用 transform 办法进行转换。fit_transform 同时调用 fit 和 transform 作。同时如果训练集和测试集是独立转换的,那么在训练集中男性可能映射为 1,而在测试集中则映射为 0。所以咱们应用训练集的对象进行 fit。而后应用 KNeighborsClassifier 进行预测。

通过将咱们的测试标签与分类器的预测进行比拟,咱们发现一个男性测试实例被谬误地预测为女性。所以咱们的准确率为 75%:

应用 KNN 进行回归

KNN 也能够执行回归剖析。让咱们应用他们的身高和性别来预测他的体重。咱们在下表中列出了咱们的训练和测试集:

应用 KNeighborsRegressor,咱们能够进行回归的工作。这里作为回归工作的两个性能度量是: 均匀绝对误差 (MAE) 和均方误差(MSE):

MAE 的计算方法是将预测误差的绝对值取平均值。MAE 的计算方法如下:

与均匀绝对误差相比,均方偏差 (MSE) 更为罕用。均方误差能够通过对预测误差的平方取平均值来计算,公式如下:

MSE 比 MAE 对异样值的影响更大; 个别状况下一般线性回归使 MSE 的平方根最小化

通过数据的标准化,咱们的模型体现更好。当一个人的性别被蕴含在实例之间的间隔时,模型能够做出更好的预测。

总结

KNN 是咱们在本文中介绍的一个简略但功能强大的分类和回归模型。KNN 模型是一个懈怠的非参数学习模型; 它的参数不是依据训练数据预计进去的。为了预测响应变量,它存储所有训练实例并应用最靠近实例进行测试。在 Sklearn 中咱们能够间接调用内置的办法来应用。

https://avoid.overfit.cn/post/25204154c52341f0bf93622a797597e1

作者:Onepagecode

退出移动版