2016-04-23 14 views
0

私はApache SparkとMLibにはかなり新しく、最初のマルチクラス分類モデルを実行しようとしています。用語頻度がSparkのマルチクラス分類

val input = sc.textFile("cars2.csv").map(line => line.split(";").toSeq) 

データフレーム作成:

val sql = new SQLContext(sc) 
val schema = StructType(List(StructField("Description", StringType), StructField("Brand", StringType), StructField("Fuel", StringType))) 
val dataframe = sql.createDataFrame(input.map(row => Row(row(0), row(1), row(2))), schema) 

マイデータフレームは次のようになります。そして、

+-----------------+----------+------+ 
|  Description|  Brand| Fuel| 
+-----------------+----------+------+ 
| giulietta 1.4TB|alfa romeo|PETROL| 
|    4c|alfa romeo|PETROL| 
| giulietta 2.0JTD|alfa romeo|DIESEL| 
| Mito 1.4 Tjet |alfa romeo|PETROL| 
|  a1 1.4 TFSI|  AUDI|PETROL| 
|  a1 1.0 TFSI|  AUDi|PETROL| 
|  a3 1.4 TFSI|  AUDI|PETROL| 
|  a3 1.2 TFSI|  AUDI|PETROL| 
|  a3 2.0 Tdi|  AUDI|DIESEL| 
|  a3 1.6 TDi|  AUDI|DIESEL| 
|  a3 1.8tsi|  AUDI|PETROL| 
|    RS3 |  AUDI|PETROL| 
|    S3|  AUDI|PETROL| 
|  A4 2.0TDI|  AUDI|DIESEL| 
|  A4 2.0TDI|  AUDI|DIESEL| 
|  A4 1.4 tfsi|  AUDI|PETROL| 
|  A4 2.0TFSI|  AUDI|PETROL| 
|  A4 3.0TDI|  AUDI|DIESEL| 
|   X5 3.0D|  BMW|DIESEL| 
|    750I|  BMW|PETROL| 

私はいくつかの点で立ち往生...ここに私のコードです
//Tokenize 
val tokenizer = new Tokenizer().setInputCol("Description").setOutputCol("tokens") 
val tokenized = tokenizer.transform(dataframe) 

    //Creating term-frequency 
val htf = new HashingTF().setInputCol(tokenizer.getOutputCol).setOutputCol("rawFeatures").setNumFeatures(500) 
val tf = htf.transform(tokenized) 

val idf = new IDF().setInputCol("rawFeatures").setOutputCol("features") 


// Model & Pipeline 
import org.apache.spark.ml.classification.LogisticRegression 
val lr = new LogisticRegression().setMaxIter(20).setRegParam(0.01) 

import org.apache.spark.ml.Pipeline 
val pipeline = new Pipeline().setStages(Array(tokenizer, idf, lr)) 
//Model 
val model = pipeline.fit(dataframe) 

エラー:

java.lang.IllegalArgumentException: Field "rawFeatures" does not exist. 

ブランドと燃料の種類を予測するために、説明のみを読んでいます。事前に

おかげ

答えて

0

二つの小さなあなたのコードに問題:

  1. htf変数が使用されていないが、私はそれがパイプラインから欠けていると仮定しますか?これはPipelineStageで、次の段階で必要なフィールドがrawFeaturesになるため、Field does not existというエラーが発生します。私たちはこれを修正する場合であっても

  2. - それはfeatures分野に加えて、タイプDoubleTypelabelフィールドを必要とするため、最後のステージ(ロジスティック回帰)が失敗します。フィッティングする前に、そのようなフィールドをデータフレームに追加する必要があります。あなたのコードの最後の行を変更

..

// pipeline - with "htf" stage added 
val pipeline = new Pipeline().setStages(Array(tokenizer, htf, idf, lr)) 
//Model - with an addition (constant...) label field 
val model = pipeline.fit(dataframe.withColumn("label", lit(1.0))) 

が...正常にこの仕上げを行いますが、ここで標識化は、単なる例のためであるもちろん、あなたのようにラベルを作成しますフィットを参照してください。

関連する問題