matplotlib 如何对训练示例进行分类并在下面给出的代码中绘制它们以及代码如何工作?

How does matplotlib classify the training examples and plot them in the code given below and how does the code work?

这是一个基于分类的逻辑回归问题。 X 由以下形式的数据组成:

array([[34.62365962, 78.02469282],
       [30.28671077, 43.89499752],
       [35.84740877, 72.90219803]
       .......

其中第一列是第一次考试的分数,第二列是第二次考试的分数。

y是一个数据,其中'1'表示学生进入大学,'0'表示学生没有进入大学(根据X中给出的第一次和第二次考试成绩)。

array([0., 0., 0., 1., 1., 0., 1., 1., 1., 1., 0., 0., 1., 1., 0., 1., 1.,
       0., 1., 1., 0., 1., 0., 0., 1., 1., 1., 0., 0., 0., 1., 1., 0., 1.,
       0., 0., 0., 1., 0., 0., 1., 0., 1., 0., 0., 0., 1., 1., 1., 1., 1.,
       1., 1., 0.

绘制以下数据的代码是:

pos = y == 1
neg = y == 0
# Plot Examples
pyplot.plot(X[pos, 0], X[pos, 1], '*', lw=2, ms=10)
pyplot.plot(X[neg, 0], X[neg, 1], 'o', mfc='y', ms=8, mec='k', mew=1)

我不明白 pos = y == 1neg = y == 0 如何将数据绘制为 X[pos, 0], X[pos, 1]X[neg, 0], X[neg, 1] 给出的 x 轴和 y 轴值

== 创建一个布尔数组,即 TrueFalse 的数组,例如:

import numpy as np
y = np.array([1,0,1,1,0,0])
print(y==1) # [True,False,True,True,False,False]

然后您可以使用这个 True/False 数组(也称为“掩码”)来过滤您的数组。比如说你有以下内容:

y = np.array([0.5,1,-3,4,0])
pos = y>0 #[True,True,False,True,False]

如果您随后使用掩码“切片”,它只会 returns 数组为 True 的值:

y = np.array([0.5,1,-3,4,0])
pos = y>0 #[True,True,False,True,False]
print(y[pos]) #[0.5,1,4]

考虑到这一点,您可以看到

pos = y==1
neg = y==0

创建两个面具;一个代表所有y等于1的地方,一个代表所有y等于0的地方

由于 X 的第一行对应于 y 的第一行,我们可以使用掩码对 Xy 进行切片,例如

pos = y==1
neg = y==0

X_pos = X[pos] #All the x-values where y==1
y_pos = y[pos] # All the y-values where y==1

X_neg = X[neg] #All the x-values where y==0
y_neg = y[neg] # All the y-values where y==0

然后你可以绘制这两组。

他们仅通过使用

就隐含地完成了它
X[pos,0] #correponds to first column in our X_pos above
X[neg,0] #correponds to first column in our X_neg above

我不确定我是否理解问题,但我会尝试回答..

pos = (y == 1)

(我添加了括号,这样会更清楚)这里实际发生的是 pos 被分配了这种形式的东西:

[True, True, False, .....]

其中每个 True 对应于 y 具有 1 的索引,同样适用于 neg 仅适用于 0.

现在当你使用 X[pos, 0] 时,它 returns 一个数组只包含 X 的行,而 posTrue 中有一个值相应的索引,因此 - X[pos, 0] 是通过学生的 X 轴, X[pos, 1] 是通过学生的 Y 轴