使用Spark ML

时间:2018-06-02 20:49:59

标签: python apache-spark sparse-matrix apache-spark-mllib logistic-regression

我是Spark的新手,我正在尝试使用Spark ML库。我来自Scikit-learn,我觉得有点迷失方向。

这是我的DataFrame:

+------------+------------+---------+--------+---------+
|DOLocationID|PULocationID|DayOfWeek|TimeSlot|Frequency|
+------------+------------+---------+--------+---------+
|          15|          81|        1|   "TS4"|      402|
|         266|          67|        4|   "TS4"|      813|
+------------+------------+---------+--------+---------+

我想根据其他功能预测DOLocationID。

DOLocationID,PULocationID,DayOfWeek和TimeSlot是分类数据,因此我使用StringIndexer()和OneHotEncoder()来获取以下内容:

+-----------------+-----------------+---------------+--------------+---------+
| DOLocationVector| PULocationVector|DayOfWeekVector|TimeSlotVector|Frequency|
+-----------------+-----------------+---------------+--------------+---------+
| (289,[98],[1.0])|(289,[273],[1.0])|  (6,[0],[1.0])| (5,[0],[1.0])|      402|
|(289,[260],[1.0])|(289,[138],[1.0])|  (6,[5],[1.0])| (5,[0],[1.0])|      813|
+-----------------+-----------------+---------------+--------------+---------+

此时我使用了VectorAssembler来获取我的特征向量:

assembler = VectorAssembler(inputCols=["PULocationVector", "DayOfWeekVector", "TimeSlotVector", "Frequency"], 
    outputCol="features")

output = assembler.transform(df)

df = output.select("DOLocationVector", "features")

这就是结果:

+-----------------+--------------------+
| DOLocationVector|            features|
+-----------------+--------------------+
| (289,[98],[1.0])|(301,[273,289,295...|
|(289,[260],[1.0])|(301,[138,294,295...|
+-----------------+--------------------+

现在我已经准备好训练模型了:

train_data, test_data = df.randomSplit([.8,.2],seed=1234)
lr = LogisticRegression(labelCol="DOLocationVector", maxIter=10, regParam=0.3, elasticNetParam=0.8)
logisticModel = lr.fit(train_data)

但是发布了以下错误:

  

Py4JJavaError:调用o1436.fit时发生错误。 :   java.lang.IllegalArgumentException:要求失败:列   DOLocationVector必须是NumericType类型,但实际上是类型   org.apache.spark.ml.linalg.VectorUDT@3bfc3ba7。   [...]

我试图在文档或网络上找到一些东西,但可能我错了。所以问题是:

我可以预测稀疏矢量吗?如果是的话,我错在哪里?我错过了什么?如果没有,我有其他选择吗?

提前谢谢。

0 个答案:

没有答案