2017-06-16 133 views
2

非常新火花機學習(4天)我正在執行中的星火下面的代碼殼牌我試圖預測某個值如何星火預測值ML

我的要求是我有以下組成

Userid,Date,SwipeIntime 
1, 1-Jan-2017,9.30 
1, 2-Jan-2017,9.35 
1, 3-Jan-2017,9.45 
1, 4-Jan-2017,9.26 
2, 1-Jan-2017,9.37 
2, 2-Jan-2017,9.35 
2, 3-Jan-2017,9.45 
2, 4-Jan-2017,9.46  

我要預測什麼將是SwipeIntime爲的U數據serid = 1會在日期5月 - 2017年或任何日期

我曾嘗試是下面的代碼在星火殼牌

代碼:

case class LabeledDocument(Userid: Double, Date: String, label: Double) 
val training = spark.read.option("inferSchema", true).csv("/root/Predictiondata2.csv").toDF 
("Userid","Date","label").toDF().as[LabeledDocument] 
import scala.beans.BeanInfo 
import org.apache.spark.{SparkConf, SparkContext} 
import org.apache.spark.ml.Pipeline 
import org.apache.spark.ml.classification.LogisticRegression 
import org.apache.spark.ml.feature.{HashingTF, Tokenizer} 
import org.apache.spark.mllib.linalg.Vector 
import org.apache.spark.sql.{Row, SQLContext} 
val tokenizer = new Tokenizer().setInputCol("Date").setOutputCol("words") 
val hashingTF = new HashingTF().setNumFeatures(1000).setInputCol(tokenizer.getOutputCol).setOutputCol("features") 
import org.apache.spark.ml.regression.LinearRegression 
val lr = new LinearRegression().setMaxIter(10).setRegParam(0.3).setElasticNetParam(0.8) 
val pipeline = new Pipeline().setStages(Array(tokenizer, hashingTF, lr)) 
val model = pipeline.fit(training.toDF()) 
case class Document(Userid: Integer, Date: String) 
val test = sc.parallelize(Seq(Document(4, "04-Jan-18"),Document(5, "01-Jan-17"),Document(2, "03-Jan-17"))) 
model.transform(test.toDF()).show() 

獲取錯誤輸出(爲所有用戶相同SwipeIntime)

scala> model.transform(test.toDF()).show() 
+------+---------+-----------+------------------+-----------------+ 
|Userid|  Date|  words|   features|  prediction| 
+------+---------+-----------+------------------+-----------------+ 
|  4|04-Jan-18|[04-jan-18]|(1000,[455],[1.0])|9.726888888888887| 
|  5|01-Jan-17|[01-jan-17]|(1000,[595],[1.0])|9.726888888888887| 
|  2|03-Jan-17|[03-jan-17]|(1000,[987],[1.0])|9.726888888888887| 
+------+---------+-----------+------------------+-----------------+ 

我會感激,如果有人提供任何小號使用上面的代碼來使事情有效。

+0

首先,您的數據集太小... – eliasah

+0

需要多少數據?讓我知道,所以我可以創建.. – Bhavesh

回答

1

爲什麼你認爲它不工作?因爲預測都一樣嗎?

我也有類似的問題,因爲描述here但PySpark。

我通過提高MAXITER和降低RegParam和ElasticNetParam解決它。

嘗試設置他們這樣說:

val lr = new LinearRegression().setMaxIter(100).setRegParam(0.001).setElasticNetParam(0.0001) 

希望工程!

+0

非常感謝它爲我工作...再次非常感謝你!! .... – Bhavesh

+0

你有什麼想法嗎? https://stackoverflow.com/questions/44627422/how-to-provide-multiple-columns-to-setinputcol – Bhavesh