Apache spark 基于sparkml的文本分类
我有一个自由文本描述,我需要根据它进行分类。例如,描述可以是事件的描述。根据对事件的描述,我需要预测与事件相关的风险。例如:“镇上的谋杀案”——这一描述是“高”风险的候选Apache spark 基于sparkml的文本分类,apache-spark,machine-learning,distributed-computing,apache-spark-mllib,data-science,spark,bigdata,python,pyspark,Apache Spark,Machine Learning,Distributed Computing,Apache Spark Mllib,Data Science,Spark,Bigdata,Python,Pyspark,我有一个自由文本描述,我需要根据它进行分类。例如,描述可以是事件的描述。根据对事件的描述,我需要预测与事件相关的风险。例如:“镇上的谋杀案”——这一描述是“高”风险的候选 我尝试了逻辑回归,但意识到目前只支持二元分类。对于基于自由文本描述的多类分类(只有三个可能的值),最合适的算法是什么?(线性回归或朴素贝叶斯)这就是我解决上述问题的方法 虽然预测精度不差,但模型还需要进一步调整 为了更好的结果 专家,如果您发现任何错误,请返回 我的输入数据框有两列“文本”和“风险分类” 下面是在Java中使用
我尝试了逻辑回归,但意识到目前只支持二元分类。对于基于自由文本描述的多类分类(只有三个可能的值),最合适的算法是什么?(线性回归或朴素贝叶斯)这就是我解决上述问题的方法 虽然预测精度不差,但模型还需要进一步调整 为了更好的结果 专家,如果您发现任何错误,请返回 我的输入数据框有两列“文本”和“风险分类” 下面是在Java中使用朴素贝叶斯进行预测的一系列步骤
Tokenizer tokenizer = new Tokenizer().setInputCol("text").setOutputCol("words");
DataFrame tokenized = tokenizer.transform(trainingRiskData);
LabeledPoint labeledPoint = new LabeledPoint(new Double(dataFrameRow.get(3).toString()),
(org.apache.spark.mllib.linalg.Vector) dataFrameRow.get(7));
我也看到了这些提议,至少值得一读!)
如果您的数据不是那么大,我也会尝试支持向量机(SVM),但是它支持,所以您应该切换到或普通,放弃。顺便说一句,如果你真的要去sklearn,这可能会派上用场:因为熊猫和sklearn玩得很好 希望这有帮助
离题: 这并不是在堆栈溢出中提问的方式。阅读 就个人而言,如果我是你,我会先做你在回答中做的所有事情,然后发布一个问题,总结我的方法
至于赏金,你可能想读一读:谢谢你的夸奖。我会按照你的建议去做mentioned@lives伟大的我也更新了我的答案,因为我现在在做支持向量机,我感觉你很好!
Tokenizer tokenizer = new Tokenizer().setInputCol("text").setOutputCol("words");
DataFrame tokenized = tokenizer.transform(trainingRiskData);
StopWordsRemover remover = new StopWordsRemover().setInputCol("words").setOutputCol("filtered");
DataFrame stopWordsRemoved = remover.transform(tokenized);
int numFeatures = 20;
HashingTF hashingTF = new HashingTF().setInputCol("filtered").setOutputCol("rawFeatures")
.setNumFeatures(numFeatures);
DataFrame rawFeaturizedData = hashingTF.transform(stopWordsRemoved);
IDF idf = new IDF().setInputCol("rawFeatures").setOutputCol("features");
IDFModel idfModel = idf.fit(rawFeaturizedData);
DataFrame featurizedData = idfModel.transform(rawFeaturizedData);
JavaRDD<LabeledPoint> labelledJavaRDD = featurizedData.select("label", "features").toJavaRDD()
.map(new Function<Row, LabeledPoint>() {
@Override
public LabeledPoint call(Row arg0) throws Exception {
LabeledPoint labeledPoint = new LabeledPoint(new Double(arg0.get(0).toString()),
(org.apache.spark.mllib.linalg.Vector) arg0.get(1));
return labeledPoint;
}
});
NaiveBayes naiveBayes = new NaiveBayes(1.0, "multinomial");
NaiveBayesModel naiveBayesModel = naiveBayes.train(labelledJavaRDD.rdd(), 1.0);
LabeledPoint labeledPoint = new LabeledPoint(new Double(dataFrameRow.get(3).toString()),
(org.apache.spark.mllib.linalg.Vector) dataFrameRow.get(7));
double predictedLabel = naiveBayesModel.predict(labeledPoint.features());