Методы анализа кластеров после выполнения кластеризации k-средних для набора данных - PullRequest
0 голосов
/ 20 июня 2020

Недавно меня познакомили с методами кластеризации, потому что мне дали задание найти «профили» или «шаблоны» профессоров моего университета на основе опроса, на который они должны были ответить. Я изучал некоторые из доступных вариантов для этого и наткнулся на алгоритм кластеризации k-средних. Поскольку большая часть моих данных является категориальной, мне пришлось выполнить однократное кодирование (преобразование категориальной переменной в векторы с одним столбцом 0-1), и сразу после этого я провел корреляционный анализ в Excel, чтобы исключить некоторые избыточные переменные. После этого я использовал python с библиотеками pandas, numpy, matplotlib и sklearn для выполнения проверки оптимального числа кластеров (метод локтя), а затем, наконец, запустил k-means.

Это код Раньше я импортировал .csv с данными опроса профессоров и запускал метод локтя:

# loads the .csv dataframe (DF) 
df = pd.read_csv('./dados_selecionados.csv', sep=",")

# prints the df
print(df)

#list for the sum of squared distances
SQD = []

#cluster number for testing in elbow method
num_clusters = 10

# runs k-means for each cluster number
for k in range(1,num_clusters+1):
    kmeans = KMeans(n_clusters=k)
    kmeans.fit(df)
    SQD.append(kmeans.inertia_)

# sets up the plot and show it
plt.figure(figsize=(16, 8))
plt.plot(range(1, num_clusters+1), SQD, 'bx-')
plt.xlabel('Número de clusters')
plt.ylabel('Soma dos quadrados das distâncias de cada ponto ao centro de seu cluster')
plt.title('Método do cotovelo')
plt.show()

Это сюжет для метода локтя.

По цифре я решил go с 3 кластерами. После этого я запускаю k-means для 3 кластеров и отправляю данные кластера в .xlsx со следующим кодом:

# runs k-means
kmeans = KMeans(n_clusters=3, max_iter=100,verbose=2)
kmeans.fit(df)

clusters = kmeans.fit_predict(df)

# dict to store clusters data
cluster_dict=[]
for c in clusters:
    cluster_dict.append(c)

# prints the cluster dict
cluster_dict

# adds the cluster information as a column in the df
df['cluster'] = cluster_dict

# saves the df as a .xlsx
df.to_excel("3_clusters_k_means_selecionado.xlsx")

# shows the resulting df
print(df)

# shows each separate cluster
for c in clusters:
    print(df[df['cluster'] == c].head(10))

Мое главное право сомнения заключается в том, как провести разумный анализ данных каждого кластера, чтобы понять как они создавались? Я начал использовать средства для каждой переменной, а также условное форматирование в Excel, чтобы увидеть, появятся ли какие-то шаблоны, и они вроде как действительно появились, но я думаю, что это не лучший вариант.

И я также собираюсь использовать этот пост, чтобы спросить какие-либо рекомендации по всему методу. Возможно, некоторые из моих шагов были не самыми лучшими.

Ответы [ 2 ]

2 голосов
/ 20 июня 2020

Если вы используете scikit изучает функцию kmeans, существует параметр n_init, который указывает количество раз, когда алгоритм kmeans будет запускаться с разными начальными числами центроидов. По умолчанию он установлен на 10 итераций, поэтому по сути он выполняет 10 разных прогонов и выводит один результат с наименьшей суммой квадратов. Еще один параметр, с которым вы можете повозиться, - random_state, который представляет собой начальное число для случайной инициализации центроидов. Это может дать вам лучшую воспроизводимость, потому что вы выбираете номер посевного материала, поэтому, если вы видите оптимальный результат, вы знаете, какое начальное число соответствует этому результату.

0 голосов
/ 21 июня 2020

Вы можете рассмотреть возможность тестирования нескольких различных алгоритмов кластеризации. Вот список некоторых из самых популярных.

https://scikit-learn.org/stable/modules/clustering.html

Я думаю, что сейчас существует более 100 различных алгоритмов кластеризации.

Кроме того, некоторые алгоритмы кластеризации автоматически выбирают для вас оптимальное количество кластеров, поэтому вам не нужно «гадать». Я говорю «догадываюсь», потому что техника силуэта и локтевого сустава поможет вам количественно определить K-число, но вы сами все еще должны делать какие-то предположения.

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