【機器學習筆記四】分類算法 - 邏輯迴歸

參考資料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)
  }
}
相關文章
相關標籤/搜索