如何在 python 中对 14 列数据框中的 8 列进行 KMeans 聚类?

Posted

技术标签:

【中文标题】如何在 python 中对 14 列数据框中的 8 列进行 KMeans 聚类?【英文标题】:How can I do KMeans clustering in python for 8 columns in a data-frame of 14 columns? 【发布时间】:2018-11-28 12:10:05 【问题描述】:

我正在尝试对给我的数据框进行聚类。它有 14 列。如何对其中的 8 个进行聚类?

以下是我找到并遵循的代码。

肘法:

可视化

# K-Means Clustering

# importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# importing tha customer Expenses Invoices dataset with pandas
dataset=pd.read_csv('Expense_Invoice.csv')
X=dataset.iloc[: , [3,2]].values

# Using the elbow method to find  the optimal number of clusters
from sklearn.cluster import KMeans
wcss = []
for i in range(1, 11):
  kmeans=KMeans(n_clusters=i, init='k-means++', max_iter= 300, n_init= 10, random_state= 0)
  kmeans.fit(X)
  wcss.append(kmeans.inertia_)
plt.plot(range(1, 11),wcss)
plt.title('The Elbow Method')
plt.xlabel('Number of clusters K')
plt.ylabel('Average Within-Cluster distance to Centroid (WCSS)')  
plt.show()

# Applying k-means to the mall dataset
kmeans=KMeans(n_clusters=3, init='k-means++', max_iter= 300, n_init= 10, random_state= 0)
y_kmeans=kmeans.fit_predict(X)

# Visualizing the clusters
plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s = 100, c = 'red', label='Careful(c1)')
plt.scatter(X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], s = 100, c = 'green', label='Standard(c2)')
plt.scatter(X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], s = 100, c = 'blue', label='Target(c3)')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 250, c = 'yellow', 
            label='Centroids')
plt.title('Clusters of customer Invoices & Expenses')
plt.xlabel('Total Invoices ')
plt.ylabel('Total Expenses')
plt.legend()
plt.show()

这非常有效,但这仅适用于两列(变量),我希望它用于 8 列。但我不明白怎么做?

【问题讨论】:

您没有包含代码。当你说你不能这样做时,你遇到的具体问题是什么? 请看附图。 亲爱的 Rup,请看一下,这里是代码。 请注意,k-means 对属性缩放和倾斜数据非常敏感。所以在“发票”等属性上使用它可能没有意义。 【参考方案1】:

使用X=dataset.iloc[: , [3,2]].values,您就是第 4 列和第 3 列。 KMeans 对您选择的所有列执行聚类。

因此,您需要根据需要更改 X=dataset.iloc[: , [3,2]]。例如,使用数据集的前 8 列:X=dataset.iloc[:, 0:8].values

查看 pandas 文档以了解如何在数据框中选择数据的更多选项:https://pandas.pydata.org/pandas-docs/stable/indexing.html

请记住,您无法像以前那样在 2D 散点图中可视化您的集群。

【讨论】:

效果很好,我继续前进。我使用 PCA 方法来可视化数据,甚至尝试过 tSNE,但无法理解我应该使用哪一种! 它有所帮助,但我无法将数据可视化。我该怎么办?

以上是关于如何在 python 中对 14 列数据框中的 8 列进行 KMeans 聚类?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pyspark 中对 spark 数据框中的多列求和?

如何同时对熊猫数据框中的列进行排序[重复]

Python - 在熊猫数据框中对列表中的行进行分组

如何在R中的数据框中找到列的最大值?

如何在数据透视后对python中数据框中的索引列以外的列进行排序

如何在 Spark 中对包含日期和时间值的列进行排序?