sklearn实现KNN聚类算法


前言

这里简单介绍一下如何使用sklearn进行k-nn聚类算法的实现。


一、什么是KNN算法?

KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。

KNN算法的思想非常简单:对于任意n维输入向量,分别对应于特征空间中的一个点,输出为该特征向量所对应的类别标签或预测值。
KNN算法是一种非常特别的机器学习算法,因为它没有一般意义上的学习过程。它的工作原理是利用训练数据对特征向量空间进行划分,并将划分结果作为最终算法模型。存在一个样本数据集合,也称作训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。
输入没有标签的数据后,将这个没有标签的数据的每个特征与样本集中的数据对应的特征进行比较,然后提取样本中特征最相近的数据(最近邻)的分类标签。
一般而言,我们只选择样本数据集中前k个最相似的数据,这就是KNN算法中K的由来,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的类别,作为新数据的分类。

二、使用步骤

1.引入库

代码如下(示例):

from sklearn.datasets import make_blobs
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
from sklearn.model_selection import train_test_split
from matplotlib.colors import ListedColormap

用make_blobs创建数据集

2.随机生成1000条特征数为6的数据集

data = make_blobs(n_samples = 1000, centers = 6, random_state = 8)
print(data)

在这里插入图片描述

对生成的数据集进行可视化

X,y = data
import matplotlib.pyplot as plt

%matplotlib inline
plt.scatter(X[:,0],X[:,1],c = y,cmap=plt.cm.spring,edgecolors="k")
plt.show()

在这里插入图片描述

#划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X,y ,random_state=0)
print('X_train:{},X_test:{}'.format(X_train.shape,X_test.shape))
clf = KNeighborsClassifier()#knn分类器实例化
clf.fit(X_train,y_train)#模型训练
print('测试集评估:{:.2f}'.format(clf.score(X_test,y_test)))
print('训练集评估:{:.2f}'.format(clf.score(X_train,y_train)))

可视化结果


#训练结果可视化
camp_light = ListedColormap(['#FFAAAA','#AAFFAA','#AAAAFF'])
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, .02),
                    np.arange(y_min,y_max, .02))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx, yy, Z, cmap=camp_light)
plt.scatter(X[:, 0],X[:, 1],c=y,cmap=plt.cm.spring, edgecolors='k',s=40)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("KNN")
#预测及结果展示
X_new = np.array([[8.88,6.66]])
prediction = clf.predict(X_new)
plt.scatter(8.88,6.66, marker='*',c='red',s=300)

在这里插入图片描述

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值