本文对scikit-learn中knn相关的类库使用做了一个总结,主要关注于类库调参时的一个经验总结,且该文非常详细地介绍了类的参数含义,这是小编见过最详细的knn类库参数介绍 。
目录
scikit-learn 中knn相关的类库概述
k近邻法和限定半径最近邻法类库参数小结
使用kneighborsclassifier做分类的实例
1. scikit-learn中knn相关的类库概述
在scikit-learn 中,与近邻法这一大类相关的类库都在sklearn.neighbors包之中。knn分类树的类是kneighborsclassifier,knn回归树的类是kneighborsregressor。除此之外,还有knn的扩展,即限定半径最近邻分类树的类radiusneighborsclassifier和限定半径最近邻回归树的类radiusneighborsregressor, 以及最近质心分类算法nearestcentroid。
在这些算法中,knn分类和回归的类参数完全一样。限定半径最近邻法分类和回归的类的主要参数也和knn基本一样。
比较特别是的最近质心分类算法,由于它是直接选择最近质心来分类,所以仅有两个参数,距离度量和特征选择距离阈值,比较简单,因此后面就不再专门讲述最近质心分类算法的参数。
另外几个在sklearn.neighbors包中但不是做分类回归预测的类也值得关注。kneighbors_graph类返回用knn时和每个样本最近的k个训练集样本的位置。radius_neighbors_graph返回用限定半径最近邻法时和每个样本在限定半径内的训练集样本的位置。nearestneighbors是个大杂烩,它即可以返回用knn时和每个样本最近的k个训练集样本的位置,也可以返回用限定半径最近邻法时和每个样本最近的训练集样本的位置,常常用在聚类模型中。
2.k近邻法和限定半径最近邻法类库参数小结
本节对k近邻法和限定半径最近邻法类库参数做一个总结。包括knn分类树的类kneighborsclassifier,knn回归树的类kneighborsregressor, 限定半径最近邻分类树的类radiusneighborsclassifier和限定半径最近邻回归树的类radiusneighborsregressor。这些类的重要参数基本相同,因此我们放到一起讲:
3. 使用kneighborsclassifier做分类的实例
完整代码见github:
https://github.com/ljpzzz/machinelearning/blob/master/classic-machine-learning/knn_classifier.ipynb
3.1 生成随机数据
首先,我们生成我们分类的数据,代码如下:
import numpy as np import matplotlib.pyplot as plt from sklearn.datasets.samples_generator import make_classification # x为样本特征,y为样本类别输出, 共1000个样本,每个样本2个特征,输出有3个类别,没有冗余特征,每个类别一个簇 x, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_clusters_per_class=1, n_classes=3)plt.scatter(x[:, 0], x[:, 1], marker='o', c=y)plt.show()
先看看我们生成的数据图如下。由于是随机生成,如果你也跑这段代码,生成的随机数据分布会不一样。下面是我某次跑出的原始数据图。
接着我们用knn来拟合模型,我们选择k=15,权重为距离远近。代码如下:
from matplotlib.colors import listedcolormap cmap_light = listedcolormap(['#ffaaaa', '#aaffaa', '#aaaaff'])cmap_bold = listedcolormap(['#ff0000', '#00ff00', '#0000ff']) #确认训练集的边界 x_min, x_max = x[:, 0].min() - 1, x[:, 0].max() + 1 y_min, y_max = x[:, 1].min() - 1, x[:, 1].max() + 1 #生成随机数据来做测试集然后预测 xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))z = clf.predict(np.c_[xx.ravel(), yy.ravel()]) # 画出测试集数据 z = z.reshape(xx.shape)plt.figure()plt.pcolormesh(xx, yy, z, cmap=cmap_light) # 也画出所有的训练集数据 plt.scatter(x[:, 0], x[:, 1], c=y, cmap=cmap_bold)plt.xlim(xx.min(), xx.max())plt.ylim(yy.min(), yy.max())plt.title(3-class classification (k = 15, weights = 'distance') )生成的图如下,可以看到大多数数据拟合不错,仅有少量的异常点不在范围内。
华数机器人攻克我国工业机器人核心系统难题,登上《新闻联播》
谷东科技为达意隆开发AR智能维修系统将错误率降至“近零”
镭神智能“终结者1号”¥3999元,终结1550nm激光雷达高价偏见
蒲公英4G工业级路由器R300广泛应用在哪些方面?
重磅亮相TCT!纵维立方新品发布将引爆怎样惊喜
scikit-learn K近邻法类库使用的经验总结
UC3845引脚功能参数
防爆倾角传感器应用于LNG液化天然气安全作业
智慧办公助手司法版和UOS统一操作系统适配成功
2009德国鞋展/德国鞋展/GDS鞋展/德国GDS/杜塞尔多
东芝推出1-Form-B光继电器,以行业最高[1]导通额定电流实现更丰富的应用
疫情是否对视屏监控存在影响
怎么刷固件及ST-LINK V2的使用
英飞凌打造一站式家电解决方案
中国AI初创公司地平线宣布完成6亿美金的B轮融资
换向阀的工作原理及作用
华为nova4自拍极点全面屏设计开启全新的自拍方式
回路电阻测试仪的技术参数及测试步骤
Maxim发布下一代SIMO电源管理IC,尺寸减小50%,电池寿命延长20%
基于FPGA的时序分析设计方案