gpt4 book ai didi

python - 使用特征哈希进行聚类

转载 作者:太空宇宙 更新时间:2023-11-03 15:57:27 24 4
gpt4 key购买 nike

我必须对一些 json 格式的文档进行聚类。我想修改特征散列以减少维度。首先,我的意见如下:

doc_a = { "category": "election, law, politics, civil, government",
"expertise": "political science, civics, republican"
}

doc_b = { "category": "Computers, optimization",
"expertise": "computer science, graphs, optimization"
}
doc_c = { "category": "Election, voting",
"expertise": "political science, republican"
}
doc_d = { "category": "Engineering, Software, computers",
"expertise": "computers, programming, optimization"
}
doc_e = { "category": "International trade, politics",
"expertise": "civics, political activist"
}

现在,我该如何使用特征哈希,为每个文档创建向量,然后计算相似度并创建集群?读完http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.FeatureHasher.html后我有点失落。 不确定我是否必须使用“dict”或将我的数据转换为一些整数,然后使用“pair”作为“input_type”到我的 featureHasher。我应该如何解释 featureHasher 的输出?例如,示例 http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.FeatureHasher.html输出一个 numpy 数组。

In [1]: from sklearn.feature_extraction import FeatureHasher

In [2]: hasher = FeatureHasher(n_features=10, non_negative=True, input_type='pair')

In [3]: x_new = hasher.fit_transform([[('a', 1), ('b', 2)], [('a', 0), ('c', 5)]])

In [4]: x_new.toarray()
Out[4]:
array([[ 1., 2., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 5., 0., 0.]])

In [5]:

我认为行是文档,列值是..?比如说,如果我想对这些向量进行聚类或查找相似性(使用 Cosine 或 Jaccard),不确定是否必须进行逐项比较?

预期输出:doc_a、doc_c 和 doc_e 应位于一个集群中,其余部分位于另一个集群中。

谢谢!

最佳答案

如果您使用 HashingVectorizer 而不是 FeatureHasher 来解决此问题,您将使事情变得更容易。 HashingVectorizer 负责对输入数据进行标记,并可以接受字符串列表。

该问题的主要挑战是您实际上有两种文本特征:categoryexpertise。这种情况下的技巧是为这两个特征安装哈希向量化器,然后组合输出:

from sklearn.feature_extraction.text import HashingVectorizer
from scipy.sparse import hstack
from sklearn.cluster import KMeans

docs = [doc_a,doc_b, doc_c, doc_d, doc_e]

# vectorize both fields separately
category_vectorizer = HashingVectorizer()
Xc = category_vectorizer.fit_transform([doc["category"] for doc in docs])

expertise_vectorizer = HashingVectorizer()
Xe = expertise_vectorizer.fit_transform([doc["expertise"] for doc in docs])

# combine the features into a single data set
X = hstack((Xc,Xe))
print("X: %d x %d" % X.shape)
print("Xc: %d x %d" % Xc.shape)
print("Xe: %d x %d" % Xe.shape)

# fit a cluster model
km = KMeans(n_clusters=2)

# predict the cluster
for k,v in zip(["a","b","c","d", "e"], km.fit_predict(X)):
print("%s is in cluster %d" % (k,v))

关于python - 使用特征哈希进行聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40664072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com