关于plt.scatter中X[:50,0]与X[:50,1]双参数的含义疑问
搞懂plt.scatter的两个参数为啥缺一不可
嘿,刚入门机器学习遇到这种细节问题太正常了,我来给你掰扯清楚!
首先得明确:plt.scatter是用来画二维散点图的——每个点都需要一个x轴坐标和一个y轴坐标,这俩参数必须同时传,少一个都不行。你之前以为“只传行范围”就行,其实是误解了散点图的本质~
结合你的代码来拆解:
你的X是从数据集中提取了第0列(萼片长度)和第2列(花瓣长度),所以X是一个100行×2列的数组:
- 每一行代表一个样本
- 第0列(
X[:,0])是所有样本的萼片长度(x轴数据) - 第1列(
X[:,1])是所有样本的花瓣长度(y轴数据)
那两条plt.scatter语句的参数就很好理解了:
第一条画setosa的点:
X[:50,0]:前50个setosa样本的萼片长度(作为每个点的x坐标)X[:50,1]:前50个setosa样本的花瓣长度(作为每个点的y坐标)
这样每个setosa样本就对应图上一个(x,y)点,能直观看到这类花的萼片长度和花瓣长度的分布关系。
第二条画versicolor的点:
X[50:100,0]:后50个versicolor样本的萼片长度(x坐标)X[50:100,1]:后50个versicolor样本的花瓣长度(y坐标)
如果你只传X[:50,0],程序会直接报错——它只知道每个点的x位置,却不知道y轴该放在哪,根本没法画出点来。
要是你只想单独看某一个特征(比如只看setosa的花瓣长度),那其实是一维数据,这时候可以把x轴设为样本的索引,比如:
plt.scatter(range(50), X[:50,1], color='red', marker='o', label='setosa')
不过这和你现在代码里对比两个特征的二维散点图是不同的用途啦。
总结一下:你代码里的散点图是在对比两种花的萼片长度和花瓣长度这两个特征的关联,所以必须给每个点提供x(萼片)和y(花瓣)两个坐标,这就是为啥每条scatter都需要两个参数~
内容的提问来源于stack exchange,提问作者ghostinashell
相关产品推荐
相关产品推荐

