knn sklearn

区分KNN & KMEANS

kNN监督学习中的分类算法
k-means则是非监督学习中的聚类算法;
二者* 相同之处* :均利用近邻信息来标注类别。

ps:
聚类指将未标注的样本数据中相似的分为同一类,即“物以类聚,人以群分”。
若输入变量与输出变量均为连续变量,则称为回归;输出变量为有限个离散变量,则称为分类;输入变量与输出变量均为变量序列,则称为标注

kmeans算法:
选取k个初始质心(作为初始cluster);
repeat:
对每个样本点,计算得到距其最近的质心,将其类别标为该质心所对应的cluster;
重新计算k个cluser对应的质心;
until 质心不再发生变化

kmeans缺点:对初始值敏感,需要事前给出k值,特定于某些应用,对噪声敏感
https://www.cnblogs.com/en-heng/p/5173704.html

kNN算法:在训练集中选取离输入的数据点最近的k个邻居,根据这个k个邻居中出现次数最多的类别(最大表决规则),作为该数据点的类别。

knn–sklearn

#导入数据集生成器
from sklearn.datasets import make_blobs

#生成样本数为200,分类为2的数据集
data=make_blobs(n_samples=200,centers=2,random_state=8)

生成的data有x,y,其中x为特征,y为分类类别,centers=2即有两个类别,为0,1。
ps:
scikit中的make_blobs方法常被用来生成聚类算法的测试数据,直观地说,make_blobs会根据用户指定的特征数量、中心点数量、范围等来生成几类数据,这些数据可用于测试聚类算法的效果。
n_samples:数据样本点个数
n_features:数据的维度
centers:数据的中心点
cluster_std:数据集的标准差,浮点数或者浮点数序列.
center_box:数据边界.
shuffle :洗乱,默认值是True
random_state:随机种子

X,y=data

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
x为两个特征,也就是x1,x2,每个特征都有200个数据,可以将x在图中表示出来,横纵轴分别为x1,x2,然后y表示不同的类别,有两种类别为0,1,这两种类别在图中可以用两种不同的颜色表示。如下图:
在这里插入图片描述

import matplotlib.pyplot as plt
%matplotlib inline
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolors='k')

用plt将数据可视化,画出散点图,横纵坐标分别为X的第一,二列。
c就是设置颜色,通过y来设置颜色,因为上面例子里的y为二分类,所以颜色有两种
ps:快捷键shift+tab可以查看参数
在这里插入图片描述

#导入KNN分类器
from sklearn.neighbors import KNeighborsClassifier
import numpy as np

#knn分类器实例化
clf=KNeighborsClassifier()
clf.fit(X,y)

umpy.meshgrid()——生成网格点坐标矩阵。
二维坐标系中,X轴可以取三个值1,2,3, Y轴可以取三个值7,8, 请问可以获得多少个点的坐标?
显而易见是6个:
(1,7)(2,7)(3,7)
(1,8)(2,8)(3,8)

np.meshgrid()就是干这个的!
https://blog.csdn.net/littlehaes/article/details/83543459

#计算x,y轴的取值范围,加一和减一是为了让图上的点能够不在边上展示,即留出一部分边距,让图片更美观
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))

在这里插入图片描述
ravel()将多维数组转换为一维数组在这里插入图片描述
在这里插入图片描述

np.r_是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等。
np.c_是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等。
在这里插入图片描述
上图所示的矩阵的第一列为X的第一种特征x1的取值范围,最大值与最小值之间以0.02为步长,建立图形的x轴的数值,第二列为yy为x2的取值范围,也就是图中y轴的数据值

Z=clf.predict(np.c_[xx.ravel(),yy.ravel()])

在这里插入图片描述

由x轴y轴上的每个点都做预测,可以将图分成两类,如下图
在这里插入图片描述
在这里插入图片描述
plt.pcolormesh的作用在于能够直观表现出分类边界

pcolormesh(X,Y,Z cmap=None, vmin=None, vmax=None)
X,Y:指的是二维网格面每一个点的横纵坐标
Z:(X,Y)坐标处的颜色值
cmap:着色方案

综上:画图如下

#计算x,y轴的取值范围,加一和减一是为了让图上的点能够不在边上展示,即留出一部分边距,让图片更美观
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.pcolormesh(xx,yy,Z,cmap=plt.cm.Pastel1)
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolor='k')
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("Classifier:KNN")

在这里插入图片描述

同理:

data2=make_blobs(n_samples=500,centers=5,random_state=8)

在这里插入图片描述

X2,y2=data2
plt.scatter(X2[:,0],X2[:,1],c=y2,cmap=plt.cm.spring,edgecolor='k')
plt.show()

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值