【发布时间】:2018-05-28 05:30:07
【问题描述】:
我正在尝试使用 SVM 对问题进行分类。我正在关注此链接以供参考 -
但他们使用了 SPACY、SCIKIT-LEARN 和 PANDAS。我想使用 Spark Mllib 做同样的事情。 我正在使用此代码创建一个数据框 -
sc = SparkContext(conf=sconf) # SparkContext
sqlContext = SQLContext(sc)
data = sc.textFile("<path_to_csv_file>")
header = data.first()
trainingDF = sqlContext.createDataFrame(data
.filter(lambda line: line != header)
.map(lambda line: line.split("|"))
.map(lambda line: ([line[0]], [line[2]], [line[6]]))).toDF("Question", "WH-Bigram", "Class")
我通过打印数据框得到以下结果-trainingDF.show(3)
+--------------------+-------------------+------+
| Question| WH-Bigram| Class|
+--------------------+-------------------+------+
|[How did serfdom ...| [How did]|[DESC]|
|[What films featu...| [What films]|[ENTY]|
|[How can I find a...| [How can]|[DESC]|
我的示例 csv 文件是 -
#Question|WH|WH-Bigram|Class
How did serfdom develop in and then leave Russia ?|How|How did|DESC
我正在使用 word2vec 为 SVM 创建训练数据并尝试使用 SVM 进行训练。
word2Vec1 = Word2Vec(vectorSize=2, minCount=0, inputCol="Question", outputCol="result1")
training = word2Vec1.fit(trainingDF).transform(trainingDF)
model = SVMWithSGD.train(training, iterations=100)
使用 word2vec 后,我的数据转换为这种格式 -
[Row(Question=[u'How did serfdom develop in and then leave Russia ?'], WH-Bigram=[u'How did'], Class=[u'DESC'], result1=DenseVector([0.0237, -0.186])), Row(Question=[u'What films featured the character Popeye Doyle ?'], WH-Bigram=[u'What films'], Class=[u'ENTY'], result1=DenseVector([-0.2429, 0.0935]))]
但是当我尝试使用 SVM 训练数据帧时,出现TypeError: data should be an RDD of LabeledPoint, but got <class 'pyspark.sql.types.Row'> 的错误
我被困在这里...我认为我创建的数据框不正确。 是否有人知道如何创建合适的数据框来使用 SVM 对其进行训练。如果我做错了什么,请告诉我。
【问题讨论】:
标签: pyspark svm apache-spark-mllib