01-KNN(K最临近算法)中涉及到的一些小知识点

一、引例

例子来源于《深入浅出Python机器学习》,这里引用只用于学习,若有侵权,请联系删除

# 导入数据集生成器
from sklearn.datasets import make_blobs
# 导入KNN分类器
from sklearn.neighbors import KNeighborsClassifier
# 导入画图工具
import matplotlib.pyplot as plt
# 导入数据集拆分工具
from sklearn.model_selection import train_test_split
# 生成样本数为200,分类为2的数据集
data = make_blobs(n_samples=200, centers=2, random_state=8)
X,y = data
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolors='k')
plt.show()

在这里插入图片描述

import numpy as np
clf = KNeighborsClassifier()
clf.fit(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
#meshgrid()函数,生成坐标点网格矩阵
xx, yy = np.meshgrid(np.arange(x_min, x_max,0.02), np.arange(y_min, y_max, 0.02))
#ravel()降维,np.c_()按列堆叠即按行拼接,这里把两个坐标轴数组变成了一个网格点矩阵
#np.c_之后的维度是网格点数*2(1列横坐标,1列纵坐标)
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, edgecolors='k')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title("Classifier:KNN")
plt.show()

在这里插入图片描述

二、sklearn的make_blobs方法

在第一段代码中使用到了make_blobs()方法,其语法结构如下:

sklearn.datasets.make_blobs(n_samples=100,
							n_features=2,
							centers=3,
							cluster_std=1.0,
							center_box=(-10.0,10.0),
							shuffle=True,
							random_state=None)

make_blobs函数是为聚类产生数据集,产生一个数据集和相应的标签
n_samples:表示数据样本点个数,默认值100
n_features:是每个样本的特征(或属性)数,也表示数据的维度,默认值是2
centers:表示类别数(标签的种类数),默认值3
cluster_std表示每个类别的方差,例如我们希望生成2类数据,其中一类比另一类具有更大的方差,可以将cluster_std设置为[1.0,3.0],浮点数或者浮点数序列,默认值1.0
center_box:中心确定之后的数据边界,默认值(-10.0, 10.0)
shuffle :将数据进行洗乱,默认值是True
random_state:官网解释是随机生成器的种子,可以固定生成的数据,给定数之后,每次生成的数据集就是固定的。若不给定值,则由于随机性将导致每次运行程序所获得的的结果可能有所不同。在使用数据生成器练习机器学习算法练习或python练习时建议给定数值。
参考链接:
文章1
文章2
此时,对第一段代码中的data = make_blobs(n_samples=200, centers=2, random_state=8)进行分析,意思为生成样本数200,分类为2,随机种子设置为8(固定,便于重复实验)
X,y = data,注意data中既包含了数据,也包含了标签
在这里插入图片描述
其中X为200行,2列的二维数据数据,y为长度的200的一维标签数组
并且X的两列表示2个不同的属性,y代表的是具体的样本(每一行)对应的分类,y是二值0-1变量。

三、matplotlib库中的scatter函数

导入库的常用操作:import matplotlib.pyplot as plt
plt.scatter()用于绘制散点图,其语法结构如下所示:

matplotlib.pyplot.scatter(x, y, 
								s=20, 
								c='b', 
								marker='o', 
								cmap=None, 
								norm=None, 
								vmin=None, 
								vmax=None, 
								alpha=None, 
								linewidths=None, 
								verts=None, 
								hold=None, 
								**kwargs)
  • x,y:表示的是shape大小为(n,)的数组,也就是我们即将绘制散点图的数据点,输入数据。
  • s:表示的是大小,是一个标量或者是一个shape大小为(n,)的数组,可选,默认20。
  • c:表示的是色彩或颜色序列,可选,默认蓝色’b’。但是c不应该是一个单一的RGB数字,也不应该是一个RGBA的序列,因为不便区分。c可以是一个RGB或RGBA二维行数组。如y表示yellow,b表示bule,g表示green,r表red,w表示white
  • marker:MarkerStyle,表示的是标记的样式,可选,默认’o’。
  • cmap:Colormap,标量或者是一个colormap的名字,cmap仅仅当c是一个浮点数数组的时候才使用。如果没有申明就是image.cmap,可选,默认None。
  • norm:Normalize,数据亮度在0-1之间,也是只有c是一个浮点数的数组的时候才使用。如果没有申明,就是默认None。
  • vmin,vmax:标量,当norm存在的时候忽略。用来进行亮度数据的归一化,可选,默认None
  • alpha:标量,0-1之间,可选,默认None。
  • linewidths:也就是标记点的长度,默认None。

参考文章:文章3
其中的cmap这一参数,代表“调色盘”的意思,我个人理解为colors map(颜色地图–>颜色分布图–>调色盘)
第一段代码中plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.spring,edgecolors='k')的plt.cm.spring代表的是一种色系,主要一粉色和黄色为主。edgecolors指定圆点的边的颜色。

四、第二段代码

第二段代码中先是使用KNN分类器对现有数据集进行训练
然后进行可视化
参考文章:文章4
其中numpy.ravel()表示将多维数组转为一维数组:
在这里插入图片描述
numpy.c_[ ]表示将两个数组按列合并

在这里插入图片描述
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
这里实际是将meshgrid得到的坐标矩阵的横坐标和纵坐标进行配对(拼接)得到网格点的完整坐标,然后进行分类预测
在这里插入图片描述

plt.pcolormesh的作用在于能够直观表现出分类边界
参考文章:利用plt.pcolormesh绘制分类图

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值