MLlib-分类与回归
MLlib支持二分类,多酚类和回归分析的多种方法,具体如下:
| 问题类别 | 支持方法 |
| 二分类 | 线性支持向量机, 逻辑回归,决策树,朴素贝叶斯 |
| 多分类 | 决策树,朴素贝叶斯 |
| 回归 | 线性最小二乘,Lasso,ridge regression, 决策树 |
- 线性模型
- 二分类(支持向量机, 逻辑回归)
- 线性回归(最小二乘,Lasso, ridge)
- 决策树
- 朴素贝叶斯
线性模型
- 数学公式
- 损失函数
- 正则化
- 最优化
- 二分类
- 线性支持向量机
- 逻辑回归
- 评价矩阵
- 例子
- 线性最小二乘,Lasso,ridgeregression
- 例子
- 流式线性回归
- 例子
- 执行(开发者)
数学公式
损失函数
正则化
最优化
二分类
二分类问题的目的是将项目分成两个类别:正例和负例。MLlib支持两种二分类方法:线性支持向量机和逻辑回归。这两种方法都支持L1和L2两种正则变量。训练数据表示为MLlib的LabeledPoint格式。注意:在数学公式中,训练标记y表示为+1(正例)或-1(负例),是为了方便公式表示。然而,在MLlib为了兼容多分类情况,负例用0表示,而不是-1.
线性支持向量机(SVMs)
线性支持向量机是一种大规模分类问题的标准方法。线性表示如下
\(L(w;x,y):=\max\{0, 1-yw^{T}x\}\)
默认,使用L2正则化。L1为可选。这样,问题编程了一个线性程序。
线性SVM算法输出一个SVM模型。给定一个新数据点,用\(x\)表示,模型根据\(w^{T}x\)的值做预测。默认,如果\(w^{T}x \geq 0\)输出为正值,否则为负值。
逻辑回归
逻辑回归广泛用于二只问题。线性表示如下,使用logistic损失函数:
\( L(w;x,y) := log(1+ exp(-yw^{T}x)) \)
逻辑回归算法输出一个逻辑回归模型。给定一个新数据点,用\(x\)表示,模型将使用下面的损失函数做出预测
\( f(z)=\frac{1}{1+e^{-z}} \)
这里 \( z=w^{T}x \).默认,如果 \( f(w^{T}x) > 0.5 \),输出为正,反之为负。和线性SVM不不同,逻辑回归模型的原始输出,\( f(z) \),有一种概率解释(例如;\(x\)为正的概率)
评价矩阵
MLlib支持常用的二分类评价矩阵(PySpark不支持)。包括准确率,召回率,F值,receiver operating characteristic(ROC),准确率召回率曲线,和area under the curvers(AUC)。AUC是一种常用的模型性能比较方法,用于帮助用户通过准确率/召回率/F值来选择预测阈值(http://www.douban.com/note/284051363/?type=like)。
例子
下面的代码展示了如果如何加载一个简单的数据集,使用算法对象object上的静态方法训练数据,并且使用结果模型做出预测并计算训练错误率。
import org.apache.spark._
import org.apache.spark.mllib.classification.SVMWithSGD
import org.apache.spark.mllib.evaluation.BinaryClassificationMetrics
import org.apache.spark.mllib.util.MLUtils /**
* Created by ******qin on 2015-1-13.
*/
object ClassifySVM {
def main (args: Array[String]) {
val conf = new SparkConf().setAppName("classifySVM")
val sc = new SparkContext(conf)
//load training data in LibSVM format
val data = MLUtils.loadLibSVMFile(sc, args(0)) // args(0) println(data.count()) //split data into training and test(6:4)
val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L)
val training = splits(0).cache()
val test = splits(1) //run training algorithm to build the model
val numIterations = 100
val model = SVMWithSGD.train(training, numIterations) //clean the default threshold
model.clearThreshold() //compute raw scores on the test set
val scoreAndLabels = test.map { point =>
val score = model.predict(point.features)
(score, point.label)
} //get evaluation metrics
val metrics = new BinaryClassificationMetrics(scoreAndLabels)
val auROC = metrics.areaUnderROC() println("Area under ROC = " + auROC)
}
}
SVMWithSGD.train()默认使用L2正则化,参数为1.0. 如果想定制该算法,可以直接创建一个SVMWithSGD对象并调用setter方法即可。MLlib中其他所有算法也支持使用这种方法进行定制。例如,下面的算法SVM算法使用L1正则化参数为1.0,循环次数为200.
//the SVMWithSGD with L1
val svmAlg = new SVMWithSGD()
svmAlg.optimizer.setNumIterations(200)
.setRegParam(1.0)
.setUpdater(new L1Updater)
val model = svmAlg.run(training)
LogisticRegressionWithSGD和SVMWithSGD使用方法相似。
线性最小二乘,Lasso,ridge regression
线性最小二乘法是回归问题最常用的解法。线性表示如下,使用平方损失函数
\( L(w;x,y):=\frac{1}{2}(w^Tx-y)^2 \)
根据使用的正则化方法的不同,各种回归方法被分为:普通最小二乘或线性最小二乘(不使用正则化);岭回归(使用L2正则化);和Lasso(使用L1正则化)。所有的方法都是用平均错误率或训练错误率,\( \frac{1}{n}\sum_{i=1}^{n}(w^Tx_i-y_i)^2 \),即均方差错误率。
例子
下面的例子描绘了如何加载训练数据,解析数据成为LabeledPoint的RDD格式。之后使用LinearRegressionWithSGD建立简单的线性模型去预测标签值。然后计算均方差错误率评价结果。
流式线性回归
数据以流的方式到达,就需要用到在线的修正回归模型,在新数据到达时更新模型参数。MLlib使用普通最小二乘支持流式数据。修正和离线执行是相似的,对每批数据进行修正,这样模型就可以针对数据流进行连续更新。
例子
下面的例子描述了如何加载数据,测试来自两个不同文本文件流的数据,将流解析为标记点,使用第一个流修正一个在线线性回归模型,用第二个流进行预测
MLlib-分类与回归的更多相关文章
- 【Todo】【转载】Spark学习 & 机器学习(实战部分)-监督学习、分类与回归
理论原理部分可以看这一篇:http://www.cnblogs.com/charlesblc/p/6109551.html 这里是实战部分.参考了 http://www.cnblogs.com/shi ...
- SVM分类与回归
SVM(支撑向量机模型)是二(多)分类问题中经常使用的方法,思想比较简单,但是具体实现与求解细节对工程人员来说比较复杂,如需了解SVM的入门知识和中级进阶可点此下载.本文从应用的角度出发,使用Libs ...
- SPSS数据分析—多分类Logistic回归模型
前面我们说过二分类Logistic回归模型,但分类变量并不只是二分类一种,还有多分类,本次我们介绍当因变量为多分类时的Logistic回归模型. 多分类Logistic回归模型又分为有序多分类Logi ...
- CART分类与回归树与GBDT(Gradient Boost Decision Tree)
一.CART分类与回归树 资料转载: http://dataunion.org/5771.html Classification And Regression Tree(CART)是决策 ...
- CART分类与回归树 学习笔记
CART:Classification and regression tree,分类与回归树.(是二叉树) CART是决策树的一种,主要由特征选择,树的生成和剪枝三部分组成.它主要用来处理分类和回归问 ...
- 【机器学习笔记之三】CART 分类与回归树
本文结构: CART算法有两步 回归树的生成 分类树的生成 剪枝 CART - Classification and Regression Trees 分类与回归树,是二叉树,可以用于分类,也可以用于 ...
- weka实际操作--构建分类、回归模型
weka提供了几种处理数据的方式,其中分类和回归是平时用到最多的,也是非常容易理解的,分类就是在已有的数据基础上学习出一个分类函数或者构造出一个分类模型.这个函数或模型能够把数据集中地映射到某个给定的 ...
- AI - TensorFlow - 分类与回归(Classification vs Regression)
分类与回归 分类(Classification)与回归(Regression)的区别在于输出变量的类型.通俗理解,定量输出称为回归,或者说是连续变量预测:定性输出称为分类,或者说是离散变量预测. 回归 ...
- 【ML入门系列】(二)分类与回归
前言 在机器学习中,“分类”和“回归”这两个词经常听说,但很多时候我们却混为一谈.本文主要从应用场景.训练算法等几个方面来叙述两者的区别. 本质区别 分类和回归的区别在于输出变量的类型.分类的输出是离 ...
- 【Machine Learning】分类与回归 区别
一.分类与回归的区别 两类监督学习 Classification Regression 分类和回归的区别在于输出变量的类型(而非输入变量). 定性输出称为分类,或者说是离散变量预测(discrete) ...
随机推荐
- HDOJ 2016 数据的交换输出
Problem Description 输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数. Input 输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测 ...
- 【背包型动态规划】灵魂分流药剂(soultap) 解题报告
问题来源 BYVoid魔兽世界模拟赛 [问题描述] 皇家炼金师赫布瑞姆刚刚发明了一种用来折磨一切生物的新产品,灵魂分流药剂.灵魂分流药剂的妙处在于能够给服用者带来巨大的痛苦,但是却不会让服用者死去,而 ...
- Lucene实例教程
Lucene是apache组织的一个用java实现全文搜索引擎的开源项目. 其功能非常的强大,api也很简单.总得来说用Lucene来进行建立 和搜索和操作数据库是差不多的(有点像),Document ...
- 用urllib2实现一个下载器的思路
下载器的构造 用urllib2实现下载器时从以下几个层面实现功能和灵活性: handler redirect, cookie, proxy 动作 timeout 构造请求 headers: ua, c ...
- 用htaccess进行访问控制(转)
1. 文件访问控制 利用 httpd.conf 中的 Order.Files 及 FilesMatch 命令实现的访问控制可以满足大部分要求,但是当用户被拒绝时,他们看到的是硕大的“403 Forbi ...
- php 自定义求数组差集,效率比自带的array_diff函数还要快(转)
<?phpfunction array_different($array_1, $array_2) { $array_2 = array_flip($array_2); //将数组键值调换 fo ...
- RESTEasy + JBOSS 7 Hello world application---reference
RESTEasy is JBOSS provided implementation of JAX-RS specification for building RESTful Web Services ...
- Java基础知识强化之IO流笔记21:FileInputStream读取数据
1. 字节输入流的操作步骤: (1)创建字节输入流的对象 (2)调用read()方法读取数据,并把数据显示到控制台 (3)关闭字节输入流的对象资源 2. FileInputStream构造: File ...
- Android系统移植与驱动开发--第四章
第四章 源代码的下载和编译 一个android内核相当于4G,而一个Linux内个只有几百M,Linux内核相对于android内核来说实在是小巫见大巫.了解android源代码不一定要详细了解,只去 ...
- SSL证书制作
1.创建根证书秘钥文件(自己做CA)root.key: openssl genrsa -out root.key -aes256 2048 2.创建根证书的申请文件root.csr openssl r ...