逻辑回归
一、基本思想
逻辑回归是一种用于分类任务的经典机器学习算法。
我们之前介绍过机器学习算法大致可以分为两类:
① 生 成 学 习 : 估 计 P ( x , y ) = P ( x ∣ y ) P ( y ) ② 判 别 学 习 : 估 计 P ( y ∣ x ) \begin{aligned}
&①生成学习:估计P(x,y)=P(x|y)P(y)\\
&②判别学习:估计P(y|x)
\end{aligned}
① 生 成 学 习 : 估 计 P ( x , y ) = P ( x ∣ y ) P ( y ) ② 判 别 学 习 : 估 计 P ( y ∣ x )
上节学习的朴素贝叶斯属于生成学习算法,而逻辑回归则属于判别学习算法,它与高斯朴素贝叶斯相对应,即判别式的高斯朴素贝叶斯。
逻辑回归的核心函数为:s i g m o i d sigmoid s i g m o i d 函数,也成为激活函数:
s i g m o i d ( x ) = σ ( x ) = 1 1 + e − x sigmoid(x)=\sigma(x)=\frac{1}{1+e^{-x}}
s i g m o i d ( x ) = σ ( x ) = 1 + e − x 1
我们对逻辑回归模型的建模如下:
P ( y ∣ x ) = 1 1 + e − y ( w T x + b ) P(y|x)=\frac{1}{1+e^{-y(w^Tx+b)}}
P ( y ∣ x ) = 1 + e − y ( w T x + b ) 1
与感知机原理相同,我们利用升维将偏差项b b b 处理到w w w 中,则模型简化为:
P ( y ∣ x ) = 1 1 + e − y ( w T x ) P(y|x)=\frac{1}{1+e^{-y(w^Tx)}}
P ( y ∣ x ) = 1 + e − y ( w T x ) 1
二、逻辑回归的参数
在逻辑回归模型中,重要的参数也为w w w ,因此我们需要用到之前学过的几个概率估计方法对其进行估计。
2.1 极大似然估计(MLE)
利用极大似然估计逻辑回归的参数:在M L E MLE M L E 中,要极大化的条件数据为P ( Y ∣ X , w ) P(Y|X,w) P ( Y ∣ X , w ) ,X , Y X,Y X , Y 为训练数据,我们要找到一个合适的w w w 使得特征向量集为X X X 时,观察到标签Y Y Y 的概率最大
X : d × n 维 矩 阵 , 即 X = [ x 1 → , x 2 → , . . . , x n → ] ∈ R d × n Y : n 维 向 量 , 即 Y = [ y 1 , y 2 , . . . , y n ] \begin{aligned}
&X:d\times n维矩阵,即X=[\overrightarrow {x_1},\overrightarrow{x_2},...,\overrightarrow{x_n}]\in R^{d\times n}\\
&Y:n维向量,即Y=[y_1,y_2,...,y_n]
\end{aligned}
X : d × n 维 矩 阵 , 即 X = [ x 1 , x 2 , . . . , x n ] ∈ R d × n Y : n 维 向 量 , 即 Y = [ y 1 , y 2 , . . . , y n ]
M L E MLE M L E 的假设为:
P ( Y ∣ X , w ) = ∏ i = 1 n P ( y i ∣ x i , w ) P(Y|X,w)=\prod_{i=1}^nP(y_i|x_i,w)
P ( Y ∣ X , w ) = i = 1 ∏ n P ( y i ∣ x i , w )
由此,我们对参数w w w 进行的极大似然估计过程为:
w ^ M L E = a r g m a x w P ( Y ∣ X , w ) = a r g m a x w ∏ i = 1 n P ( y i ∣ x i , w ) = a r g m a x w ∑ i = 1 n log P ( y i ∣ x i , w ) = a r g m a x w ∑ i = 1 n log 1 1 + e − y i ( w T x i ) = a r g m a x w − log ( 1 + e − y i ( w T x i ) ) = a r g m i n w log ( 1 + e − y i ( w T x i ) ) \begin{aligned}
&\hat{w}_{MLE}=\underset{w}{argmax}~P(Y|X,w)=\underset{w}{argmax}~\prod_{i=1}^nP(y_i|x_i,w)\\
&~~~~~~~~~~~=\underset{w}{argmax}~\sum_{i=1}^n\log P(y_i|x_i,w)=\underset{w}{argmax}~\sum_{i=1}^n\log \frac{1}{1+e^{-y_i(w^Tx_i)}}\\
&~~~~~~~~~~~=\underset{w}{argmax}~-\log(1+e^{-y_i(w^Tx_i)})=\underset{w}{argmin}~\log(1+e^{-y_i(w^Tx_i)})
\end{aligned}
w ^ M L E = w a r g ma x P ( Y ∣ X , w ) = w a r g ma x i = 1 ∏ n P ( y i ∣ x i , w ) = w a r g ma x i = 1 ∑ n log P ( y i ∣ x i , w ) = w a r g ma x i = 1 ∑ n log 1 + e − y i ( w T x i ) 1 = w a r g ma x − log ( 1 + e − y i ( w T x i ) ) = w a r g min log ( 1 + e − y i ( w T x i ) )
为了求解w w w ,我们引入函数l ( w ) l(w) l ( w ) :在负数域上求解− l ( w ) -l(w) − l ( w ) 的最大值:
l ( w ) = ∑ i = 1 n log ( 1 + e − y i ( w T x i ) ) l(w)=\sum_{i=1}^n\log(1+e^{-y_i(w^Tx_i)})
l ( w ) = i = 1 ∑ n log ( 1 + e − y i ( w T x i ) )
我们要寻找max { ∣ − l ( w ) ∣ } \max\{|-l(w)|\} max { ∣ − l ( w ) ∣ } 所对应的w w w 。
2.1.1 1-D Example
我们考虑一个1维问题,如下图所示:+ + + 表示正类,o o o 表示负类:
如上图所示,x 0 x_0 x 0 恒为1,数据点特征的不同仅为x 1 x_1 x 1 的不同,本质上是一个1维的问题:
x = [ x 0 , x 1 ] , w = [ w 0 , w 1 ] , l ( w ) = l ( [ w 0 , w 1 ] ) \begin{aligned}
&x=[x_0,x_1],w=[w_0,w_1],l(w)=l([w_0,w_1])
\end{aligned}
x = [ x 0 , x 1 ] , w = [ w 0 , w 1 ] , l ( w ) = l ( [ w 0 , w 1 ] )
右图为l ( w ) l(w) l ( w ) 所对应的曲面,我们可以确定:w 0 = 1 , w 1 = 0.7 w_0=1,w_1=0.7 w 0 = 1 , w 1 = 0 . 7 时,∣ − l ( w ) ∣ |-l(w)| ∣ − l ( w ) ∣ 取得最大值,因此我们计算出w = [ 1 , 0.7 ] w=[1,0.7] w = [ 1 , 0 . 7 ]
我们也可以用热力图更直观得得到w w w 的最佳取值:
以下是部分样例对上述图像的贡献图:
2.1.2 2-D Example
我们考虑一个2维问题,如下图所示:+ + + 表示正类,o o o 表示负类:
根据热力图,我们得到∣ − l ( w ) ∣ |-l(w)| ∣ − l ( w ) ∣ 在w = [ − 0.81.0.81 ] w=[-0.81.0.81] w = [ − 0 . 8 1 . 0 . 8 1 ] 时取得最大值。
M L E MLE M L E 计算结果如下所示,其中红色表示正类别的概率很高。黑线表示M L E MLE M L E 学习的决策边界。
决 策 边 界 : P ( y = − 1 ∣ x ) = P ( y = + 1 ∣ x ) 即 : 1 1 + e w T x = 1 1 + e − w T x → w T x = − w T x → w T x = 0 w = [ w 1 , w 2 ] = [ − 0.81 , 0.81 ] , x = [ x 1 , x 2 ] w T x = w 1 ⋅ x 1 + w 2 ⋅ x 2 = − 0.81 x 1 + 0.81 x 2 = 0 → x 1 = x 2 \begin{aligned}
&决策边界:P(y=-1|x)=P(y=+1|x)\\
&即:\frac{1}{1+e^{w^Tx}}=\frac{1}{1+e^{-w^Tx}}\rightarrow w^Tx=-w^Tx\rightarrow w^Tx=0\\
&w=[w_1,w_2]=[-0.81,0.81],x=[x_1,x_2]\\
&w^Tx=w_1\cdot x_1+w_2\cdot x_2=-0.81x_1+0.81x_2=0\rightarrow x_1=x_2
\end{aligned}
决 策 边 界 : P ( y = − 1 ∣ x ) = P ( y = + 1 ∣ x ) 即 : 1 + e w T x 1 = 1 + e − w T x 1 → w T x = − w T x → w T x = 0 w = [ w 1 , w 2 ] = [ − 0 . 8 1 , 0 . 8 1 ] , x = [ x 1 , x 2 ] w T x = w 1 ⋅ x 1 + w 2 ⋅ x 2 = − 0 . 8 1 x 1 + 0 . 8 1 x 2 = 0 → x 1 = x 2
2.2 极大后验估计(MAP)
在极大后验估计中,我们将w w w 视为一个随机变量,并且可以预先指定它的先验分布。我们先预先指定w w w 的先验分布:
w ∼ N ( 0 , σ 2 ) P ( w ) = 1 2 π σ 2 e − w T w 2 σ 2 w\sim \mathcal{N}(0,\sigma^2)\\
P(w)=\frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{w^Tw}{2\sigma^2}}
w ∼ N ( 0 , σ 2 ) P ( w ) = 2 π σ 2 1 e − 2 σ 2 w T w
这是逻辑回归的高斯近似。
以下计算过程中我们要用到链式法则:
P ( A , B ∣ C ) = P ( A ∣ B , C ) P ( B ∣ C ) P(A,B|C)=P(A|B,C)P(B|C)
P ( A , B ∣ C ) = P ( A ∣ B , C ) P ( B ∣ C )
同时需要注意X X X 与w w w 是无关的。
我们在M A P MAP M A P 中的目标是找到给定数据的最可能的模型参数,即使后验值最大化的参数:
w ^ M A P = a r g m a x w P ( w ∣ D ) = a r g m a x w P ( D ∣ w ) P ( w ) P ( D ) = a r g m a x w P ( D ∣ w ) P ( w ) = a r g m a x w P ( Y , X ∣ w ) P ( w ) = a r g m a x w P ( Y ∣ X , w ) P ( X ∣ w ) P ( w ) = a r g m a x w P ( Y ∣ X , w ) P ( w ) = a r g m a x w log P ( Y ∣ X , w ) + log P ( w ) = a r g m a x w ( − ∑ i = 1 n log ( 1 + e − y i ( w T x i ) ) + log 1 2 π σ 2 − 1 2 σ 2 w T w ) = a r g m i n w ( ∑ i = 1 n log ( 1 + e − y i ( w T x i ) ) + λ w T w ) \begin{aligned}
&\hat{w}_{MAP}=\underset{w}{argmax}~P(w|D)=\underset{w}{argmax}~\frac{P(D|w)P(w)}{P(D)}\\
&~~~~~~~~~~=\underset{w}{argmax}~P(D|w)P(w)=\underset{w}{argmax}~P(Y,X|w)P(w)\\
&~~~~~~~~~~=\underset{w}{argmax}~P(Y|X,w)P(X|w)P(w)=\underset{w}{argmax}~P(Y|X,w)P(w)\\
&~~~~~~~~~~=\underset{w}{argmax}~\log P(Y|X,w)+\log P(w)\\
&~~~~~~~~~~=\underset{w}{argmax}~\big(-\sum_{i=1}^n\log (1+e^{-y_i(w^Tx_i)})+\log\frac{1}{\sqrt{2\pi\sigma^2}}-\frac1{2\sigma^2}w^Tw\big)\\
&~~~~~~~~~~=\underset{w}{argmin}~\big(\sum_{i=1}^n\log (1+e^{-y_i(w^Tx_i)})+\lambda w^Tw\big)
\end{aligned}
w ^ M A P = w a r g ma x P ( w ∣ D ) = w a r g ma x P ( D ) P ( D ∣ w ) P ( w ) = w a r g ma x P ( D ∣ w ) P ( w ) = w a r g ma x P ( Y , X ∣ w ) P ( w ) = w a r g ma x P ( Y ∣ X , w ) P ( X ∣ w ) P ( w ) = w a r g ma x P ( Y ∣ X , w ) P ( w ) = w a r g ma x log P ( Y ∣ X , w ) + log P ( w ) = w a r g ma x ( − i = 1 ∑ n log ( 1 + e − y i ( w T x i ) ) + log 2 π σ 2 1 − 2 σ 2 1 w T w ) = w a r g min ( i = 1 ∑ n log ( 1 + e − y i ( w T x i ) ) + λ w T w )
其中:λ = 1 2 σ 2 \lambda=\frac1{2\sigma^2} λ = 2 σ 2 1 ,与M L E MLE M L E 同理,我们引入函数l ( w ) l(w) l ( w ) ,在负数域上求解∣ − l ( w ) ∣ |-l(w)| ∣ − l ( w ) ∣ 最大值以得到w w w :
l ( w ) = ∑ i = 1 n log ( 1 + e − y 1 ( w T x i ) ) + λ w T w l(w)=\sum_{i=1}^n\log(1+e^{-y_1(w^Tx_i)})+\lambda w^Tw
l ( w ) = i = 1 ∑ n log ( 1 + e − y 1 ( w T x i ) ) + λ w T w
三、更新参数
除了上述利用函数求极值的方法求解参数w w w 的方法,我们也可以用梯度下降的方式更新w w w
3.1 损失函数
根据模型预测的概率为:
P ( y = 1 ∣ x ) = h ( x ) = σ ( w T x ) = 1 1 + e − ( w T x ) ( 1 ) P ( y = 0 ∣ x ) = 1 − h ( x ) ( 2 ) \begin{aligned}
&P(y=1|x)=h(x)=\sigma(w^Tx)=\frac{1}{1+e^{-(w^Tx)}}~~~~~~~~(1)\\
&P(y=0|x)=1-h(x)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(2)
\end{aligned}
P ( y = 1 ∣ x ) = h ( x ) = σ ( w T x ) = 1 + e − ( w T x ) 1 ( 1 ) P ( y = 0 ∣ x ) = 1 − h ( x ) ( 2 )
合并( 1 ) (1) ( 1 ) 式( 2 ) (2) ( 2 ) 式得:
P ( y ∣ x , w ) = h ( x ) y ( 1 − h ( x ) ) 1 − y , y ∈ { 0 , 1 } \begin{aligned}
&P(y|x,w)=h(x)^y(1-h(x))^{1-y},y\in\{0,1\}
\end{aligned}
P ( y ∣ x , w ) = h ( x ) y ( 1 − h ( x ) ) 1 − y , y ∈ { 0 , 1 }
我们进行极大似然估计可得:
w ^ M L E = a r g m a x w P ( Y ∣ X , w ) = a r g m a x w ∏ i = 1 n P ( y i ∣ x i , w ) = a r g m a x w ∏ i = 1 n h ( x i ) y i ( 1 − h ( x i ) ) 1 − y i = a r g m a x w ∑ i = 1 n ( y i ln h ( x i ) + ( 1 − y i ) ln ( 1 − h ( x i ) ) ) \begin{aligned}
&\hat{w}_{MLE}=\underset{w}{argmax}~P(Y|X,w)=\underset{w}{argmax}~\prod_{i=1}^nP(y_i|x_i,w)\\
&~~~~~~~~~~=\underset{w}{argmax}~\prod_{i=1}^nh(x_i)^{y_i}(1-h(x_i))^{1-y_i}=\underset{w}{argmax}~\sum_{i=1}^n\big(y_i\ln h(x_i)+(1-y_i)\ln(1-h(x_i))\big)\\
\end{aligned}
w ^ M L E = w a r g ma x P ( Y ∣ X , w ) = w a r g ma x i = 1 ∏ n P ( y i ∣ x i , w ) = w a r g ma x i = 1 ∏ n h ( x i ) y i ( 1 − h ( x i ) ) 1 − y i = w a r g ma x i = 1 ∑ n ( y i ln h ( x i ) + ( 1 − y i ) ln ( 1 − h ( x i ) ) )
由此我们可以定义损失函数:
L ( w ) = − ∑ i = 1 n ( y i ln h ( x i ) + ( 1 − y i ) ln ( 1 − h ( x i ) ) L(w)=-\sum_{i=1}^n\big(y_i\ln h(x_i)+(1-y_i)\ln(1-h(x_i)\big)
L ( w ) = − i = 1 ∑ n ( y i ln h ( x i ) + ( 1 − y i ) ln ( 1 − h ( x i ) )
我们希望损失函数最小化以得到最优的参数w w w ,与感知机的更新过程相同,我们求导以得到更新项。
3.2 梯度下降
梯度下降的过程为遍历数据集,利用每个样本对参数w w w 进行更新:令z = w T x z=w^Tx z = w T x
每一个样本所对应的损失函数为:
l ( w ) = − y ln h ( x ) − ( 1 − y ) ln ( 1 − h ( x ) ) l(w)=-y\ln h(x)-(1-y)\ln(1-h(x))
l ( w ) = − y ln h ( x ) − ( 1 − y ) ln ( 1 − h ( x ) )
对w w w 进行求导,求出更新项:
∂ l ( w ) ∂ w = ∂ l ( w ) ∂ h ( x ) ⋅ ∂ h ( x ) ∂ z ⋅ ∂ z ∂ w , h ( x ) = 1 1 + e − ( w T x ) ① ∂ l ( w ) ∂ h ( x ) = − y h ( x ) + 1 − y 1 − h ( x ) = h ( x ) − y h ( x ) ( 1 − h ( x ) ) ② ∂ h ( x ) ∂ z = e − x ( 1 + e − x ) = h ( x ) ( 1 − h ( x ) ) ③ ∂ z ∂ w = x 因 此 : ∂ l ( w ) ∂ w = h ( x ) − y h ( x ) ( 1 − h ( x ) ) ⋅ h ( x ) ( 1 − h ( x ) ) ⋅ x = ( h ( x ) − y ) ⋅ x \begin{aligned}
&\frac{\partial l(w)}{\partial w}=\frac{\partial l(w)}{\partial h(x)}\cdot \frac{\partial h(x)}{\partial z}\cdot \frac{\partial z}{\partial w},h(x)=\frac{1}{1+e^{-(w^Tx)}}\\
&①\frac{\partial l(w)}{\partial h(x)}=-\frac{y}{h(x)}+\frac{1-y}{1-h(x)}=\frac{h(x)-y}{h(x)(1-h(x))}\\
&②\frac{\partial h(x)}{\partial z}=\frac{e^{-x}}{(1+e^{-x})}=h(x)(1-h(x))~~③\frac{\partial z}{\partial w}=x\\
&因此:\frac{\partial l(w)}{\partial w}=\frac{h(x)-y}{h(x)(1-h(x))}\cdot h(x)(1-h(x))\cdot x=(h(x)-y)\cdot x
\end{aligned}
∂ w ∂ l ( w ) = ∂ h ( x ) ∂ l ( w ) ⋅ ∂ z ∂ h ( x ) ⋅ ∂ w ∂ z , h ( x ) = 1 + e − ( w T x ) 1 ① ∂ h ( x ) ∂ l ( w ) = − h ( x ) y + 1 − h ( x ) 1 − y = h ( x ) ( 1 − h ( x ) ) h ( x ) − y ② ∂ z ∂ h ( x ) = ( 1 + e − x ) e − x = h ( x ) ( 1 − h ( x ) ) ③ ∂ w ∂ z = x 因 此 : ∂ w ∂ l ( w ) = h ( x ) ( 1 − h ( x ) ) h ( x ) − y ⋅ h ( x ) ( 1 − h ( x ) ) ⋅ x = ( h ( x ) − y ) ⋅ x
则梯度下降的更新过程为:
w → w − η ∑ i = 1 n ( h ( x i ) − y i ) ⋅ x = w − η ∑ i = 1 n ( σ ( w T x i ) − y i ) ⋅ x i w\rightarrow w-\eta\sum_{i=1}^n(h(x_i)-y_i)\cdot x=w-\eta\sum_{i=1}^n(\sigma(w^Tx_i)-y_i)\cdot x_i
w → w − η i = 1 ∑ n ( h ( x i ) − y i ) ⋅ x = w − η i = 1 ∑ n ( σ ( w T x i ) − y i ) ⋅ x i
四、模型实现
我们将通过手动实现与调库的方式去构造逻辑回归模型。
4.1 数据集
本次我们仍使用乳腺癌数据集,进行逻辑回归二分类器的实现,数据集详细内容可通过如下代码查看,不再过多赘述。
'''屏蔽warning'''
import warnings
warnings.filterwarnings("ignore")
'''导入重要的库'''
import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer
cancer=load_breast_cancer()
print(cancer.data)#输出数据集内容
print(cancer.target)#输出每个数据集的标签
print(cancer.feature_names)#输出数据集每一列对应的特征
print(cancer.target_names)#输出数据集的标签种类
'''将数据集存储为csv文件'''
df=pd.DataFrame(data=cancer.data,columns=cancer.feature_names)#构建二维表格
df['label']=cancer.target
df.to_csv("data/cancer_data.csv",index=False)
4.2 手动实现模型
我们利用梯度下降的方式对模型进行更新:
'''屏蔽warning'''
import warnings
warnings.filterwarnings("ignore")
'''导入重要的库'''
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
'''激活函数'''
def sigmoid(x):
return 1/(1+np.exp(-x))
'''定义模型的类'''
class Logistic_Regression(object):
'''初始化'''
def __init__(self,eta,n_iter):
self.eta=eta #学习率
self.n_iter=n_iter #最大训练轮数
'''模型训练'''
def fit(self,X_train,y_train):
feature_num=len(X_train[0]) #特征数
w=np.zeros(feature_num)
for i in range(self.n_iter):
gradient=np.dot(sigmoid(np.dot(X_train,w))-y_train,X_train)
w=w-self.eta*gradient
self.w=w
'''模型预测'''
def predict(self,X_test):
y_pred=[]
for x in X_test:
if(sigmoid(np.dot(self.w,x))>0.5):
y_pred.append(1)
else:
y_pred.append(0)
return np.array(y_pred)
'''读取数据'''
df=pd.read_csv("data/cancer_data.csv")
y=df['label']
df.drop("label",axis=1,inplace=True)
X=df.values
'''划分数据'''
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)#选取20%的数据作为测试集
'''初始化模型'''
log_reg=Logistic_Regression(0.001,10000)
log_reg.fit(X_train,y_train)
y_pred=log_reg.predict(X_test)
print(accuracy_score(y_test,y_pred)) #0.8947368421052632
4.3 调库实现模型
调库用到的函数为sklearn所提供的LogisticRegression函数,其函数原型如下:
LogisticRegression(penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)
可以发现该模型并不是用梯度下降的方式去更新模型的,而是通过参数的估计,要用到优化求解器,其相关参数如下表所示:
模型参数
Parameter含义
备注
penalty
正则化项
广义线性模型的正则项,可选值包括L1正则项'l1'、L2正则项'l2'、复合正则'elasticnet'和无正则项None,默认值为'l2'。值得注意的是,正则项的选择应与优化求解器相匹配(详见solver
参数)。
l1_ratio
正则权重系数
L1正则和L2正则的权重系数,取值空间为0-1。若为0,则相当于为L2正则;若为1,则为L1正则,否则为Elasticnet正则。
dual
对偶问题
默认值False,可设为True将问题转换为对偶问题(详见本博客SVM问题中原问题-对偶问题的推导),仅适用于采用L2正则化且求解器为'liblinear’的情况。当样本数少于特征数时,推荐为True。
tol
迭代阈值
求解器迭代求解时,停止迭代的目标函数改变阈值。
C
正则化系数倒数
注意,其值与正则化强度相反,即C值越小,正则化程度越大。其值必须为正,且默认值为1
fit_intercept
是否预设偏置
控制广义线性模型中是否预设偏置值
intercept_scaling
预设偏置值
广义线性模型中预设的偏置值,仅当求解器为'liblinear'同时fit_intercept时生效。注意 :该偏置值会作为新的特征计算其系数,因此也会计入L1和L2正则。
class_weight
样本权重
用于处理样本不均衡问题。默认值为None,即各类别样本权重一样,可通过设置字典定义权重系数,或设为'balanced',即根据样本数自动计算权重。若在fit函数中设置sample_weight
参数,两者作用会叠加。
random_state
随机状态
LR模型中的随机性主要体现在求解器迭代时对样本的随机选取,适用于当求解器为'liblinear'或'sag'时。
solver
求解器
sklearn中共提供了5种优化求解器,分别为'liblinear'、'sag'、'saga'、'newton-cg'和'lbfgs'。各求解器的适用条件不同,具体见后文。默认值为'liblinear'。
max_iter
最大迭代步数
‘newton-cg’、'sag'和'lbfgs' 求解器所需要的最大迭代步数
multi_class
多分类策略
取值可为'ovr'、'multinomial'和'auto'。'ovr'即采用'one vs rest'策略对二分类模型进行集成;'multinomial'即采用'multinomial loss'直接求解多分类问题。默认为'auto',其会在两分类问题或求解器为'liblinear'时选择'ovr',而其它情况下选择'multinomial'。默认值为'auto'
在此我们不对参数作过多解释,具体调参过程就问题而论。
'''屏蔽warning'''
import warnings
warnings.filterwarnings("ignore")
'''导入重要的库'''
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression#导入逻辑回归模型
'''读取数据'''
df=pd.read_csv("data/cancer_data.csv")
y=df['label']
df.drop("label",axis=1,inplace=True)
X=df.values
'''划分数据'''
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)#选取20%的数据作为测试集
'''初始化模型'''
log_reg=LogisticRegression()
log_reg.fit(X_train,y_train)
y_pred=log_reg.predict(X_test)
print(accuracy_score(y_test,y_pred)) #0.9385964912280702