sklearn实现KNN聚类算法

文章目录

  • 前言
  • 一、什么是KNN算法?
  • 二、使用步骤
    • 1.引入库
  • 用make_blobs创建数据集
    • 2.随机生成1000条特征数为6的数据集
    • 对生成的数据集进行可视化
    • 可视化结果


前言

这里简单介绍一下如何使用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()

sklearn实现KNN聚类算法_第1张图片

#划分训练集与测试集
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)

sklearn实现KNN聚类算法_第2张图片

你可能感兴趣的:(sklearn,K-NN,python,机器学习,聚类算法,数据挖掘,算法)