【機器學習】---邏輯迴歸從初識到應用

LHBlog發表於2018-01-23

一、前述

邏輯迴歸是一種分類演算法,對多元線性迴歸的結果做一定的縮放。是一種線性(x是一次的)有監督(有x,y)分類(要麼是正列,要麼是負例)演算法。是通過sigmod演算法的一次縮放。

sigmod函式解釋如下:

 

二、具體原理

前提和損失函式推倒:

-->轉化為似然的思想:

-->對轉換後的似然函式求偏導:

 

-->求完導數後,確定方向後

 

 

邏輯迴歸損失函式:

 

如果最後預測的結果大於0.5(預設)是正例 小於0.5是負例

做分類的誤差來源於兩種情況:

假設Y是正列 1-p^

假如本來是1這個類別:預測出來的結果是0.6則預測對了預測的誤差是1-0.6=0.4

假如本來是1這個類別:預測出來的結果是0.1 則誤差1-0.1=0.9

假設是負例p^

假設預測出來的是0.1 則誤差是0.1

假設預測出來的是0.6 則誤差是0.6

三、程式碼

#邏輯迴歸預測鳶尾花,根據花瓣的寬度
import numpy as np
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
import matplotlib.pyplot as plt


iris = datasets.load_iris()# 鳶尾花資料集
print(list(iris.keys()))
print(iris['DESCR'])#資料集的描述
print(iris['feature_names'])#資料集的特證名字 #150條資料 三種花 每種花50條資料
#根據花的花瓣,花萼,花蕊來分類
X = iris['data'][:, 3:] # 逗號左邊第一行到所有行 ,逗號右邊第3列開始到最後 總共4列 實際上就是最後一列
# print(X)
print(iris['target'])
y = (iris['target'] == 2).astype(np.int)
print(y) #保留類別為2的花。


log_reg = LogisticRegression()#構建邏輯迴歸
log_reg.fit(X, y)#根據最後一個花瓣的寬度來預測

X_new = np.linspace(0, 3, 1000).reshape(-1, 1)#0-3之間切分1000次
print(X_new)
y_proba = log_reg.predict_proba(X_new)#預測的概率 給一個0-1之間的一個概率值
y_hat = log_reg.predict(X_new)#預測的結果
print(y_proba)
print(y_hat)
plt.plot(X_new, y_proba[:, -1], 'g-', label='Iris-Virginica')
plt.plot(X_new, y_proba[:, 0], 'b--', label='Not Iris-Virginica')
plt.show()

print(log_reg.predict([[1.7], [1.5]]))
#PS 對應1.6的時候正列結果是鳶尾花 #小於1.6的時候是負例不是鳶尾花

PS:1.6是正負例的交界。

四、邏輯迴歸做多分類演算法

1、原理

2、結論

如果我們做三分類的話,相當於這裡平行計算出三個獨立的模型

誰的概率最大,最終就判定為哪個類別

 五、閾值修改

根據需求的變通 去除固定閾值0.5
• 癌症病人的判斷?
• 假如病人是癌症:
– 判斷成不是癌症
• 假如病人是非癌症
– 判斷是癌症
• 0.3(這裡調小了,所以負例少了,則本來不是癌症,最後預測的是癌症)

調閾值是在真正測試的時候調整的,訓練的時候不調整
• 雖然整體的錯誤率變大了,但是規避了一些不能接受的風險

相關文章