2016-09-20 2 views
1

저는 Spark 인프라가 처음이므로이 질문이 어리석은 일이 될 수 있습니다. 나는 텍스트 분류를 위해 mllib을 사용한다. 트레이닝을 위해 MultinomialNaiveBayes 분류기에 제공하는 라벨이있는 일련의 문장이 있습니다. 나는 그 예를 발견했다.Spark mllib 스칼라로 분류하기

수요일 12월 31일 23시 13분 30초 0000 2014,1, 지출 새로운 년 이브, 0

수요일 12월 31일 23시 14분 :

내 입력이 양식에 있습니다 37 +0000 2014,1, 굵은 천사 0

물 십이 31 23시 14분 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, 현재 31 23시 3분 23초 0,000 2,014 수요일 년 12 널 (null)에 DJVINCE1 새해 카운트 다운 믹스하여 8까지!, 0, 중립, 널 (null), djvince

16800, 수요일 12월 31일 23 : 이제 새 해 이브 카운트 다운 믹스까지

이 같은 출력을 얻기 위해이 입력에 생산 된 라벨을 매핑 할 수있는 방법 : 03 : 23 +0000 2014, null, DJVINCE1, 새해 전야 카운트 다운 믹스로 8 시까 지!, 0, 뉴트럴, null, 새해 전날 카운트 다운 믹스, 라벨 {0,1}

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

그런 그들을 분류에 공급 다시 튜플을 만들 : 그것이 내가해야 할 일을했을 모든 보인다

+0

'LabeledPoint'가 전혀 필요하지 않습니다. 'NaiveBayesModel.predict'는'RDD [Vector]'또는'Vector' 중 하나를 취합니다. – zero323

+0

해시 함수는 필자가 사용하는 벡터를 생성합니다. 왜냐하면 제 경우에는 두배가 아닌 단어를 다루기 때문입니다. –

+0

그러나 여전히 'LabeledPoint'는 필요하지 않습니다. – zero323

답변

2

확인은 해시 함수에서 내 원래 텍스트와 벡터 [더블]을 포함하여 튜플을 만드는 것이 었습니다 결과와 텍스트를 합친 것입니다. 이제는 두 필드가 모두 포함 된 구조를 사용할 수 있습니다.

val predictionAndLabel2 = parsedData.map(p => 
    (p._1 , model.predict(p._2)) 
) 
관련 문제