2014-09-02 263 views
3

我在嘗試使用scikit-learn將一些文本文檔聚類在一起。我試用了DBSCAN和MeanShift,並想要確定哪些超參數(例如針對MeanShift的bandwidth和針對DBSCAN的eps)針對我正在使用的數據類型(新聞文章)的最佳工作方式。GridSearchCV如何用於聚類(MeanShift或DBSCAN)?

我有一些測試數據,其中包含預先標記的簇。我一直在嘗試使用scikit-learnGridSearchCV,但不明白在這種情況下應該如何(或者是否可以)應用,因爲它需要分割測試數據,但是我想對整個數據集運行評估,並且將結果與預先標記的數據進行比較。

我一直在試圖指定一個計分函數,它將估計器的標籤與真實標籤進行比較,但它當然不起作用,因爲只有數據樣本被聚集,而不是全部。

這裏有什麼合適的方法?

回答

1

你有沒有考慮自己實施搜索

實現for循環並不是特別困難。即使你想優化兩個參數,它仍然很容易。

對於DBSCAN和MeanShift,我都會建議先了解您的相似性度量。基於對測量的理解而不是參數優化來匹配某些標籤(其具有過度擬合的高風險)來選擇參數更有意義。

換句話說,在哪個距離上有兩個物品假設被聚集?

如果這個距離從一個數據點到另一個數據點變化太大,這些算法將會嚴重失敗;你可能需要找到一個規範化的距離函數,使得實際的相似度值再次有意義。 TF-IDF是文本標準,但主要在檢索上下文中。它們在集羣環境中可能會更糟糕。同樣要注意的是,MeanShift(類似於k-means)需要重新計算座標 - 在文本數據上,這可能會產生不希望的結果;更新後的座標實際上變差了,而不是更好。

+0

是的,我正在自己實施它的過程中。我只是想知道'scikit-learn'是否支持這個開箱即用的功能,並且我忽略了一些東西。 我的計劃是對幾個不同的預先標記的數據集進行網格搜索,並深入瞭解您指出的潛在問題 - 感謝您指出風險! – frnsys 2014-09-03 12:03:13

+0

'sklearn.cross_validation'有各種迭代器,可以產生數據集的分割(交叉驗證,隨機分割等)。這些應該使這個循環很容易編寫。 – 2014-09-03 16:35:59

相關問題