目錄
原文參考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}")
}
}
多項邏輯迴歸:
待續~