参考资料
【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.logisticimport 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.0val 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属于分类0println("for target:" + test + " propalitity for 1 is : " + res1 + " propalitity for 0 is : " + res0)} }