头歌深入浅出 Python 机器学习:数据可视化

本文介绍了使用Python进行数据可视化的基本步骤,包括散点图展示分类数据集,以及使用KNN分类器实现模型可视化,通过网格化和颜色编码展示预测结果。重点讲解了如何处理数据、创建网格和使用`np.c_`、`ravel()`和`reshape`等NumPy技巧。
摘要由CSDN通过智能技术生成

第1关:Python绘图基础

samples=int(input())

random_state=int(input())

data=make_regression(n_samples=samples,  random_state=random_state)

X, y=data

X=np.mean(X, axis=1)

plt.scatter(X,y)

第2关:将分类数据集可视化

samples=int(input())

random_state=int(input())

data=make_blobs(n_samples=samples,  n_features =4, random_state=random_state)

X, y=data

plt.subplot(231)

plt.scatter(X[:,0],X[:,1],c=y)#y不是yellow,是前面生成的标签值数组y,cmap="viridis"默认值

plt.subplot(232)

plt.scatter(X[:,0],X[:,2],c=y)

plt.subplot(233)

plt.scatter(X[:,0],X[:,3],c=y)

plt.subplot(234)

plt.scatter(X[:,1],X[:,2],c=y)

plt.subplot(235)

plt.scatter(X[:,1],X[:,3],c=y)

plt.subplot(236)

plt.scatter(X[:,2],X[:,3],c=y)

第3关:分类器模型可视化

samples=int(input())

random_state=int(input())

#X为特征数组,y为标签数组

X, y=make_blobs(n_samples=samples, centers=2,  random_state=random_state)

#创建并训练分类器

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           #注释1(解释在下面)

#使用np.meshgrid()方法生成网格坐标矩阵。用于后面绘制一片区域。

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()])      #注释2

z=z.reshape(xx.shape)                                 #注释3

#使用pyplot.pcolormesh()对每个小网格进行绘制。绘制区域

plt.pcolormesh(xx,yy,z)

plt.scatter(X[:,0],X[:,1],c=y, edgecolor='k')#k有引号

#使用pyplot.xlim(),pyplot.ylim()方法限定可视区域。绘制边界。

plt.xlim(xx.min(), xx.max())

plt.ylim(yy.min(), yy.max())

注释1加减一

这里的加1减1,是为了确保网格的范围稍微超出数据点的实际范围。这样产生的xx,yy,在绘制区域,和最后限定可视区域也能更大一些。绘图更清晰。

注释2`np.c_`

是 NumPy 库中的一个快捷方式,用于沿第二个轴(列)堆叠数组。它提供了一种简洁的方法来连接数组,类似于 `np.column_stack`。`np.c_` 提供了便捷的语法,特别是在交互式环境中。使用 `np.c_` 时,只需将要堆叠的数组作为参数传递给它。

需要注意的是,`np.c_` 是按行连接两个矩阵,即把两个矩阵左右相加,要求行数相等。这与 `np.r_` 不同,`np.r_` 是按列连接两个矩阵,即把两个矩阵上下相加,要求列数相等。这种连接方式类似于 pandas 中的 `merge()` 函数。

注释2`ravel()`

在NumPy中,`ravel()`是一个用于将多维数组转换为一维数组的函数。这个函数会返回输入数组的扁平化(flattened)版本,即将多维数组的所有元素按照行优先的顺序排列成一个一维数组。

上文中,`xx.ravel()`和`yy.ravel()`被用于将网格坐标矩阵`xx`和`yy`转换为一维数组,这样它们就可以被传递给`clf.predict()`函数作为输入。`clf.predict()`函数期望的输入是一个二维数组,其中每一行都是一个数据点的特征值。由于`xx`和`yy`是通过`np.meshgrid()`生成的,它们是二维数组,但它们的形状与通常的数据集不同。通过调用`ravel()`,我们能够将它们转换为一个长的一维数组,其中包含了网格上所有点的坐标。

例如,假设`xx`是一个形状为`(m, n)`的二维数组,那么`xx.ravel()`将返回一个形状为`(m*n,)`的一维数组。这样,当我们将`xx.ravel()`和`yy.ravel()`的结果组合起来形成一个新的二维数组(使用`np.c_[xx.ravel(), yy.ravel()]`)时,我们就可以得到一个形状为`(m*n, 2)`的数组,其中每一行都对应网格上的一个点,并包含该点的x和y坐标。

注释3reshape

z=z.reshape(xx.shape)     将z重塑成xx一样的二维数组。

因为pyplot.pcolormesh()最常使用到的三个参数为X, Y以及C,其中XY为待绘制区域的坐标矩阵。而C则为一个代表每个区域所需的颜色的矩阵,它的形状与X(xx)Y(yy)一样。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值