一、引例
例子来源于《深入浅出Python机器学习》,这里引用只用于学习,若有侵权,请联系删除
from sklearn.datasets import make_blobs
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
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
xx, yy = np.meshgrid(np.arange(x_min, x_max,0.02), np.arange(y_min, y_max, 0.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, 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绘制分类图
|