Я новичок в sklearn. Я хочу, чтобы мой код группировал данные с помощью кластеризации k-средних на основе текстового столбца и некоторых дополнительных категориальных переменных. CountVectorizer преобразует текст в набор слов, а OneHotEncoder преобразует категориальные переменные в наборы фиктивных переменных.
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
from sklearn.feature_extraction.text import CountVectorizer
from sklearn_pandas import DataFrameMapper
from sklearn.cluster import MiniBatchKMeans
def import_vectorizer():
vectorizer = CountVectorizer(lowercase = True,
ngram_range = (1,1),
min_df = .00005,
max_df = .01)
return vectorizer
DataFrameMapper из sklearn_ pandas объединяет набор слов с фиктивными переменными.
def get_X(df):
mapper = DataFrameMapper(
[
('text_col', import_vectorizer()),
(['cat_col1', 'cat_col2', 'cat_col3', 'cat_col4'], OneHotEncoder())
]
)
return mapper.fit_transform(df)
Для прогнозирования групп я запускаю
df = pd.read_json(mydata.json)
X = get_X(df)
kmeans = MiniBatchKMeans(n_clusters=50)
kmeans.fit(X)
Теперь я хочу увидеть, какие функции являются наиболее важными для прогнозирования групп. Есть сообщения по строкам
print("Top terms per cluster:")
order_centroids = kmeans.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i in range(50):
print("Cluster %d:" % i),
for ind in order_centroids[i, :10]:
print(' %s' % terms[ind])
Однако в данном случае это не работает, поскольку
terms = vectorizer.get_feature_names()
будет содержать только имена функций из набора слов, а не созданные. пользователя OneHotEncoder. Любая помощь будет принята с благодарностью.