- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我必须对一些 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
负责对输入数据进行标记,并可以接受字符串列表。
该问题的主要挑战是您实际上有两种文本特征:category
和expertise
。这种情况下的技巧是为这两个特征安装哈希向量化器,然后组合输出:
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/
我是一名优秀的程序员,十分优秀!