我可以改变什么来获得k-means以其方式对数据进行集群';希望它使用python吗?
我正在做一项任务,要求我们对数据集()执行20维K-Means聚类,并通过将聚类与分类箱进行比较来测试其纯度。几天来,我一直试图找到一个集群和bin范围的组合,以显示有意义的集群,但我没有运气。据我所知,所有的簇都在某个点或另一个点的所有范围内出现 我已经使用python和pandas和sklearn库来尝试实现这一点。根据我们的任务,代表“小时缺勤”的最后一列将从聚类中删除,然后进行分类,以便以后进行比较。我已经使用KMeans方法创建了集群列表,并将它们附加到一个新的数据框中,该数据框只包含ID、缺勤小时数、集群和bined缺勤小时范围。当我看这张表时,我看到很少有可观察的集群发生,因为所有集群都发生在所有范围内。以下是我的表的前几行(按集群排序): 稍后在表格中:我可以改变什么来获得k-means以其方式对数据进行集群';希望它使用python吗?,python,pandas,scikit-learn,cluster-analysis,k-means,Python,Pandas,Scikit Learn,Cluster Analysis,K Means,我正在做一项任务,要求我们对数据集()执行20维K-Means聚类,并通过将聚类与分类箱进行比较来测试其纯度。几天来,我一直试图找到一个集群和bin范围的组合,以显示有意义的集群,但我没有运气。据我所知,所有的簇都在某个点或另一个点的所有范围内出现 我已经使用python和pandas和sklearn库来尝试实现这一点。根据我们的任务,代表“小时缺勤”的最后一列将从聚类中删除,然后进行分类,以便以后进行比较。我已经使用KMeans方法创建了集群列表,并将它们附加到一个新的数据框中,该数据框只包含
242 14 2 4 (-0.1, 2.0]
552 28 2 4 (-0.1, 2.0]
244 18 8 4 (3.0, 9.0]
296 34 3 4 (2.0, 3.0]
297 13 8 4 (3.0, 9.0]
298 3 1 4 (-0.1, 2.0]
299 22 64 4 (15.0, 120.0]
300 5 0 4 (-0.1, 2.0]
301 11 16 4 (15.0, 120.0]
就我所见,集群似乎不像预期的那样集群化。正如我之前所说,我已经做了好几天了,我做了好几个小时的研究,阅读文档,观看youtube视频,阅读了几十篇教程,但我似乎不知道我做错了什么。我尝试了从k=3到k=6的集群,它们有各种大小的箱子。我的导师似乎非常确信,我们应该使用这个数据集找到有效的集群。我不确定我是否遗漏了什么。我的代码如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sys
from sklearn.cluster import KMeans
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
np.set_printoptions(threshold = sys.maxsize)
pd.set_option('display.max_colwidth', -1)
pd.set_option('display.max_rows', -1)
# import dataset as pandas dataframe
absences = pd.read_excel('Absenteeism_at_work.xls')
#set columns to be used for k-means (exclide absentee hours)
xRange = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
x = absences.iloc[:, xRange].values
bins = [-0.1, 2, 3, 9, 15, absences['Absenteeism time in hours'].max()]
absences['Absentee hours bins'] = pd.cut(absences['Absenteeism time in hours'], bins)
#perform clustering
kmeans = KMeans(n_clusters = 5)
kmeans.fit(x)
labels = kmeans.labels_
#print(labels)
#add labels column to original dataframe
absences['Cluster'] = labels
#print relevant columns
columns = ['ID', 'Absenteeism time in hours', 'Cluster', 'Absentee hours bins']
sorted_by_cluster = absences[columns].sort_values(['Cluster'])
print(sorted_by_cluster)
如果你们能提供任何意见,我们将不胜感激。我的理解是,我肯定应该看到垃圾箱和集群之间存在某种关联。提前感谢大家。适当地预处理您的数据 不要包含ID列 不要使用编码列(不要计算ICD代码的差异) 为什么要包括星期几等
考虑一下算法试图优化的功能-这对您的数据有意义吗?您可能需要计算数据,以评估您的群集是否真的表现不佳。谢谢,非常好的资源。我试过这个,得到了1.0,但我不相信我做得对。我知道labels_pred应该是kmeans.labels,但是我应该为labels_true输入什么?我的垃圾箱列表?不包括ID列…我需要使用除最后一列以外的所有列。讲师特别指出我们应该做20维聚类分析。然后你应该教育你的讲师。IDs上的lear squares优化毫无意义。感谢您的输入,但正如我在上面的评论中回答的那样,我明确要求包括除最后一列以外的所有列。如果这真的是预期的,那么这是一个愚蠢的任务,而不是您方面的误解。这确实是预期的,对我来说,这不是一种误解。考虑到我多次向她证实了这一点,而且她擅长数据挖掘,我认为在任务的目标和范围内,这可能没什么大不了的。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sys
from sklearn.cluster import KMeans
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
np.set_printoptions(threshold = sys.maxsize)
pd.set_option('display.max_colwidth', -1)
pd.set_option('display.max_rows', -1)
# import dataset as pandas dataframe
absences = pd.read_excel('Absenteeism_at_work.xls')
#set columns to be used for k-means (exclide absentee hours)
xRange = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
x = absences.iloc[:, xRange].values
bins = [-0.1, 2, 3, 9, 15, absences['Absenteeism time in hours'].max()]
absences['Absentee hours bins'] = pd.cut(absences['Absenteeism time in hours'], bins)
#perform clustering
kmeans = KMeans(n_clusters = 5)
kmeans.fit(x)
labels = kmeans.labels_
#print(labels)
#add labels column to original dataframe
absences['Cluster'] = labels
#print relevant columns
columns = ['ID', 'Absenteeism time in hours', 'Cluster', 'Absentee hours bins']
sorted_by_cluster = absences[columns].sort_values(['Cluster'])
print(sorted_by_cluster)