我必須將一些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後,我有點失落。 不知道如果我必須使用「字典」或轉換我的數據有一些整數,然後使用'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]:
我認爲這些行是文檔和列值是..?說,如果我想聚類或找到這些向量之間的相似性(使用餘弦或Jaccard),不知道是否我必須做項目明智的比較?
預期輸出:doc_a,doc_c和doc_e應該位於一個羣集中,其餘羣集位於另一個羣集中。
謝謝!
謝謝瑞安。我在10種具有4種文本特徵的文檔上試了一下,效果很好。現在,我可以直觀地查看羣集的成員,並查看哪些功能對其「親密度」有貢獻。當我處理非常大的數據集時,這會成爲一個問題,因爲文檔中提到:「沒有辦法做反向變換(從特徵索引到字符串特徵名),這在試圖反思哪些特徵對於一個模型。」)。我正在研究sklearn可以提供的其他事情。有任何想法嗎? – user1717931
是的,與HashingVectorizer有一個折衷,因爲你可以使用更多的功能來適應你的模型,但是你失去了自省的能力。 sklearn中的其他向量化工具(CountVectorizer,TFIDFVectorizer)將允許您執行自檢,但它們有更大的佔用空間;爲了使它們適合大數據集,您可以將max_features設置爲合理的數字。 –
如果我必須手動計算兩個散列向量(包含每個要素桶中散列數的特徵向量)之間的相似度 - 我可以簡單地使用jaccard或餘弦我相信。對? – user1717931