博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark-Mllib中各分类算法的java实现(简易教程)
阅读量:5301 次
发布时间:2019-06-14

本文共 3667 字,大约阅读时间需要 12 分钟。

一.简述

  Spark是当下非常流行的数据分析框架,而其中的机器学习包Mllib也是其诸多亮点之一,相信很多人也像我那样想要快些上手spark。下面我将列出实现mllib分类的简明代码,代码中将简述训练集和样本集的结构,以及各分类算法的参数含义。分类模型包括朴素贝叶斯,SVM,决策树以及随机森林。

 

二.实现代码

import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.api.java.JavaSparkContext;import java.util.LinkedList;import java.util.List;import org.apache.spark.mllib.linalg.Vector;import org.apache.spark.mllib.linalg.Vectors;import org.apache.spark.mllib.regression.LabeledPoint;import org.apache.spark.mllib.classification.NaiveBayes;import org.apache.spark.mllib.classification.NaiveBayesModel;import org.apache.spark.mllib.classification.SVMModel;import org.apache.spark.mllib.classification.SVMWithSGD;import java.util.HashMap;import java.util.Map;import org.apache.spark.mllib.tree.DecisionTree;import org.apache.spark.mllib.tree.model.DecisionTreeModel;import org.apache.spark.mllib.tree.RandomForest;import org.apache.spark.mllib.tree.model.RandomForestModel;public class test {    public static void main(String[] arg){       //生成spark对象        SparkConf conf = new SparkConf();        conf.set("spark.testing.memory","2147480000");  // spark的运行配置,意指占用内存2G        JavaSparkContext sc = new JavaSparkContext("local[*]", "Spark", conf);      //第一个参数为本地模式,[*]尽可能地获取多的cpu;第二个是spark应用程序名,可以任意取;第三个为配置文件                //训练集生成        LabeledPoint pos = new LabeledPoint(1.0, Vectors.dense(2.0, 3.0, 3.0));//规定数据结构为LabeledPoint,1.0为类别标号,Vectors.dense(2.0, 3.0, 3.0)为特征向量        LabeledPoint neg = new LabeledPoint(0.0, Vectors.sparse(3, new int[] {2, 1,1}, new double[] {1.0, 1.0,1.0}));//特征值稀疏时,利用sparse构建       List l = new LinkedList();//利用List存放训练样本        l.add(neg);        l.add(pos);        JavaRDD
training = sc.parallelize(l); //RDD化,泛化类型为LabeledPoint 而不是List final NaiveBayesModel nb_model = NaiveBayes.train(training.rdd()); //测试集生成 double [] d = {1,1,2}; Vector v = Vectors.dense(d);//测试对象为单个vector,或者是RDD化后的vector //朴素贝叶斯 System.out.println(nb_model.predict(v));// 分类结果 System.out.println(nb_model.predictProbabilities(v)); // 计算概率值 //支持向量机 int numIterations = 100;//迭代次数 final SVMModel svm_model = SVMWithSGD.train(training.rdd(), numIterations);//构建模型 System.out.println(svm_model.predict(v)); //决策树 Integer numClasses = 2;//类别数量 Map
categoricalFeaturesInfo = new HashMap(); String impurity = "gini";//对于分类问题,我们可以用熵entropy或Gini来表示信息的无序程度 ,对于回归问题,我们用方差(Variance)来表示无序程度,方差越大,说明数据间差异越大 Integer maxDepth = 5;//最大树深 Integer maxBins = 32;//最大划分数 final DecisionTreeModel tree_model = DecisionTree.trainClassifier(training, numClasses,categoricalFeaturesInfo, impurity, maxDepth, maxBins);//构建模型 System.out.println("决策树分类结果:"); System.out.println(tree_model.predict(v)); //随机森林 Integer numTrees = 3; // Use more in practice. String featureSubsetStrategy = "auto"; // Let the algorithm choose. Integer seed = 12345; // Train a RandomForest model. final RandomForestModel forest_model = RandomForest.trainRegressor(training, categoricalFeaturesInfo, numTrees, featureSubsetStrategy, impurity, maxDepth, maxBins, seed);//参数与决策数基本一致,除了seed System.out.println("随机森林结果:"); System.out.println(forest_model.predict(v)); } }

三.注意

1.利用spark进行数据分析时,数据一般要转化为RDD(利用spark所提供接口读取外部文件,一般会自动转化为RDD,通过MapReduce处理同样可以产生与接口匹配的训练集)

2.训练样本统一为标签向量(LabelPoint)。样本集为List,但是转化为RDD时,数据类型却为JavaRDD<LabeledPoint>(模型训练时,接口只接收数据类型为JavaRDD<LabeledPoint>)

3.分类predict返回结果为类别标签,贝叶斯模型可返回属于不同类的概率(python没用该接口)

转载于:https://www.cnblogs.com/adienhsuan/p/5922125.html

你可能感兴趣的文章
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
右侧导航栏(动态添加数据到list)
查看>>
81、iOS本地推送与远程推送详解
查看>>
虚拟DOM
查看>>
自建数据源(RSO2)、及数据源增强
查看>>
BootStrap2学习日记2--将固定布局换成响应式布局
查看>>
关于View控件中的Context选择
查看>>
2018icpc徐州OnlineA Hard to prepare
查看>>
Spark的启动进程详解
查看>>
使用命令创建数据库和表
查看>>
数据库的高级查询
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
201521123044 《Java程序设计》第1周学习总结
查看>>
MIT Scheme 的基本使用
查看>>
程序员的“机械同感”
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>
c++回调函数
查看>>
linux下Rtree的安装
查看>>
【Java】 剑指offer(53-2) 0到n-1中缺失的数字
查看>>
Delphi中ListView类的用法
查看>>