[数据挖掘之scikit-learn] sklean.neighbors分类器实例详解

本文详细介绍了K-近邻算法的原理及其在sklearn库中的应用。通过实例演示了KNeighborsClassifier的使用方法,包括参数设置、模型训练、预测及可视化。适合初学者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

K-近邻法是一种分类算法,原理可见《小瓜讲机器学习——分类算法(四)K近邻法算法原理及Python代码实现》。当K=1的时候一般称为最近邻算法。

3.1 sklearn.neighbors

3.1.1 sklearn.neighbors.KNeighborsClassifier
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2
											metric='minkowski', metric_params=None, n_jobs=None, **kwargs)

参数说明:
1.n_neighbors(default=5):K近邻法中的k值,即计算邻域内的样本点数
2.weights(default=‘uniform’):邻域内的样本点的权重系数,可选值‘uniform’、‘distance’、【callable】(function defined by user)
3.algorithm:训练样本点的数据索引方式,有‘auto’、‘ball_tree’、‘KDTree’和‘brute’几种,其中KDTree原理见《小瓜讲机器学习——分类算法(四)K近邻法算法原理及Python代码实现》;
4.leaf_size(default=30):
5.p(default=2):计算距离的次方,p=2相当于欧式距离;
6.metric
7.metric_params
8.n_jobs

方法说明:
1.fit():训练模型;
2.predict():预测测试集;
3.predict_proba():预测测试集中每个样本分属不同类别的概率;
4.kneighbors_graph():获得测试样本的邻域内的训练样本点。

3.1.2 KNeighborsClassifier示例

栗子一
下例子是官网帮助文档中的

from sklearn.neighbors import KNeighborsClassifier

x = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]

neigh = KNeighborsClassifier(n_neighbors=3)
neigh.fit(x, y)
print(neigh.predict([[1.1]]))
print(neigh.predict_proba([[0.9]]))

输出为

[0]
[[0.66666667 0.33333333]]

栗子二
生成随机数

import numpy as np
import matplotlib.pyplot as plt
from  matplotlib.colors import ListedColormap
from sklearn.datasets.samples_generator import make_classification
from sklearn.neighbors import KNeighborsClassifier

# create random samples
feature_X, label_Y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_clusters_per_class=1, n_classes=3)

#plt.scatter(feature_X[:, 0], feature_X[:, 1], marker='o', c=label_Y)
#plt.show()

#train model
clf=KNeighborsClassifier(n_neighbors=5)
clf.fit(feature_X, label_Y)

#data visiualization
cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])

x1_min = feature_X[:, 0].min() - 1
x1_max = feature_X[:, 0].max() + 1
x2_min = feature_X[:, 1].min() - 1
x2_max = feature_X[:, 1].max() + 1

x1, x2 = np.meshgrid(np.arange(x1_min, x1_max, 0.01), np.arange(x2_min, x2_max, 0.01))

label_predict = clf.predict(np.c_[x1.ravel(), x2.ravel()])
label_predict = label_predict.reshape(x1.shape)
plt.figure()
plt.pcolormesh(x1, x2, label_predict, cmap=cmap_light)
plt.scatter(feature_X[:, 0], feature_X[:, 1], c=label_Y, cmap=cmap_bold)
plt.xlim(x1.min(), x1.max())
plt.ylim(x2.min(), x2.max())

plt.show()

结果如下图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的骆驼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值