Я работаю над заданием, которое требует от нас 20-мерной кластеризации K-средних для набора данных ( набор данных здесь ) и для проверки его чистоты путем сравнения кластеров с бункеры классификации. В течение нескольких дней я пытался найти комбинацию кластеров и диапазонов бинов, которые показывают значительную кластеризацию, но мне не повезло. Из того, что я могу сказать, все кластеры появляются во всех диапазонах в той или иной точке.
Я использовал библиотеки python, pandas и sklearn для достижения этой цели. Согласно нашему заданию, последний столбец, представляющий «прогулы в часах», должен быть исключен из кластеризации, а затем скопирован для последующего сравнения. Я создал список кластеров, используя метод KMeans, и добавил их к новому фрейму данных, содержащему только идентификатор, количество отсутствующих часов, кластер и диапазоны отсутствующих часов в бинарном формате. Когда я смотрю на эту таблицу, я вижу очень мало наблюдаемой кластеризации, поскольку все кластеры встречаются во всех диапазонах. Вот первые несколько строк моей таблицы (отсортированные по кластерам):
ID Absenteeism time in hours Cluster Absentee hours bins
0 11 4 0 (3.0, 9.0]
415 13 4 0 (3.0, 9.0]
414 18 4 0 (3.0, 9.0]
413 20 3 0 (2.0, 3.0]
412 3 4 0 (3.0, 9.0]
411 24 2 0 (-0.1, 2.0]
410 20 8 0 (3.0, 9.0]
409 11 8 0 (3.0, 9.0]
408 3 8 0 (3.0, 9.0]
416 33 4 0 (3.0, 9.0]
407 36 0 0 (-0.1, 2.0]
405 1 0 0 (-0.1, 2.0]
404 36 8 0 (3.0, 9.0]
403 36 3 0 (2.0, 3.0]
402 36 2 0 (-0.1, 2.0]
401 1 8 0 (3.0, 9.0]
400 13 0 0 (-0.1, 2.0]
399 10 8 0 (3.0, 9.0]
398 3 16 0 (15.0, 120.0]
406 24 0 0 (-0.1, 2.0]
397 23 8 0 (3.0, 9.0]
и далее в таблице:
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)
Любой вклад, который вы могли бы предоставить, был бы очень признателен. Насколько я понимаю, я определенно должен видеть какую-то корреляцию между мусорными ведрами и кластерами. Спасибо всем заранее.