Spark SVM分类器
package Spark_MLlib import java.util.Properties import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.linalg.{Vector, Vectors}
import org.apache.spark.mllib.classification.SVMWithSGD
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
/**
* SGD:一种优化方法,目的使目标函数的值最小.SGD指stochastic gradient descent,即随机梯度下降.是梯度下降的batch版本.
* 这么做的好处在于:
* 当训练数据太多时,利用整个数据集更新往往时间上不显示.batch的方法可以减少机器的压力,并且可以更快地收敛.
* 当训练集有很多冗余时(类似的样本出现多次),batch方法收敛更快.以一个极端情况为例,若训练集前一半和后一半梯度相同.那么如果前一半作为一个batch,
* 后一半作为另一个batch,那么在一次遍历训练集时,batch的方法向最优解前进两个step,而整体的方法只前进一个step.
*/
object SVM{
def main(args: Array[String]): Unit = {
val spark=SparkSession.builder().master("local").getOrCreate()
val train_data=spark.sparkContext.textFile("file:///home/soyo/下载/Hadoop+Spark+Hbase/Spark训练数据/train_after.csv")
val test_data=spark.sparkContext.textFile("file:///home/soyo/下载/Hadoop+Spark+Hbase/Spark训练数据/test_after.csv")
val train=train_data.map{x=>
val parts=x.split(",")
LabeledPoint(parts().toDouble,Vectors.dense(parts().toDouble,parts().toDouble,parts().toDouble,parts().toDouble))
}
// train.foreach(println)
val test=test_data.map{x=>
val y=x.split(",")
LabeledPoint(y().toDouble,Vectors.dense(y().toDouble,y().toDouble,y().toDouble,y().toDouble))
}
//numIterations:迭代次数,默认是100
val numIterations = 600
val model=SVMWithSGD.train(train,numIterations)
//val model=new SVMWithSGD().run(train) //两种求model都行
//清除默认阈值,这样会输出原始的预测评分,即带有确信度的结果。
model.clearThreshold()
val scoreAndLabels=test.map{x=>
val score=model.predict(x.features)
score+" "+x.label
}
scoreAndLabels.foreach(println) val rebuyRDD=scoreAndLabels.map(_.split(" "))
//设置模式信息
val schema=StructType(List(StructField("score",StringType,true),StructField("label",StringType,true)))
//创建Row对象,每个Row对象都是rowRDD中的一行
val rowRDD=rebuyRDD.map(x=>Row(x().trim,x().trim))
//建立模式和数据之间的关系
val rebuyDF=spark.createDataFrame(rowRDD,schema)
//prop变量保存JDBC连接参数
val prop=new Properties()
prop.put("user","root")
prop.put("password","密码")
prop.put("driver","com.mysql.jdbc.Driver") //表示驱动程序是com.mysql.jdbc.Driver
rebuyDF.write.mode("append").jdbc("jdbc:mysql://localhost:3306/数据库名","数据库表名",prop) } }
Spark 机器学习库从 1.2 版本以后被分为两个包:
spark.mllib
包含基于RDD的原始算法API。Spark MLlib 历史比较长,在1.0 以前的版本即已经包含了,提供的算法实现都是基于原始的RDD。spark.ml
则提供了基于DataFrames 高层次的API,可以用来构建机器学习工作流(PipeLine).ML Pipeline 弥补了原始 MLlib 库的不足,向用户提供了一个基于 DataFrame 的机器学习工作流式 API 套件。
从Spark2.0开始,Spark机器学习库基于RDD的API进入维护模式(即不增加任何新的特性),很有可能于3.0以后的版本的时候会移除出MLLib
Spark SVM分类器的更多相关文章
- 机器学习经典算法详解及Python实现--基于SMO的SVM分类器
原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector ...
- 自己训练SVM分类器进行HOG行人检测
正样本来源是INRIA数据集中的96*160大小的人体图片,使用时上下左右都去掉16个像素,截取中间的64*128大小的人体. 负样本是从不包含人体的图片中随机裁取的,大小同样是64*128(从完全不 ...
- Python图像处理(15):SVM分类器
快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在opencv中支持SVM分类器.本文尝试在python中调用它. 和前面的贝叶斯分类器一样,SV ...
- 菜鸟之路——机器学习之SVM分类器学习理解以及Python实现
SVM分类器里面的东西好多呀,碾压前两个.怪不得称之为深度学习出现之前表现最好的算法. 今天学到的也应该只是冰山一角,懂了SVM的一些原理.还得继续深入学习理解呢. 一些关键词: 超平面(hyper ...
- 线性SVM分类器实战
1 概述 基础的理论知识参考线性SVM与Softmax分类器. 代码实现环境:python3 2 数据处理 2.1 加载数据集 将原始数据集放入"data/cifar10/"文件夹 ...
- 大数据-10-Spark入门之支持向量机SVM分类器
简介 支持向量机SVM是一种二分类模型.它的基本模型是定义在特征空间上的间隔最大的线性分类器.支持向量机学习方法包含3种模型:线性可分支持向量机.线性支持向量机及非线性支持向量机.当训练数据线性可分时 ...
- 4. SVM分类器求解(2)
最优间隔分类器(optimal margin classifier) 重新回到SVM的优化问题: 我们将约束条件改写为: 从KKT条件得知只有函数间隔是1(离超平面最近的点)的线性约束式前面的系数,也 ...
- SVM分类器实现实例
我正在做一个关于SVM的小项目,在我执行验证SVM训练后的模型的时候,得到的report分数总是很高,无论是召回率(查全率).精准度.还是f1-score都很高: 图1 分类器分数report 但是, ...
- 利用Hog特征和SVM分类器进行行人检测
在2005年CVPR上,来自法国的研究人员Navneet Dalal 和Bill Triggs提出利用Hog进行特征提取,利用线性SVM作为分类器,从而实现行人检测.而这两位也通过大量的测试发现,Ho ...
随机推荐
- FFmpeg加水印
ffmpeg中文水印乱码两种原因 1.字符编码格式原因,中文必须是utf8编码格式的(我遇到的问题,在vs2013上写的中文,已做编码格式转码,放到centos7.2上编译运行也会出现中文乱码的问题, ...
- Directory获取方式
1) FSDirectory.open FSDirectory.open()会以最合适的方式来获取一个Directory对象. 2) RAMDirectory 可以将磁盘中的索引加载到内存中,访问速度 ...
- 从PDF复制到word(换行问题)
当我们从pdf文档中复制一部分内容到word的时候,pdf的自动换行会自动给文字添加换行,也就是一个回车,让文字另起一行,这样粘贴到word中的时候,word中也会有很多换行符,排版比较麻烦,需要一个 ...
- 【Objective-C】07-自定义构造方法和description方法
在第5讲中已经介绍了如何定义类和创建并初始化对象,比如有Student这个类 1.Student.h 1 #import <Foundation/Foundation.h> 2 3 @in ...
- xtu summer individual-4 D - Martian Strings
Martian Strings Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces. ...
- 数据库 SQL SQL转义
SQL转义 @author ixenos 前言 类似文件分隔符在不同系统的实现不同,我们需要一个中间的转义字符来作为接口,各厂商再具体实现 而SQL的转义语法主要为了支持各种数据库普遍支持的特性,但各 ...
- [luoguP2827] 蚯蚓(堆?队列!)
传送门 35分做法 用堆来取最大值,暴力更新其余数的值. 65~85分做法 还是用堆来取最大值,其余的数增加可以变成新切开的两个数减少,最后统一加上一个数. #include <queue> ...
- java中使用Protobuf的实例(Demo)
由于Protobuf受到推崇,故尝试采用protobuf来摒弃传统的xml进行传输数据. 首先,需要下载的关于Protobuf的文件: 1.到http://code.google.com/p/prot ...
- [NOIP2006] 提高组 洛谷P1065 作业调度方案
题目描述 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工序都有指定的加工时间. 每个工件的每个工序称为一个操作,我们用记号j-k表示一个 ...
- rsync远程文件传输
[root@rhel5 ~]# rsync -a log.tar.gz root@192.168.124.129:/tmp root@192.168.124.129's password: Permi ...