来自sklearn make_blobs()的一维双峰数据的散点图

时间:2019-03-24 07:10:37

标签: python matplotlib scikit-learn scatter-plot

sklearn make_blobs()函数可用于生成各向同性的高斯Blob进行聚类。

我正在尝试绘制make_blobs()函数生成的数据。

import numpy as np
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

arr, blob_labels = make_blobs(n_samples=1000, n_features=1, 
                                centers=1, random_state=1)
a = plt.hist(arr, bins=np.arange(int(np.min(arr))-1,int(np.max(arr))+1,0.5), width = 0.3)

这段代码给出了正态分布图,这很有意义。

enter image description here

blobs, blob_labels = make_blobs(n_samples=1000, n_features=2, 
                                centers=2, random_state=1)

a = plt.scatter(blobs[:, 0], blobs[:, 1], c=blob_labels)

这段代码给出了一个2簇图,这也很有意义。

enter image description here

我想知道是否有一种方法可以用参数make_blobs()绘制由centers=2 n_features=1函数生成的数据。

arr, blob_labels = make_blobs(n_samples=1000, n_features=1, 
                                centers=2, random_state=1)

我尝试过plt.hist(),它给出了另一个正态分布图。

我不知道如何对数据使用plt.scatter()

我无法想象情节的样子。

1 个答案:

答案 0 :(得分:1)

您的问题尚不清楚。

  

我尝试过plt.hist(),它给出了另一个正态分布图。

嗯,不完全是;它给出了一个双峰高斯混合图:

arr, blob_labels = make_blobs(n_samples=1000, n_features=1, 
                                centers=2, random_state=1)

a = plt.hist(arr, bins=np.arange(int(np.min(arr))-1,int(np.max(arr))+1,0.5), width = 0.3)

enter image description here

符合预期,因为我们现在有centers=2

  

我不知道如何对数据使用plt.scatter()

根据定义,散点图需要2D数据;来自docs

  

y x 的散点图,其标记大小和/或颜色都不同。

在这里,由于n_features=1,我们实际上只有 x 而没有 y

一维“散点图”实际上是一条线,我们可以使用plot对其进行可视化,正如How to plot 1-d data at given y-value with pylab中很好地解释的那样;在您的情况下:

val = 0. # this is the value where you want the data to appear on the y-axis.
a = plt.plot(arr, np.zeros_like(arr) + val, 'x')

enter image description here

我们当然应该记住,纵轴只是可视化的一个方便,对于没有 y 值的数据什么也没说。

是否要为每个中心使用不同的颜色和/或标记?

val = 0. # this is the value where you want the data to appear on the y-axis.
plt.plot(arr[blob_labels==0], np.zeros_like(arr[blob_labels==0]) + val, 'x', color='y')
plt.plot(arr[blob_labels==1], np.zeros_like(arr[blob_labels==1]) + val, '+', color='b')
plt.show()

enter image description here

对于较大的样本,情况开始变得有些有趣;请注意n_samples=10000的重叠部分:

enter image description here