我對一組文檔運行LDA,並觀察到代表主題分佈的topicMatrix的值大於1,例如548.2201,685.2436,138.4013 ......什麼是這些值是什麼意思這些是分配的對數值或什麼。如何將這些值轉換爲概率分佈值。 在此先感謝。Spark MLLib LDA結果的解釋
4
A
回答
4
在這兩種模式(即DistributedLDAModel
和LocalLDAMoel
)的topicsMatrix
方法,我相信,迴歸(大約有由於之前的主題狄利克雷有點正規化的)預期字詞話題數矩陣。要檢查這一點,你可以採取矩陣並總結所有列。生成的向量(長度爲topic-count-size)應該近似等於單詞計數(在所有文檔中)。在任何情況下,要獲取主題(字典中的單詞概率分佈),需要對列進行規範化
import breeze.linalg.{DenseVector => BDV}
import org.apache.spark.mllib.linalg._
def normalizeColumns(m: Matrix): DenseMatrix = {
val bm = Matrices.toBreeze(m).toDenseMatrix
val columnSums = BDV.zeros[Double](bm.cols).t
var i = bm.rows
while (i > 0) { i -= 1; columnSums += bm(i, ::) }
i = bm.cols
while (i > 0) { i -= 1; bm(::, i) /= columnSums(i) }
new DenseMatrix(bm.rows, bm.cols, bm.data)
}
0
:讓每個總和爲1
我沒有測試出來完全,但這樣的事情應該工作正常化由topicsMatrix
返回的矩陣的列由topicsMatrix
返回的矩陣使純scala中由topicsMatrix返回的矩陣的列標準化
def formatSparkLDAWordOutput(wordTopMat: Matrix, wordMap: Map[Int, String]): scala.Predef.Map[String, Array[Double]] = {
// incoming word top matrix is in column-major order and the columns are unnormalized
val m = wordTopMat.numRows
val n = wordTopMat.numCols
val columnSums: Array[Double] = Range(0, n).map(j => (Range(0, m).map(i => wordTopMat(i, j)).sum)).toArray
val wordProbs: Seq[Array[Double]] = wordTopMat.transpose.toArray.grouped(n).toSeq
.map(unnormProbs => unnormProbs.zipWithIndex.map({ case (u, j) => u/columnSums(j) }))
wordProbs.zipWithIndex.map({ case (topicProbs, wordInd) => (wordMap(wordInd), topicProbs) }).toMap
}
相關問題
- 1. 瞭解Spark MLlib LDA輸入格式
- 2. 結合Spark Streaming + MLlib
- 3. LDA解釋
- 4. Spark MLlib LDA:生成總是非常相似的LDA主題的可能原因?
- 5. Spark 1.4 Mllib LDA topicDistributions()返回錯誤的文檔數
- 6. Spark MLLIB問題
- 7. java apache spark mllib
- 8. LDA向量係數解釋
- 9. Spark mllib線性迴歸給出了非常糟糕的結果
- 10. 瞭解Spark MLlib ALS.trainImplicit輸入格式
- 11. Spark mllib ALS建議
- 12. 爲什麼報告Spark mllib中LDA模型的日誌困惑太慢?
- 13. 調整Apache Spark MLlib算法
- 14. Spark MLlib和Spark ML中的PCA
- 15. 解釋princomp結果
- 16. regexp_substr結果解釋
- 17. ROC結果解釋
- 18. ARIMA結果解釋
- 19. f1score的Spark mllib閾值
- 20. Java中Spark MLlib的分類
- 21. VARselect()結果的解釋
- 22. K-means的解釋結果
- 23. Spark MLlib/K-Means直覺
- 24. 從Spark上使用Breeze MLlib
- 25. Spark MLlib IDF洗牌數據?
- 26. Spark mllib洗牌數據
- 27. 使用matchTemplate解釋結果
- 28. scipy/numpy linalg.eigval結果解釋
- 29. 無法解釋LOOP結果
- 30. MySQL查詢結果解釋
感謝您的回覆。但是有沒有任何文件提及這些東西? – hari
scala源代碼是文檔。 ;-) –
好的,非常感謝。另外我想檢查文檔的主題分佈。我正在嘗試ldamodel.topicdistribution(),但它顯示它不是spark庫的成員。您是否知道如何爲經過培訓的新文檔查找主題分佈? – hari