邏輯回歸
常用于分類中將線性回歸轉(zhuǎn)換為概率值[0,1]
image
損失函數(shù)重新定義
image
當(dāng)有多個樣本時
image
代入
image
scikit_learn
image
使用邏輯回歸會默認(rèn)自動使用L2正則化陶缺,為了必須使用正則化涎劈,所以我們前面說的正則化前的比重參數(shù)就被刪除了, 轉(zhuǎn)而為之的是超參數(shù)C忙灼,這個C是乘以損失函數(shù)的杭攻。也就是讓我們用來調(diào)節(jié)損失函數(shù)的比重,但正則化一定會存在
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
def PolynomialLogisticRegression(degree, C, penalty='l2'):
return Pipeline([
('poly', PolynomialFeatures(degree=degree)),
('std_scaler', StandardScaler()),
('log_reg', LogisticRegression(C=C, penalty=penalty))#C為損失函數(shù)權(quán)重猫态,penalty為使用的正則算法
])
poly_log_reg = PolynomialLogisticRegression(degree=2,C=0.1)
poly_log_reg.fit(X_train, y_train)
poly_log_reg.score(X_train, y_train)
也可以單獨(dú)使用
from sklearn.multiclass import OneVsRestClassifier
ovr = OneVsRestClassifier(log_reg)
ovr.fit(X_train, y_train)
ovr.score(X_test, y_test)
邏輯回歸解決多分類
-
OvR (One vs Rest)
image一針對剩余佣蓉。原理是 在有多分類的情況下,先將多分類問題轉(zhuǎn)變?yōu)?分類問題亲雪。具體:將其中一分類變?yōu)?勇凭,其余都為0.再使用邏輯回歸,看樣本屬于1的概率义辕。之后以此類推虾标,所有分類都使用一針對剩余。最終會得到每個樣本的對應(yīng)概率灌砖,選擇最大的就為分類值
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.linear_model import LogisticRegression iris = datasets.load_iris() X = iris.data y = iris.target from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666) log_reg = LogisticRegression()#默認(rèn)使用OvR log_reg.fit(X_train, y_train) log_reg.score(X_test, y_test)
-
OvO (One vs One)
image一對一璧函。原理是 在有多分類的情況下,將數(shù)據(jù)分割成兩兩分類的情況基显。轉(zhuǎn)換為2分類后使用邏輯回歸蘸吓。判斷樣本在哪個分類中的概率最大,選擇最大的分類值撩幽。這種方式事件復(fù)雜度更高
log_reg = LogisticRegression(multi_class="multinomial", solver="newton-cg")#multi_class默認(rèn)使用OvR,這里使用OvO库继。當(dāng)使用OvO時箩艺,因為scikit-learn不是使用梯度下降,是使用更快的算法宪萄,所以這里要重新指定算法來計算OvO
也可以單獨(dú)使用
from sklearn.multiclass import OneVsOneClassifier
ovo = OneVsOneClassifier(log_reg)
ovo.fit(X_train, y_train)
ovo.score(X_test, y_test)