Spark算法初入門-邏輯迴歸篇3

目錄

邏輯迴歸:

二項邏輯迴歸:

多項邏輯迴歸:


原文參考Apache Spark官方網站http://spark.apache.org/docs/2.2.0/ml-classification-regression.html#logistic-regression

邏輯迴歸:
 

邏輯迴歸是預測分類相應的常用方法。廣義線性迴歸的一個特例是預測結果的概率。在spark.ml邏輯迴歸中,可以使用二線邏輯迴歸來預測二元結果,或者可以使用多項邏輯迴歸來預測多類結果。使用該family參數在這兩種算法之間繼續寧選擇,或者保持不設置,Spark將推斷出正確的變量。

通過將family參數設置爲“多項式”,可以將多項邏輯迴歸用於二進制分類。它將產生兩組係數和兩個截距。

但在不具有常量非零列的數據集上截斷LogsticRegressionMode時,Spark MLlib爲常量非零列輸出零係數。

此行爲與R glmnet相同,但是不同於LIBSVM。

---在分類問題中,我們嘗試預測的是結果是否屬於某一個類(例如正確或錯誤)。分類問題的例子有:判斷一封電子郵件是否是垃圾郵件;判斷一次金融交易是否是欺詐;之前我們也談到了腫瘤分類的例子,區別一個腫瘤是惡性的還是良性的。

--來自黃海廣老師的學習筆記-https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes

二項邏輯迴歸:
 

我們從二元的分類問題開始討論。

我們將因變量(dependent variable)可能屬於的兩個類分別成爲負向類(negative class)和正向類(positive class),則因變量y∈0,1 ,其中0表示負向類,1表示正向類。

-------------------------上圖來自黃海廣老師個人學習筆記----https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes

我們要用線性迴歸算法來解決一個分類問題,對於分類,y取值爲0或者1,但如果你使用的線性迴歸,那麼假設函數的輸出值可能遠大於1,或者遠小於0,即使所有訓練樣本的標籤y都等於0或1.儘管我們知道標籤應該取值0或1,但是如果算法得到的值永遠大於1或者小於0的話,就會覺得很奇怪。所以我們在接下來要研究的算法就叫做邏輯迴歸算法,這個算法的性質是:它的輸出值永遠在0到1之間。

Spark官網給出的邏輯迴歸的Demo:
 

/**
  * 邏輯迴歸的Demo
  */
object LRDemo {
  def main(args: Array[String]): Unit = {

    // 加載訓練數據
    val session = SparkSession
      .builder()
      .master("local[3]")
      .appName("LRDemo")
      .getOrCreate()
    val training = session.read.format("libsvm").load("C:\\tools\\spark-2.2.1\\data\\mllib\\sample_libsvm_data.txt")

    val lr = new LogisticRegression()
      .setMaxIter(10)   // 設置最大迭代次數 默認100
      .setRegParam(0.3)  // 設置正則化係數  默認0 用於防止過擬合
      .setElasticNetParam(0.8)  // 正則化範式比(默認0),正則化有兩種形式:L1(Lasso)和L2(Ridge),L1用於特徵的稀疏化,L2用於防止過擬合

    // 訓練模型
    val lrModel = lr.fit(training)

    // 打印coefficients和intercept
    println(s"每個特徵對應係數Coefficients:${lrModel.coefficients} 截距Intercept: ${lrModel.intercept}")

    // 我們也可以使用多項式進行二元分類
    val mlr = new LogisticRegression()
      .setMaxIter(10) // 設置最大迭代次數 默認100
      .setRegParam(0.3) // 設置正則化係數 默認0 用於防止過擬合
      .setElasticNetParam(0.8) // 正則化範式比(默認0),正則化有兩種形式:L1(Lasso)和L2(Ridge),L1用於特徵的稀疏化,L2用於防止過擬合
      .setFamily("multinomial")

    val mlrModel = mlr.fit(training)

    println(s"Multinomial coefficients:${mlrModel.coefficientMatrix}")
    println(s"Multinomial coefficients:${mlrModel.interceptVector}")
}
}

多項邏輯迴歸:
 

待續~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章