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 ...
随机推荐
- windows下mysql 5.7版本中修改编码为utf-8的方法
方法如下 首先通过 show variables like 'character_set_%';查看mysql字符集情 默认编码为 latin1 然后关闭数据库 在mysql安装目录下找到my.ini ...
- Python之面向对象多态
Python之面向对象多态 多态与多态性: 多态: 多态是指一类事物有多种形态,一个抽象类有多个子类,因而多态的概念依赖于继承. 1.序列类型有多种形态:字符串.列表.元组. 2.动物有多种形态:Pe ...
- ORM之创建数据库
ORM之创建数据库 样板:创建表名为UserInfo的表,表的主键可自行写,Django的ORM也可自行创建. from django.db import models class UserInfo( ...
- [luoguP2672] 推销员(贪心 + 树状数组 + 优先队列)
传送门 贪心...蒟蒻证明不会... 每一次找最大的即可,找出一次最大的,数列会分为左右两边,左边用stl优先队列维护,右边用树状数组维护.. (线段树超时了....) 代码 #include < ...
- 移动端click事件延迟300ms该如何解决
window.addEventListener( "load", function() { FastClick.attach( document.body ); }, fa ...
- SOJ 3300_Stockholm Coins
[题意]给n个数,求一个数,使这个数能且只能由(n个数每个至少出现一次)表示.输出满足条件的最小的数. [分析](完全背包)如果有满足条件的最小的数,那么这个数只能是这n个数的和total,通过记录每 ...
- Caocao's Bridges-HDU4738(Tarjin+求桥)
http://acm.hdu.edu.cn/showproblem.php?pid=4738 题目大意: 给定n个点和m条边 和每条边的价值,求桥的最小价值(最小桥) 看着挺简单的但是有好多细节: ...
- GETTING STARTED WITH THE OTTO JAVASCRIPT INTERPRETER
原文: https://www.fknsrs.biz/blog/otto-getting-started.html.html GETTING STARTED WITH THE OTTO JAVASCR ...
- Apple Swift编程语言新手教程
文件夹 1 简单介绍 2 Swift入门 3 简单值 4 控制流 5 函数与闭包 6 对象与类 7 枚举与结构 1 简单介绍 今天凌晨Apple刚刚公布了Swift编程 ...
- bzoj 1266 [AHOI2006] 上学路线 route 题解
转载请注明:http://blog.csdn.net/jiangshibiao/article/details/23989499 [原题] 1266: [AHOI2006]上学路线route Time ...