Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以改变什么来获得k-means以其方式对数据进行集群';希望它使用python吗?_Python_Pandas_Scikit Learn_Cluster Analysis_K Means - Fatal编程技术网

我可以改变什么来获得k-means以其方式对数据进行集群';希望它使用python吗?

我可以改变什么来获得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方法创建了集群列表,并将它们附加到一个新的数据框中,该数据框只包含

我正在做一项任务,要求我们对数据集()执行20维K-Means聚类,并通过将聚类与分类箱进行比较来测试其纯度。几天来,我一直试图找到一个集群和bin范围的组合,以显示有意义的集群,但我没有运气。据我所知,所有的簇都在某个点或另一个点的所有范围内出现

我已经使用python和pandas和sklearn库来尝试实现这一点。根据我们的任务,代表“小时缺勤”的最后一列将从聚类中删除,然后进行分类,以便以后进行比较。我已经使用KMeans方法创建了集群列表,并将它们附加到一个新的数据框中,该数据框只包含ID、缺勤小时数、集群和bined缺勤小时范围。当我看这张表时,我看到很少有可观察的集群发生,因为所有集群都发生在所有范围内。以下是我的表的前几行(按集群排序):

稍后在表格中:

 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)