使用sklearn_pandas查找k均值聚类的最重要单词

问题描述 投票:0回答:1

我是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

sklearn_pandas的DataFrameMapper结合了词袋和伪变量。

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)
labels = kmeans.predict(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产生的功能名称。任何帮助将不胜感激。

我是sklearn的新手。我希望我的代码根据文本列和一些其他类别变量对数据进行k-均值聚类。 CountVectorizer将文本转换为单词袋,然后...

阅读此post后,我能够解决问题。

修改的get_X函数:

def get_X(df):
    mapper = DataFrameMapper(
        [
        ('text_col', import_vectorizer()),
        (['cat_col1', 'cat_col2', 'cat_col3', 'cat_col4'], OneHotEncoder())
       ]
    )

    X = mapper.fit_transform(df)
    X_cols = (
            mapper.features[0][1].get_feature_names()
            + mapper.features[1][1].get_feature_names().tolist()
            )
    return X, X_cols

然后最后运行以下代码。

print("Top terms per cluster:")
order_centroids = kmeans.cluster_centers_.argsort()[:, ::-1]
for i in range(50):
    print("Cluster %d:" % i),
    for ind in order_centroids[i, :10]:
        print(' %s' % X_cols[ind])
python scikit-learn k-means sklearn-pandas
1个回答
0
投票

阅读此post后,我能够解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.