Как подготовить таблицу строковых данных pandas для алгоритма кластеризации sklearn?

#python #scikit-learn #data-science #cluster-analysis #k-means

Вопрос:

Группы Роль Пользователь Случаи
ГАС DEFAULT_M ПРОШЛОГОДНИЙ 47251
RSS-канал DEFAULT_R ПРОШЛОГОДНИЙ 27057
РРД DEFAULT_M ДАНАРТ 21251
НБД DEFAULT_R БОНИ 17933
GTS DEFAULT_Q БОНИ 16067

У меня есть около 5000 строк данных, подобных приведенной выше, и я пытаюсь создать алгоритм кластеризации, чтобы узнать, какие пользователи принадлежат к определенной группе. Это создаст кластеры групп, содержащих пользователей. Когда я попытался использовать библиотеку sklearn для создания алгоритма кластеризации, к сожалению, она говорит мне, что данные должны быть int или float. Он не может найти расстояние между этими словами. Есть ли способ, которым я все еще могу использовать алгоритм k-средних sklearn для этих строковых фреймов данных для кластеризации групп пользователей? Другим способом было бы преобразовать группы и пользователей в числа, а это займет много времени, и мне нужно вести словарь групп и пользователей. Если бы я сделал это, есть ли более простой способ преобразовать группы и пользователей в числа, чтобы алгоритм кластеризации мог интерпретировать? Заранее спасибо за вашу помощьГрафик кластеризации

Комментарии:

1. Что вы пробовали, основываясь на своих собственных исследованиях? В Sklearn есть целый раздел документов для работы с текстовыми данными

2. Я читал это, но не нашел ничего полезного. Потому что я не пытаюсь подсчитать случаи появления определенного слова в тексте или интерпретировать слово и понять, что за ним стоит. Все, что я хочу, — это рассматривать столбцы групп и пользователей как переменные, чтобы я мог использовать их для кластеризации. Если вы нашли какие-либо другие источники, я был бы рад просмотреть их. Как я уже упоминал выше, я исследовал sklearn и другие библиотеки для кластеризации, но все они предназначены для анализа настроений, появления текста в тексте и т. Д. Не смог найти ничего полезного или не знаю, как это оценить.

3. Я не вижу, как вы можете найти кластер групп, если группа уже является функцией в ваших данных.

Ответ №1:

Насколько я знаю, каждый алгоритм работает с цифрами или преобразует текст в цифры, а затем выполняет свою работу. Может быть, ты сможешь попробовать это.

 import numpy as np
from sklearn.cluster import AffinityPropagation
import distance
    
words = 'XYZ,LDPELDKSL,DFKLKSLFD,ABC,DLFKFKDLD,XYZ,LDPELDKSL,DFKLKSLFD,ABC,DLFKFKDLD,XYZ,LDPELDKSL,XYZ,LDPELDKSL,DFKLKSLFD,ABC,DLFKFKDLD,XYZ,LDPELDKSL,DFKLKSLFD,ABC,DLFKFKDLD,XYZ,LDPELDKSL'.split(',') #Replace this line
words = np.asarray(words) #So that indexing with a list will work
lev_similarity = -1*np.array([[distance.levenshtein(w1,w2) for w1 in words] for w2 in words])

affprop = AffinityPropagation(affinity="precomputed", damping=0.5)
affprop.fit(lev_similarity)
for cluster_id in np.unique(affprop.labels_):
    exemplar = words[affprop.cluster_centers_indices_[cluster_id]]
    cluster = np.unique(words[np.nonzero(affprop.labels_==cluster_id)])
    cluster_str = ", ".join(cluster)
    print(" - *%s:* %s" % (exemplar, cluster_str))
 

Результат:

 - *LDPELDKSL:* LDPELDKSL
 - *DFKLKSLFD:* DFKLKSLFD
 - *XYZ:* ABC, XYZ
 - *DLFKFKDLD:* DLFKFKDLD
 

Или…

 from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.metrics import adjusted_rand_score

documents = ["This little kitty came to play when I was eating at a restaurant.",
             "Merley has the best squooshy kitten belly.",
             "Google Translate app is incredible.",
             "If you open 100 tab in google you get a smiley face.",
             "Best cat photo I've ever taken.",
             "Climbing ninja cat.",
             "Impressed with google map feedback.",
             "Key promoter extension for Google Chrome."]

vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(documents)

true_k = 8
model = KMeans(n_clusters=true_k, init='k-means  ', max_iter=1000, n_init=1)
model.fit(X)

print("Top terms per cluster:")
order_centroids = model.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i in range(true_k):
    print("Cluster %d:" % i),
    for ind in order_centroids[i, :10]:
        print(' %s' % terms[ind]),
    print

print("n")
print("Prediction")

Y = vectorizer.transform(["chrome browser to open."])
prediction = model.predict(Y)
print(prediction)

Y = vectorizer.transform(["My cat is hungry."])
prediction = model.predict(Y)
print(prediction)
 

Результат…Лучшие условия для каждого кластера:

 Cluster 0:
 kitten
 belly
 squooshy
 merley
 best
 eating
 google
 feedback
 face
 extension
Cluster 1:
 impressed
 map
 feedback
 google
 ve
 eating
 face
 extension
 climbing
 key
Cluster 2:
 climbing
 ninja
 cat
 eating
 impressed
 google
 feedback
 face
 extension
 ve
Cluster 3:
 eating
 kitty
 little
 came
 restaurant
 play
 ve
 feedback
 face
 extension
Cluster 4:
 100
 open
 tab
 smiley
 face
 google
 feedback
 extension
 eating
 climbing
Cluster 5:
 chrome
 extension
 promoter
 key
 google
 eating
 impressed
 feedback
 face
 ve
Cluster 6:
 translate
 app
 incredible
 google
 eating
 impressed
 feedback
 face
 extension
 ve
Cluster 7:
 ve
 taken
 photo
 best
 cat
 eating
 google
 feedback
 face
 extension
 

Комментарии:

1. Это здорово, спасибо! Это дало мне направление, в котором я должен был идти.