一、什么是邏輯回歸
1、邏輯回歸(Logistic Regression)是機(jī)器學(xué)習(xí)中的一種分類模型,邏輯回歸是一種分類算法,雖然名字中帶有回歸,但是它與回歸之間有一定的聯(lián)系。由于算法的簡單和高效,在實際中應(yīng)用非常廣泛
2、叫回歸,但是它是一個分類算法
二、邏輯回歸的應(yīng)用場景
1、應(yīng)用場景
廣告點擊率:預(yù)測是否會被點擊
是否為垃圾郵件
是否患病
金融詐騙:是否為金融詐騙
虛假賬號:是否為虛假賬號
均為二元問題
2、看到上面的例子,我們可以發(fā)現(xiàn)其中的特點,那就是都屬于兩個類別之間的判斷。邏輯回歸就是解決二分類問題的利器
會有一個正例,和一個反例
三、邏輯回歸的原理
1、邏輯回歸的輸入
線性回歸的輸出,就是邏輯回歸的輸入
邏輯回歸的輸入就是一個線性回歸的結(jié)果
2、怎么用輸入來分類
要進(jìn)行下一步處理,帶入到sigmoid函數(shù)當(dāng)中,我們把它叫做激活函數(shù)
3、sigmoid函數(shù)
可以理解為,f(x)=1/(1+e^(-x)),1加上e的負(fù)x次方分之1
sigmoid函數(shù)又稱S型函數(shù),它是一種非線性函數(shù),可以將任意實數(shù)值映射到0-1之間的值,通常用于分類問題。它的表達(dá)式為:f(x)=1/(1+e^(-x)),其中e為自然對數(shù)的底數(shù)。它的輸出值均位于0~1之間,當(dāng)x趨向正無窮時,f(x)趨向1;當(dāng)x趨向負(fù)無窮時,f(x)趨向0
4、分析
將線性回歸的輸出結(jié)果,代入到x的部分
輸出結(jié)果:[0, 1]區(qū)間中的一個概率值,默認(rèn)為0.5為閾值
邏輯回歸最終的分類是通過屬于某個類別的概率值來判斷是否屬于某個類別,并且這個類別默認(rèn)標(biāo)記為1(正例),另外的一個類別會標(biāo)記為0(反例)。(方便損失計算)
5、假設(shè)函數(shù)/線性模型
1/(1 + e^(-(w1x1 + w2x2 + w3x3 + ... + wnxn +b)))
如何得出權(quán)重和偏置,使得這個模型可以準(zhǔn)確的進(jìn)行分類預(yù)測呢?
6、損失函數(shù)(真實值和預(yù)測值之間的差距)
我們可以用求線性回歸的模型參數(shù)的方法,來構(gòu)建一個損失函數(shù)
線性回歸的損失函數(shù):(y_predict - y_true)平方和/總數(shù),它是一個值
而邏輯回歸的真實值和預(yù)測值,是否屬于某個類別
所以就不能用均方誤差和最小二乘法來構(gòu)建
要使用對數(shù)似然損失
7、優(yōu)化損失(正規(guī)方程和梯度下降)
用一種優(yōu)化方法,將損失函數(shù)取得最小值,所對應(yīng)的權(quán)重值就是我們求的模型參數(shù)
四、對數(shù)似然損失
1、公式
邏輯回歸的損失,稱之為對數(shù)似然損失
(1)它是一個分段函數(shù)
(2)如果y=1,真實值是1,屬于這個類別,損失就是 -log(y的預(yù)測值)
(3)如果y=0,真實值是0,不屬于這個類別,損失就是 -log(1-y的預(yù)測值)
2、怎么理解單個的式子呢?這個要根據(jù)log的函數(shù)圖像來理解
當(dāng)y=1時:(橫坐標(biāo)是y的預(yù)測值)
前提真實值是1,如果預(yù)測值越接近于1,則損失越接近0。如果預(yù)測值越接近于0,則損失越大
當(dāng)y=0時:(橫坐標(biāo)是y的預(yù)測值)
前提真實值是0,如果預(yù)測值越接近1,則損失越大
3、綜合完整損失函數(shù)
損失函數(shù):-(y真實*logy預(yù)測+(1-y真實)*log(1-y預(yù)測)),求和
是線性回歸的輸出,經(jīng)過sigmoid函數(shù)映射之后的一個概率值
4、計算樣例
五、優(yōu)化損失
同樣使用梯度下降優(yōu)化算法,去減少損失函數(shù)的值。這樣去更新邏輯回歸前面對應(yīng)算法的權(quán)重參數(shù),提升原本屬于1類別的概率,降低原本是0類別的概率
六、邏輯回歸API
1、sklearn.linear_model.LogisticRegression(solver='liblinear', penalty='l2', C=1.0)
solver:優(yōu)化求解方式(默認(rèn)開源的liblinear庫實現(xiàn),內(nèi)部使用了坐標(biāo)軸下降法來迭代優(yōu)化損失函數(shù))
? ? auto:根據(jù)數(shù)據(jù)集自動選擇,隨機(jī)平均梯度下降
penalty:正則化的種類
C:正則化力度
2、LogisticRegression方法相當(dāng)于SGDClassifier(loss="log", penalty=" ")
SGDClassifier是一個分類器
SGDClassifier實現(xiàn)了一個普通的隨機(jī)梯度下降學(xué)習(xí),也支持平均隨機(jī)梯度下降法(ASGD),可以通過設(shè)置average=True
而使用LogisticRegression它的優(yōu)化器已經(jīng)可以使用SAG
七、案例:癌癥分類預(yù)測-良 / 惡性乳腺癌腫瘤預(yù)測
1、數(shù)據(jù)集
數(shù)據(jù):
https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data
數(shù)據(jù)的描述:
https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.names
2、數(shù)據(jù)的描述
# Attribute Domain
-- -----------------------------------------
1. Sample code number id number
2. Clump Thickness 1 - 10
3. Uniformity of Cell Size 1 - 10
4. Uniformity of Cell Shape 1 - 10
5. Marginal Adhesion 1 - 10
6. Single Epithelial Cell Size 1 - 10
7. Bare Nuclei 1 - 10
8. Bland Chromatin 1 - 10
9. Normal Nucleoli 1 - 10
10. Mitoses 1 - 10
11. Class: (2 for benign, 4 for malignant)
第一列:樣本的編號
第二到十列:特征
第十一列:分類(2代表良性,4代表惡性)
3、流程分析
(1)獲取數(shù)據(jù)
? ? 讀取的時候加上names
(2)數(shù)據(jù)處理
? ? 處理缺失值
(3)數(shù)據(jù)集劃分
(4)特征工程
? ? 無量綱化處理—標(biāo)準(zhǔn)化
(5)邏輯回歸預(yù)估器
(6)模型評估
4、代碼文章來源:http://www.zghlxwxcb.cn/news/detail-723608.html
import pandas as pd
import numpy as np
# 1、讀取數(shù)據(jù)
column_name = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
'Normal Nucleoli', 'Mitoses', 'Class']
data = pd.read_csv("breast-cancer-wisconsin/breast-cancer-wisconsin.data", names=column_name)
data
# 2、缺失值處理
# 1)?替換為np.nan
data = data.replace(to_replace="?", value=np.nan)
# 2)刪除缺失樣本
data.dropna(inplace=True)
data
# 不存在缺失值
data.isnull().any()
# 3、劃分?jǐn)?shù)據(jù)集
from sklearn.model_selection import train_test_split
# 篩選特征值和目標(biāo)值
x = data.iloc[:, 1:-1] # 行都要,列從1到-1
y = data["Class"]
x.head()
y.head()
x_train, x_test, y_train, y_test = train_test_split(x, y)
# 4、標(biāo)準(zhǔn)化
from sklearn.preprocessing import StandardScaler
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
x_train
from sklearn.linear_model import LogisticRegression
# 5、預(yù)估器流程
estimator = LogisticRegression()
estimator.fit(x_train, y_train)
# 邏輯回歸的模型參數(shù):回歸系數(shù)和偏置
# 有幾個特征,就有幾個回歸系數(shù)
estimator.coef_
estimator.intercept_
# 6、模型評估
# 方法1:直接比對真實值和預(yù)測值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比對真實值和預(yù)測值:\n", y_test == y_predict)
# 方法2:計算準(zhǔn)確率
score = estimator.score(x_test, y_test)
print("準(zhǔn)確率為:\n", score)
5、運行結(jié)果文章來源地址http://www.zghlxwxcb.cn/news/detail-723608.html
到了這里,關(guān)于機(jī)器學(xué)習(xí)基礎(chǔ)之《回歸與聚類算法(4)—邏輯回歸與二分類(分類算法)》的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!