Infi-chu:python
http://www.cnblogs.com/Infi-chu/算法
邏輯迴歸(Logistic Regression)是機器學習中的一種分類模型,邏輯迴歸是一種分類算法,雖然名字中帶有迴歸,可是它與迴歸之間有必定的聯繫。因爲算法的簡單和高效,在實際中應用很是普遍。機器學習
1、簡介函數
1.應用場景性能
特色:都屬於兩個類別之間的判斷。邏輯迴歸就是解決二分類問題的利器學習
2.公式優化
輸入:3d
邏輯迴歸的輸入就是一個線性迴歸的結果。rest
激活函數:blog
判斷標準
【注】
邏輯迴歸最終的分類是經過屬於某個類別的機率值來判斷是否屬於某個類別,而且這個類別默認標記爲1(正例),另外的一個類別會標記爲0(反例)。(方便損失計算)
輸出結果解釋(重要):假設有兩個類別A,B,而且假設咱們的機率值爲屬於A(1)這個類別的機率值。如今有一個樣本的輸入到邏輯迴歸輸出結果0.6,那麼這個機率值超過0.5,意味着咱們訓練或者預測的結果就是A(1)類別。那麼反之,若是得出結果爲0.3那麼,訓練或者預測結果就爲B(0)類別。
因此接下來咱們回憶以前的線性迴歸預測結果咱們用均方偏差衡量,那若是對於邏輯迴歸,咱們預測的結果不對該怎麼去衡量這個損失呢?咱們來看這樣一張圖:
3.損失&優化
損失:
邏輯迴歸的損失,稱之爲對數似然損失,公式以下:
eg.
【注】
log(P), P值越大,結果越小。
優化:
一樣使用梯度降低優化算法,去減小損失函數的值。這樣去更新邏輯迴歸前面對應算法的權重參數,提高本來屬於1類別的機率,下降本來是0類別的機率。
2、API
sklearn.linear_model.LogisticRegression(solver='liblinear', penalty=‘l2’, C = 1.0)
solver可選參數:{'liblinear', 'sag', 'saga','newton-cg', 'lbfgs'},
對於小數據集來講,「liblinear」是個不錯的選擇,而「sag」和'saga'對於大型數據集會更快。
對於多類問題,只有'newton-cg', 'sag', 'saga'和'lbfgs'能夠處理多項損失;「liblinear」僅限於「one-versus-rest」分類。
penalty:正則化的種類
C:正則化力度
【注】
默認將數量少的當作正例
LogisticRegression方法至關於 SGDClassifier(loss="log", penalty=" "),SGDClassifier實現了一個普通的隨機梯度降低學習。而使用LogisticRegression(實現了SAG)
3、分類評估方法
1.分類評估方法
精準率&召回率
混淆矩陣
在分類任務下,預測結果(Predicted Condition)與正確標記(True Condition)之間存在四種不一樣的組合,構成混淆矩陣(適用於多分類)
精確率(Precision)&召回率(Recall)
精確率:預測結果爲正例樣本中真實爲正例的比例
召回率:真實爲正例的樣本中預測結果爲正例的比例(查得全,對正樣本的區分能力)
F1-score
還有其餘的評估標準,F1-score,反映了模型的穩健型
分類評估報告API
ret = classification_report(y_test, y_predict, labels=(2,4), target_names=("良性", "惡性")) print(ret)
2.ROC曲線&AUC指標
TPR&FPR:
ROC曲線
ROC曲線的橫軸就是FPRate,縱軸就是TPRate,當兩者相等時,表示的意義則是:對於不論真實類別是1仍是0的樣本,分類器預測爲1的機率是相等的,此時AUC爲0.5
AUC指標:
【注】
最終AUC的範圍在[0.5, 1]之間,而且越接近1越好
AUC計算API
from sklearn.metrics import roc_auc_score
# 0.5~1之間,越接近於1約好 y_test = np.where(y_test > 2.5, 1, 0) print("AUC指標:", roc_auc_score(y_test, y_predict)
3.總結
4、ROC曲線繪製
1.若是機率的序列是(1:0.9,2:0.7,3:0.8,4:0.6,5:0.5,6:0.4)
序列如圖:
步驟:
1)把機率序列從高到低排序,獲得順序(1:0.9,3:0.8,2:0.7,4:0.6,5:0.5,6:0.4);
2)從機率最大開始取一個點做爲正類,取到點1,計算獲得TPR=0.5,FPR=0.0;
3)從機率最大開始,再取一個點做爲正類,取到點3,計算獲得TPR=1.0,FPR=0.0;
4)再從最大開始取一個點做爲正類,取到點2,計算獲得TPR=1.0,FPR=0.25;
5)以此類推,獲得6對TPR和FPR。
而後把這6對數據組成6個點(0,0.5),(0,1.0),(0.25,1),(0.5,1),(0.75,1),(1.0,1.0)。
這6個點在二維座標系中能繪出來。
2.若是機率的序列是(1:0.9,2:0.8,3:0.7,4:0.6,5:0.5,6:0.4)
序列如圖:
步驟:
1)把機率序列從高到低排序,獲得順序(1:0.9,2:0.8,3:0.7,4:0.6,5:0.5,6:0.4);
2)從機率最大開始取一個點做爲正類,取到點1,計算獲得TPR=0.5,FPR=0.0;
3)從機率最大開始,再取一個點做爲正類,取到點2,計算獲得TPR=0.5,FPR=0.25;
4)再從最大開始取一個點做爲正類,取到點3,計算獲得TPR=1.0,FPR=0.25;
5)以此類推,獲得6對TPR和FPR。
而後把這6對數據組成6個點(0,0.5),(0.25,0.5),(0.25,1),(0.5,1),(0.75,1),(1.0,1.0)。
這6個點在二維座標系中能繪出來。
3.若是機率的序列是(1:0.4,2:0.6,3:0.5,4:0.7,5:0.8,6:0.9)
序列如圖:
步驟:
1)把機率序列從高到低排序,獲得順序(6:0.9,5:0.8,4:0.7,2:0.6,3:0.5,1:0.4);
2)從機率最大開始取一個點做爲正類,取到點6,計算獲得TPR=0.0,FPR=0.25;
3)從機率最大開始,再取一個點做爲正類,取到點5,計算獲得TPR=0.0,FPR=0.5;
4)再從最大開始取一個點做爲正類,取到點4,計算獲得TPR=0.0,FPR=0.75;
5)以此類推,獲得6對TPR和FPR。
而後把這6對數據組成6個點(0.25,0.0),(0.5,0.0),(0.75,0.0),(1.0,0.0),(1.0,0.5),(1.0,1.0)。
這6個點在二維座標系中能繪出來。
4.意義
如上圖的例子,總共6個點,2個正樣本,4個負樣本,取一個正樣本和一個負樣本的狀況總共有8種。
上面的第一種狀況,從上往下取,不管怎麼取,正樣本的機率總在負樣本之上,因此分對的機率爲1,AUC=1。再看ROC曲線,它的積分是什麼?也是1,ROC曲線的積分與AUC相等。
上面第二種狀況,若是取到了樣本2和3,那就分錯了,其餘狀況都分對了;因此分對的機率是0.875,AUC=0.875。再看ROC曲線,它的積分也是0.875,ROC曲線的積分與AUC相等。
上面的第三種狀況,不管怎麼取,都是分錯的,因此分對的機率是0,AUC=0.0。再看ROC曲線,它的積分也是0.0,ROC曲線的積分與AUC相等。
很牛吧,其實AUC的意思是——Area Under roc Curve,就是ROC曲線的積分,也是ROC曲線下面的面積。
繪製ROC曲線的意義很明顯,不斷地把可能分錯的狀況扣除掉,從機率最高往下取的點,每有一個是負樣本,就會致使分錯排在它下面的全部正樣本,因此要把它下面的正樣本數扣除掉(1-TPR,剩下的正樣本的比例)。總的ROC曲線繪製出來了,AUC就定了,分對的機率也能求出來了。