阅读此post后,我能够解决问题。
我是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])
阅读此post后,我能够解决问题。