参考资料
【1】 Spark MLlib 机器学习实践
【2】 统计学习方法
1、Logistic分布
设X是连续随机变量,X服从Logistic分布是指X具有下列分布函数和密度函数
,。其中u为位置参数,γ为形状参数。如下图:
分布函数以(u,1/2)为中心对称,满足:,其中形状参数γ越小,中心部分增加越快。
2、Logistic回归模型
二项logistic回归模型是一种分类模型,由条件概率P(Y|X)表示,这里随机变量X取实数,而Y取0或者1。定义:
和
Logistic回归比较两个条件概率,将x归为较大条件概率的那一类。本质上它是将一个线性函数wx + b的输出转换为了条件概率。
多项logistic回归模型是二项模型的扩展,支持多分类问题,模型如下:
3、逻辑回归Spark Mlib例子
package com.fredric.spark.logistic import org.apache.spark.mllib.classification.LogisticRegressionWithSGD import org.apache.spark.mllib.linalg.Vectors import org.apache.spark.mllib.regression.LabeledPoint import org.apache.spark.{SparkContext, SparkConf} /*- * 逻辑回归 * Fredric 2017 */ object logistic { def main(args:Array[String]): Unit ={ val conf = new SparkConf().setMaster("local").setAppName("logistic") val sc = new SparkContext(conf) val Array = new Array[LabeledPoint](10) //构造训练数据,虚拟一个以5为值的分类 //针对一元二项逻辑斯特回归分类 for(i <- 0 to 9){ if(i >= 5){ Array(i) = new LabeledPoint(1,Vectors.dense(i)) }else{ Array(i) = new LabeledPoint(0,Vectors.dense(i)) } } val data = sc.makeRDD(Array); val model = LogisticRegressionWithSGD.train(data, 50) //model.weights输出[0.20670127500478114] println(model.weights) var test = -2 //当输入为-1时,返回概率为0.0 //当输入为11时,返回概率为1.0 val result = model.predict(Vectors.dense(test)) println(result) //验证该方式 //计算P(Y=1|X),测算输入x返回1的条件概率 val res1 = Math.exp(model.weights(0)*test)/(1 + Math.exp(model.weights(0)*test)) //计算P(Y=0|X),测算输入x返回0的条件概率 val res0 = 1/(1 + Math.exp(model.weights(0) * test)) //输出:for target:-2 propalitity for 1 is : 0.3980965348017618 propalitity for 0 is : 0.6019034651982381 //根据两个条件概率的比较可知-2属于分类0 println("for target:" + test + " propalitity for 1 is : " + res1 + " propalitity for 0 is : " + res0) } }