Spark2.0机器学习系列之7:多类分类问题(方法归总和分类结果评估)
来源:互联网 发布:自己做斗图的软件 编辑:程序博客网 时间:2024/05/15 04:42
一对多(One-vs-Rest classifier)
将只能用于二分问题的分类(如Logistic回归、SVM)方法扩展到多类。
参考:http://www.cnblogs.com/CheeseZH/p/5265959.html
“一对多”方法
训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样 本就构造出了k个binary分类器。分类时将未知样本分类为具有最大分类函数值的那 类。 假如我有四类要划分(也就是4个Label),他们是A、B、C、D。 于是我在抽取训练集的时候,分别抽取 (1)A所对应的向量作为正集,B,C,D所对应的向量作为负集; (2)B所对应的向量作为正集,A,C,D所对应的向量作为负集; (3)C所对应的向量作为正集,A,B,D所对应的向量作为负集; (4)D所对应的向量作为正集,A,B,C所对应的向量作为负集; 使用这四个训练集分别进行训练,然后的得到四个训练结果文件。 在测试的时候,把对应的测试向量分别利用这四个训练结果文件进行测试。 最后每个测试都有一个结果f1(x),f2(x),f3(x),f4(x)。 于是最终的结果便是这四个值中最大的一个作为分类结果。
这种方法有种缺陷,因为训练集是
另外还有“一对一”方法,Spark2.0中还没有实现。其做法是在任意两类样本之间设计一个分类器,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。Libsvm中的多类分类就是根据这个方法实现的。主要缺点:当类别很多的时候,model的个数是n*(n-1)/2,代价还是相当大的。(是不是不适合大数据集?)
Spark “一对多”代码
//定义一个binary分类器,如:LogisticRegression LogisticRegression lr=new LogisticRegression() .setMaxIter(10) .setRegParam(0.3) .setElasticNetParam(0.2) .setThreshold(0.5);//建立一对多多分类器model OneVsRestModel model=new OneVsRest() .setClassifier(lr)//将binary分类器用这种办法加入 .fit(training);//利用多分类器model预测Dataset<Row>predictions=model.transform(test);
Spark中那些方法可以用于多类分类
多类分类结果评估
(MulticlassClassificationEvaluator类)
在前面一篇文章里面介绍的关于二分问题的评估方法,部分评估方法可以延伸到多类分类为问题。这些概念可以参考
下面的文章:
(http://blog.csdn.net/qq_34531825/article/details/52313553
Spark中多分类分类基于JavaRDD的评估方法如下:
Precision,Recall,F-measure都有按照不同label分别评价,或者加权总体评价。
但是目前基于DataFrame的好像还没有这么多,没有介绍文档
通过explainParams函数打印出来就四种:
System.out.println(evaluator.explainParams());metricName: metric name in evaluation (f1|weightedPrecision|weightedRecall|accuracy)
使用方法如下:
MultilayerPerceptronClassificationModel model= multilayerPerceptronClassifier.fit(training); Dataset<Row> predictions=model.transform(test); MulticlassClassificationEvaluator evaluator= new MulticlassClassificationEvaluator() .setLabelCol("label") .setPredictionCol("prediction");//System.out.println(evaluator.explainParams());double accuracy =evaluator.setMetricName("accuracy").evaluate(predictions);double weightedPrecision=evaluator.setMetricName("weightedPrecision").evaluate(predictions);double weightedRecall=evaluator.setMetricName("weightedRecall").evaluate(predictions);double f1=evaluator.setMetricName("f1").evaluate(predictions);
0 0
- Spark2.0机器学习系列之7:多类分类问题(方法归总和分类结果评估)
- Spark2.0机器学习系列之2:Logistic回归及Binary分类(二分问题)结果评估
- Spark2 机器学习之决策树分类Decision tree classifier
- [EverString收录]机器学习中分类评估方法简介 - 1
- 机器学习中分类评估方法简介 - 1
- 机器学习精简教程之八——二元分类效果的评估方法
- 机器学习之——多类分类问题
- Spark2.0机器学习系列之9: 聚类算法(LDA)
- 机器学习 --- 分类算法模型评估
- 机器学习问题分类
- 机器学习----分类问题
- 机器学习(4)分类之集成方法
- 机器学习读书笔记之7 - 分类方法梳理
- 机器学习多分类和多标签处理方法
- 机器学习算法之CART(分类和回归树)
- 机器学习(2) ---- 分类问题
- 回归问题和评估分类器准确率
- 机器学习之分类学习
- 第9个python程序:打印,打印,打印
- git 命令行菜鸟必看
- linux 下 apache启动、停止、重启命令
- 用户态spinlock
- iOS学习开发资源网站
- Spark2.0机器学习系列之7:多类分类问题(方法归总和分类结果评估)
- JSON 的正确用法:Python、MongoDB、JavaScript与Ajax
- 论如何写出更为简短的代码(连载)篇一
- awk对行字段进行分割处理
- jquery学习笔记
- 【基础学习】GitHub 上100 的 Android 开源库分享
- 简单form表单 登陆
- 解决在win10下安装cisco VPN Client不兼容问题
- 一个驱动程序对应多个设备