2016-03-27 3 views
1

私はスカラのロジスティック回帰の例をhereから実行しています。トレーニング部において スパークマルチクラスロジスティック回帰クラス番号とラベル

:クラスの

val model = new LogisticRegressionWithLBFGS().setNumClasses(10).run(training) 

数が私のデータは5、12および20である3枚のラベルから成る場合には10に設定されています。それは私が最も大きいクラスの値よりも大きなclassnumを設定することによってそれを解決することができます知っているように

ERROR DataValidators: Classification labels should be in {0 to 9}. Found 6 invalid labels. 

として例外が発生します。

ラベル値を明示的に変換せずに、このようなデータセットで実際の数のクラスでこのアルゴリズムを実行することはできますか?

classnumを高くして動作させると、アルゴリズムは上記のような17のような存在しないクラスを予測しますか?

答えて

1

私はどこn = number of classes

import org.apache.spark.mllib.regression.LabeledPoint 
import org.apache.spark.mllib.classification.LogisticRegressionWithLBFGS 
import org.apache.spark.mllib.linalg.Vectors 

val rdd = sc.parallelize(List(
    LabeledPoint(5.0, Vectors.dense(1,2)), 
    LabeledPoint(12.0, Vectors.dense(1,3)), 
    LabeledPoint(20.0, Vectors.dense(-1,4)))) 

val map = Map(5 -> 0.0, 12.0 -> 1.0, 20.0 -> 2.0) 

val trainingData = rdd.map{ 
    case LabeledPoint(category, features) => LabeledPoint(map(category), features) 
} 

val model = new LogisticRegressionWithLBFGS().setNumClasses(3).run(trainingData) 
、あなたができる最善のことは、あなたのトレーニングデータを mapし、各項目を変更し、 Map交流に 0.0, 1.0, 2.0, ..., n - 1のためのあなたの labelsを使用してすることだと思います
関連する問題