Почему этот участок плоский? - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь визуализировать Dataframe, который имеет 3 столбца, например:

Recency Frequency   Revenue
    370 14          1717.99
    382 130         144280.48
    383 20          126129.37

Для визуализации в 2d я применяю преобразование PCA и получаю следующее:

sklearn_pca = PCA(n_components = 2)
X1 = sklearn_pca.fit_transform(df1)
X1 = X1[:, ::-1] # flip axes 
kmeans = KMeans(3, random_state=0)
labels = kmeans.fit(X1).predict(X1)
plt.scatter(X1[:, 0], X1[:, 1], c=labels, s=40, cmap='viridis');

enter image description here

Следующий код предназначен для визуализации кластеризации K-средних с данными, но я получаю плоский график.

from scipy.spatial.distance import cdist

def plot_kmeans(kmeans, X, n_clusters=4, rseed=0, ax=None):
    labels = kmeans.fit_predict(X)

    # plot the input data
    ax = ax or plt.gca()
    ax.axis('equal')
    ax.scatter(X[:, 0], X[:, 1], c=labels, s=40, cmap='viridis', zorder=2)

    # plot the representation of the KMeans model
    centers = kmeans.cluster_centers_
    radii = [cdist(X[labels == i], [center]).max()
             for i, center in enumerate(centers)]
    for c, r in zip(centers, radii):
        ax.add_patch(plt.Circle(c, r, fc='#CCCCCC', lw=3, alpha=0.5, zorder=1))

kmeans = KMeans(n_clusters=3, random_state=0)
plot_kmeans(kmeans, X1)

enter image description here

Любая помощь о том, как решить эту проблему будет принята! Заранее спасибо.

1 Ответ

2 голосов
/ 28 января 2020

Ваш график не является «плоским», это просто масштаб на оси Y, который слишком велик, чтобы показать разницу между вашими точками.

Если вы избавитесь от ax.axis('equal') в своем второй код, вы должны вернуть правильные пределы по оси Y (или изменить их, используя ax.set_ylim(-5000,7000)), но, конечно, ваши круги больше не будут круглыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...