如何在 Spark ML 中预测价值
How to Predict value in Spark ML
我 非常 Spark 机器学习新手 (4 天前) 我正在 Spark 中执行以下代码 Shell 我正在尝试预测一些值
我的要求是我有包含以下内容的数据
列
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
我需要预测 Userid = 1 的 SwipeIntime 会在 2017 年 1 月 5 日或任何日期
我试过的是 Spark 中的以下代码 Shell
代码:
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|
+------+---------+-----------+------------------+-----------------+
如果有人对上述代码提供任何建议以使其正常工作,我将不胜感激。
为什么您认为它不起作用?因为预测都一样?
我遇到了与 描述类似的问题,但在 PySpark 中。
我通过提高 MaxIter 并降低 RegParam 和 ElasticNetParam 解决了这个问题。
尝试这样设置它们:
val lr = new LinearRegression().setMaxIter(100).setRegParam(0.001).setElasticNetParam(0.0001)
希望有用!
我 非常 Spark 机器学习新手 (4 天前) 我正在 Spark 中执行以下代码 Shell 我正在尝试预测一些值
我的要求是我有包含以下内容的数据
列
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
我需要预测 Userid = 1 的 SwipeIntime 会在 2017 年 1 月 5 日或任何日期
我试过的是 Spark 中的以下代码 Shell
代码:
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|
+------+---------+-----------+------------------+-----------------+
如果有人对上述代码提供任何建议以使其正常工作,我将不胜感激。
为什么您认为它不起作用?因为预测都一样?
我遇到了与
我通过提高 MaxIter 并降低 RegParam 和 ElasticNetParam 解决了这个问题。
尝试这样设置它们:
val lr = new LinearRegression().setMaxIter(100).setRegParam(0.001).setElasticNetParam(0.0001)
希望有用!