2017-04-27 124 views
3

我有一個數據幀(DF)結構如下:ML管道的星火斯卡拉

數據

label pa_age pa_gender_category 
10000 32.0 male 
25000 36.0 female 
45000 68.0 female 
15000 24.0 male 

目的

我想建立一個隨機森林分類的列「標籤」,其中列「pa_age」和「pa_gender_category」是特徵

處理後再

// Transform the labels column into labels index 

val labelIndexer = new StringIndexer().setInputCol("label") 
.setOutputCol("indexedLabel").fit(df) 

// Transform column gender_category into labels 

val featureTransformer = new StringIndexer().setInputCol("pa_gender_category") 
.setOutputCol("pa_gender_category_label").fit(df) 

// Convert indexed labels back to original labels. 
val labelConverter = new IndexToString() 
    .setInputCol("prediction") 
    .setOutputCol("predictedLabel") 
    .setLabels(labelIndexer.labels) 

// Train a RandomForest model. 
val rf = new RandomForestClassifier() 
    .setLabelCol("indexedLabel") 
    .setFeaturesCol("indexedFeatures") 
    .setNumTrees(10) 

從上述步驟預期輸出:

label pa_age pa_gender_category indexedLabel pa_gender_category_label 
10000 32.0 male    1.0   1.0 
25000 36.0 female    2.0   2.0 
45000 68.0 female    3.0   2.0 
10000 24.0 male    1.0   1.0 

現在我所需要的數據轉換成 '標籤' 和 '功能' 格式

val featureCreater = new VectorAssembler().setInputCols(Array("pa_age", "pa_gender_category")) 
.setOutputCol("features").fit(df) 

流水線

val pipeline = new Pipeline().setStages(Array(labelIndexer, featureTransformer, 
featureCreater, rf, labelConverter)) 

問題

error: value fit is not a member of org.apache.spark.ml.feature.VectorAssembler 
     val featureCreater = new VectorAssembler().setInputCols(Array("pa_age", "pa_gender_category_label")).setOutputCol("features").fit(df) 
  • 基本上從它的數據轉換成標籤的步驟和功能,我現在面臨麻煩 格式。

  • 我的流程/流水線在這裏是否正確?

回答

1

的問題是在這裏

val featureCreater = new VectorAssembler().setInputCols(Array("pa_age", "pa_gender_category")) 
.setOutputCol("features").fit(df) 

你不能叫fit(df)在這裏,因爲VectorAssembler沒有辦法fit。不要忘記刪除.fit(df)StringIndexerIndexToString也。流水線初始化後,請在流水線對象上調用您的fit方法。

val model = pipeline.fit(df) 

現在流水線會經過您提供給它的每個算法。

StringIndexer沒有財產labels,請使用getOutputCol代替它。