2017-09-01 5 views
2

の変更ラベルは私がhttp://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary.html#a1aスパーク負荷データ - LabelledPoint

データセットはLIBSVM形式であるからA1Aデータセットをダウンロードしたhttps://spark.apache.org/docs/latest/mllib-decision-tree.html

でスパークでの意思決定ツリーの例をしようとする場所

:2つのクラスは、ラベル+1.0と-1.0 私は

import org.apache.spark.mllib.tree.DecisionTree 
import org.apache.spark.mllib.tree.model.DecisionTreeModel 
import org.apache.spark.mllib.util.MLUtils 

// Load and parse the data file. 
val data = MLUtils.loadLibSVMFile(sc, "/user/cloudera/testDT/a1a.t") 
// Split the data into training and test sets (30% held out for testing) 
val splits = data.randomSplit(Array(0.7, 0.3)) 
val (trainingData, testData) = (splits(0), splits(1)) 

// Train a DecisionTree model. 
// Empty categoricalFeaturesInfo indicates all features are continuous. 
val numClasses = 2 
val categoricalFeaturesInfo = Map[Int, Int]() 
val impurity = "gini" 
val maxDepth = 5 
val maxBins = 32 

val model = DecisionTree.trainClassifier(trainingData, numClasses, categoricalFeaturesInfo, 
| impurity, maxDepth, maxBins) 

をしようとすると私が手を持っています

ラベル-1.0を0.0に変更しようとしました。

reassignment to val

は、だから私の質問はこれです::どのように私は私のデータのラベルを変更することができ、私はエラーを取得するどこで

def changeLabel(a: org.apache.spark.mllib.regression.LabeledPoint) = 
{ if (a.label == -1.0) {a.label = 0.0} } 

のようなものを試してみましたか?または、DecisionTree.trainClassifier()がネガティブラベルのデータを処理するための回避策がありますか?

答えて

1

TL; DRあなたはProductクラスの値引数を辞任することはできません、それは(varとして宣言された)可能であったとしても、あなたは、Sparkでの場所でデータを変更することはありません必要があります。

方法について:

def changeLabel(a: org.apache.spark.mllib.regression.LabeledPoint) = 
    if (a.label == -1.0) a.copy(label = 0.0) else a 
scala> changeLabel(LabeledPoint(-1.0, Vectors.dense(1.0, 2.0, 3.0))) 
res1: org.apache.spark.mllib.regression.LabeledPoint = (0.0,[1.0,2.0,3.0]) 

scala> changeLabel(LabeledPoint(1.0, Vectors.dense(1.0, 2.0, 3.0))) 
res2: org.apache.spark.mllib.regression.LabeledPoint = (1.0,[1.0,2.0,3.0])