2016-09-20 103 views
1

我是Spark基礎架構的新手,所以這個問題可能很愚蠢。我使用mllib進行文本分類。我有一組帶有標籤的句子,我將它們輸入MultinomialNaiveBayes分類器進行訓練。我找到了一個例子。Spark mllib使用scala進行分類

我的輸入形式如下:

週三12月31日23點13分三十秒+0000 2014,1,度過除夕,0

週三12月31日23:14: 37 +0000 2014,1,大膽的天使,0

週三12月31日23點十四分53秒+0000 2014,1,給羅蘭好,0

var htf = new HashingTF(2000000) 
val parsedData = data.map { line => 
     val parts = line.split(',') 
     LabeledPoint(parts(1).toDouble, htf.transform(parts(2).split(' '))) 
    } 
val model = NaiveBayes.train(parsedData, lambda = 1.0, modelType = "multinomial") 

因此,我拿着文本並使用散列函數將術語映射到標籤{0,1}。訓練後,我想預測未標記數據集的標籤。所以這裏開始我的實際問題。

我沒有文本文檔的標籤,所以我無法創建LabeledPoints。我試着給「隨機」值(雙)作爲這樣的標籤(標籤數據存儲在不同的結構部分(7)是這裏的文字):

val testing = sc.textFile("neutralSegment.txt") 
val parsedData = testing.map { line => 
    val parts = line.split(',') 
    htf.transform(parts(7).split(' ')) 
} 
val predictionAndLabel = parsedData.map(p => (model.predict(p))) 

我怎樣才能提取處理的數據到其原始形式包括標籤?分類器產生標籤並且條款已經轉換成雙打。我只想將原始字符串與分類器中生成的標籤連接起來。鑑於此輸入:

16800,週三12月31日23時03分23秒+0000 2014年,空,DJVINCE1於即日起至8與除夕倒計時混合!!,0,中性,空,djvince

16800,週三23年12月31日:即日起至除夕倒數混合

如何才能得到這樣的輸出映射製作標籤這種輸入:03:23 +0000 2014,null,DJVINCE1現在直到8與您的除夕倒數混合!!,0,中立,空,djvince現在直到新年前夕倒計時混合,標籤{0,1}

+0

根本不需要'LabeledPoint'。 'NaiveBayesModel.predict'採用'RDD [Vector]'或'Vector'。 – zero323

+0

散列函數產生我使用的向量,因爲在我的情況下,我處理的不是雙打的單詞。 –

+0

但它仍然不需要'LabeledPoint'。 – zero323

回答

2

好,因爲它似乎一切我所要做的就是創建的元組包括來自哈希函數我的原始文本和矢量[雙]:

val parsedData = testing.map { line => 
    val parts = line.split(',') 
    val text = parts(7).split(' ') 
    (line, htf.transform(text)) 
} 

然後餵它們分類,並重新創建的元組結果加上文字。現在我可以使用包含兩個我想要的字段的結構。

val predictionAndLabel2 = parsedData.map(p => 
    (p._1 , model.predict(p._2)) 
)