原創文章,轉載請注明: 轉載自http://www.cnblogs.com/tovin/p/3816289.html
本文以spark 1.0.0版本MLlib算法為准進行分析
一、代碼結構
邏輯回歸代碼主要包含三個部分
1、classfication:邏輯回歸分類器
2、optimization:優化方法,包含了隨機梯度、LBFGS兩種算法
3、evaluation:算法效果評估計算
二、邏輯回歸分類器
1、LogisticRegressionModel類
(1) 根據訓練數據集得到的weights來預測新的數據點的分類
(2)預測新數據分類
采用 這個公式來進行預測。
其中w為權重向量weightMatrix,X表示預測數據dataMatrix,a表示intercept,intercept默認為0.0。
threshold變量用來控制分類的閾值,默認值為0.5。表示如果預測值<threshold則為分類0.0,否則為1.0
如果threshold設置為空,這會輸出實際值
2、LogisticRegressionWithSGD類
此類主要接收外部數據集、算法參數等輸入進行訓練得到一個邏輯回歸模型LogisticRegressionModel
接收的輸入參數包括:
input:輸入數據集合,分類標簽lable只能是1.0和0.0兩種,feature為double類型
numIterations:迭代次數,默認為100
stepSize:迭代步伐大小,默認為1.0
miniBatchFraction:每次迭代參與計算的樣本比例,默認為1.0
initialWeights:weight向量初始值,默認為0向量
regParam:regularization正則化控制參數,默認值為0.0
在LogisticRegressionWithSGD中可以看出它使用了GradientDescent(梯度下降)來優化weight參數的
3、GeneralizedLinearModel類
LogisticRegressionWithSGD中的run方法會調用GeneralizedLinearModel中的run方法來訓練訓練數據
在run方法中最關鍵的就是optimize方法,正是通過它來求得weightMatrix的最優解
三、優化方法
邏輯回歸采用了梯度下降算法來尋找weight的最優解
邏輯回歸cost function
其中:
對J(Θ)求導數后得到梯度為:
1、GradientDescent類
負責梯度下降算法的執行,分為Gradient梯度計算與weight update兩個步驟來計算
2、Gradient類
負責算法梯度計算,包含了LogisticGradient、LeastSquaresGradient、HingeGradient三種梯度計算實現,本文主要介紹LogisticGradient的實現:
其中data為公式中的x,label為公式中的y,weights為公式中的Θ
gradient就是對J(Θ)求導的計算結果, loss為J(Θ)的計算結果
3、Updater類
負責weight的迭代更新計算,包含了SimpleUpdater、L1Updater、SquaredL2Updater三種更新策略
(1)SimpleUpdater
沒有使用regularization,weights更新規則為:
其中:iter表示這是執行的第幾次迭代
(2)L1Updater
使用了L1 regularization(R(w) = ||w||),利用soft-thresholding方法求解,weight更新規則為:
signum是符號函數,它的取值如下:
(3)SquaredL2Updater
使用了L2 regularization(R(w) = 1/2 ||w||^2),weights更新規則為:
注意:Mllib中的邏輯回歸算法默認使用的SimpleUpdater
四、算法效果評估
BinaryClassificationMetrics類中包含了多種算法算法效果評估計算方法:
相關 | 不相關 | |
檢索到 | true positives (tp) | false positives(fp) |
未檢索到 |
false negatives(fn) | true negatives (tn) |
1、ROC(receiver operating characteristic接收者操作特征)
調整分類器threshold取值,以FPR為橫坐標,TPR為縱坐標做ROC曲線
Area Under roc Curve(AUC):處於ROC curve下方的那部分面積的大小
通常,AUC的值介於0.5到1.0之間,較大的AUC代表了較好的性能
2、precision-recall(准確率-召回率)
准確率和召回率是互相影響的,理想情況下肯定是做到兩者都高,
但是一般情況下准確率高、召回率就低,召回率低、准確率高,
當然如果兩者都低,那是什么地方出問題了
3、F-Measure
在precision與recall都要求高的情況下,可以用F來衡量
原創文章,轉載請注明: 轉載自http://www.cnblogs.com/tovin/p/3816289.html