【问题标题】:Explanation of the scatter method in python (for machine learning)python中scatter方法的解释(机器学习用)
【发布时间】:2023-03-30 07:40:01
【问题描述】:

我是 python 和机器学习的新手,作为我大学课程的一部分,我们正在使用 numpy、matplotlib 和 sci-kit learn。好的,我有一个问题。下面的代码工作得很好,我的问题是我真的不明白发生了什么。所以对于这个:

%matplotlib inline
X=iris.data
Y=iris.target
#first two features are sepal length and sepal width
plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')

我试图检查文档,但对我来说并没有任何意义。 在这里,我想知道 plt.scatter() 中的参数是什么意思。不是很明白,c=Y是什么意思,cmap是什么为什么会有两个X坐标?

至于接下来的代码:

%matplotlib inline

#here's also how to plot in 3d:
from mpl_toolkits.mplot3d import Axes3D #

#create a new figure
fig = plt.figure(figsize=(5,5))


#this creates a 1x1 grid (just one figure), and now we are plotting
#subfigure 1 (this is what 111 means)
ax = fig.add_subplot(111, projection='3d') 

#plot first three features in a 3d Plot.  Using : means that we take all    
#elements in the correspond array dimension
ax.scatter(X[:, 0], X[:, 1], X[:, 2],c=Y)

这里我想知道的是:

fig.add_subplot(111, 投影 = '3d')。这第三个 1 对我来说真的没有意义。我理解 1x1 网格,但我不理解“现在我们正在绘制子图 1”。

还有:

ax.scatter() 参数在这里也没有任何意义。为什么格式与上面的格式不同?为什么有三个 X 而没有 cmap?我真的不明白。为什么他们不使用 plt.scatter()?

【问题讨论】:

  • X 是一个变量,而不是参数的名称。它是一个至少包含三列的数组。第一个用作绘图的 x 变量。第二列用作绘图的 y 变量。第三列用于缩放标记的大小。标记的颜色是根据分配给Y 变量的数据设置的。

标签: python numpy matplotlib machine-learning scikit-learn


【解决方案1】:

让我们逐步解决您的问题。

首先,“为什么有两个 X 坐标?”scatter 函数 (http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.scatter) 采用 xy 坐标作为标记;在这种情况下,xy 坐标都存储在一个名为X 的二维数组中:X[:,0] 只是x 坐标,X[:,1]y 坐标。 “c=Y 是什么意思?”:标记颜色有多种选择:

c 可以是单个颜色格式字符串,也可以是长度为 N 的颜色规范序列,或者是使用 cmap 和通过 kwargs 指定的规范映射到颜色的 N 数字序列(见下文)。请注意,c 不应是单个数字 RGB 或 RGBA 序列,因为它与要进行颜色映射的值数组无法区分。 c 可以是一个二维数组,其中的行是 RGB 或 RGBA,但是,包括为所有点指定相同颜色的单行的情况。

所以在这种情况下,相关部分似乎是“使用 cmap 将 N 个数字映射到颜色”,即您提供数据值,scatter 使用某种颜色为标记着色地图 (http://matplotlib.org/examples/color/colormaps_reference.html)。

“fig.add_subplot(111, projection = '3d')。这第三个 1 对我来说真的没有意义。”add_subplot 在网格上添加子图,其中111(或者让我们使用322 作为更清晰的示例)表示具有 3 行 2 列的网格,并且您使用网格上的第二个位置(即第 0 行、第 1 列)作为当前子图。所以subplot(111) 只是表示一个具有 1 行 1 列子图的图形,而您正在使用(真是令人惊讶……)第一个也是唯一的位置。

“为什么有三个 X 而没有 cmap?”:您首先导入 mpl_toolkits.mplot3d,然后将 projection='3d' 指定为 add_subplot,因此您现在正在创建 3D scatter 图,这需要指定标记的xyz坐标。

【讨论】:

    【解决方案2】:
    plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired)
    

    是一个二维图,颜色c=Y表示(x,y)-->(X[:,0],X[:,1])坐标点属于哪朵花。 Describes the scatter function in detail. cmap 参数 plt.cm.Paired 表示颜色图正在使用整个可用颜色范围。如果你不使用浮点数据,那么这个论点是多余的;如果没有它进行绘图会发生什么?

    ax = fig.add_subplot(111, projection='3d') 
    

    111,这里指的是 1x1 数组中的第一个元素;这在这里似乎不是很有用,但是当您创建具有多个子图的图时会变得很有用。

    ax.scatter(X[:, 0], X[:, 1], X[:, 2],c=Y)
    

    在这里,您正在绘制属性 (x,y,z) 的 3 维图 --> (X[:,0],X[:,1],X[:,2]) 而 Y 又是根据它们的真实类别为点分配颜色。

    【讨论】:

      猜你喜欢
      • 2015-10-23
      • 2015-11-05
      • 2014-01-09
      • 2017-03-03
      • 2019-05-14
      • 2019-07-26
      • 2020-08-27
      • 2018-05-03
      • 2017-06-12
      相关资源
      最近更新 更多