參考資料apache
【1】 Spark MLlib 機器學習實踐機器學習
【2】 統計學習方法函數
一、Logistic分佈學習
設X是連續隨機變量,X服從Logistic分佈是指X具備下列分佈函數和密度函數spa
,
。其中u爲位置參數,γ爲形狀參數。以下圖:3d
分佈函數以(u,1/2)爲中心對稱,知足:,其中形狀參數γ越小,中心部分增長越快。code
二、Logistic迴歸模型blog
二項logistic迴歸模型是一種分類模型,由條件機率P(Y|X)表示,這裏隨機變量X取實數,而Y取0或者1。定義:get
和
it
Logistic迴歸比較兩個條件機率,將x歸爲較大條件機率的那一類。本質上它是將一個線性函數wx + b的輸出轉換爲了條件機率。
多項logistic迴歸模型是二項模型的擴展,支持多分類問題,模型以下:
三、邏輯迴歸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) } }