Точечная диаграмма одномерных бимодальных данных из sklearn make_blobs () - PullRequest
0 голосов
/ 24 марта 2019
Функция

sklearn make_blobs() может использоваться для создания изотропных гауссовых капель для кластеризации.

Я пытаюсь построить данные, сгенерированные функцией 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 Ответ

1 голос
/ 24 марта 2019

Ваша проблема несколько неясна.

Я пробовал 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() с данными.

По определению для диаграммы рассеяния требуются двумерные данные; из документов :

Диаграмма рассеяния y против x с изменяющимся размером маркера и / или цветом.

в то время как здесь, из-за n_features=1, у нас на самом деле есть только x и нет y .

1D «график рассеяния» на самом деле является линией, и мы можем использовать plot для ее визуализации, как хорошо объяснено в Как построить 1-d данные при заданном значении y с помощью 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

...