对数几率回归(逻辑回归)

Jennifer ·
更新时间:2024-09-21
· 750 次阅读

文章目录一、对数几率和对数几率回归二、Sigmoid函数三、极大似然法四、梯度下降法四、Python实现 一、对数几率和对数几率回归

  在对数几率回归中,我们将样本的模型输出y∗y^*y∗定义为样本为正例的概率,将y∗1−y∗\frac{y^*}{1-y^*}1−y∗y∗​定义为几率odds),几率表示的是样本作为正例的相对可能性。将几率取对便可以得到对数几率log oddslogit)。
logit=log⁡y∗1−y∗logit=\log\frac{y^*}{1-y^*}logit=log1−y∗y∗​
  而对数几率回归Logistic Regression)则试图从样本集中学得模型wTxw^TxwTx并使其逼近该样本的对数几率,从而可以得到:
condition1:wTx=log⁡y∗1−y∗condition1:w^Tx=\log\frac{y^*}{1-y^*}condition1:wTx=log1−y∗y∗​

二、Sigmoid函数

  通过求解conditoin1conditoin1conditoin1可以得到:
y∗=ewTx1+ewTx=11+e−wTxy^*=\frac{e^{w^Tx}}{1+e^{w^Tx}}=\frac{1}{1+e^{-w^Tx}}y∗=1+ewTxewTx​=1+e−wTx1​
  由此我们可以知道样本xix_ixi​为正例的概率可以通过函数g(xi)=h(wTxi)=11+e−wTxg(x_i)=h(w^Tx_i)=\frac{1}{1+e^{-w^Tx}}g(xi​)=h(wTxi​)=1+e−wTx1​来表示。而其中的函数h(z)h(z)h(z)便为Sigmoid函数,其图像如下:
Sigmoid函数
  求其导数:
h′(z)=−e−z(1+e−z)2=11+e−z(1−11+e−z)=h(z)(1−h(z))h'(z)=\frac{-e^{-z}}{(1+e^{-z})^2}=\frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}})=h(z)(1-h(z))h′(z)=(1+e−z)2−e−z​=1+e−z1​(1−1+e−z1​)=h(z)(1−h(z))
这是一个很好的性质,有利于简化后面优化模型时的计算。

三、极大似然法

  通过前面的推导,可以得到:
P(y=1∣x)=y∗=h(wTx)        P(y=0∣x)=1−y∗=1−h(wTx)P(y=1|x)=y^*=h(w^Tx)\,\,\,\,\,\,\,\,P(y=0|x)=1-y^*=1-h(w^Tx)P(y=1∣x)=y∗=h(wTx)P(y=0∣x)=1−y∗=1−h(wTx)
合并两个式子,则有:
P(y∣x)=h(wTx)y(1−h(wTx))1−yP(y|x)=h(w^Tx)^y(1-h(w^Tx))^{1-y}P(y∣x)=h(wTx)y(1−h(wTx))1−y
  求出了样本标记的分布律,便可以通过极大似然法来估计分布律中的参数www。先写出极大似然函数:
L(yi∣xi,w)=∏i=1mh(wTxi)yi(1−h(wTxi))1−yiL(y_i|x_i,w)=\prod^{m}_{i=1}h(w^Tx_i)^{y_i}(1-h(w^Tx_i))^{1-{y_i}}L(yi​∣xi​,w)=i=1∏m​h(wTxi​)yi​(1−h(wTxi​))1−yi​
  对极大似然函数取对可以得到对数似然函数:
l(yi∣xi,w)=log(L)=∑i=1m(yilog⁡h(wTxi)+(1−yi)log(1−h(wTxi)))l(y_i|x_i,w)=log(L)=\sum^{m}_{i=1}{(y_i\log h(w^Tx_i)+(1-y_i)log(1-h(w^Tx_i)))}l(yi​∣xi​,w)=log(L)=i=1∑m​(yi​logh(wTxi​)+(1−yi​)log(1−h(wTxi​)))
  在前面乘上负数因子便可以得到对数几率回归的代价函数:
J(w)=−1m∑i=1m(yilog⁡h(wTxi)+(1−yi)log(1−h(wTxi)))J(w)=-\frac{1}{m}\sum^{m}_{i=1}{(y_i\log h(w^Tx_i)+(1-y_i)log(1-h(w^Tx_i)))}J(w)=−m1​i=1∑m​(yi​logh(wTxi​)+(1−yi​)log(1−h(wTxi​)))
通过最小化上述代价函数便可以估计出参数www的值。

四、梯度下降法

  通过上述步骤,优化对数几率回归模型的关键变成了求解:
w=arg min⁡J(w)=arg min⁡−1m∑i=1m(yilog⁡h(wTxi)+(1−yi)log(1−h(wTxi)))w=\argmin J(w)=\argmin -\frac{1}{m}\sum^{m}_{i=1}{(y_i\log h(w^Tx_i)+(1-y_i)log(1-h(w^Tx_i)))}w=argminJ(w)=argmin−m1​i=1∑m​(yi​logh(wTxi​)+(1−yi​)log(1−h(wTxi​)))
  在《线性回归:梯度下降法优化》中,我已经详细介绍了梯度下降法的数学原理,这里直接使用梯度下降法来对对数几率回归模型进行优化。
  对J(w)J(w)J(w)进行求导:
∂J∂w=−1m∑i=1m(yi(1−h(wTxi))xi+(yi−1)h(wTxi)xi)=−1m∑i=1m(yi−h(wTxi))xi\frac{\partial J}{\partial w}=-\frac{1}{m}\sum^{m}_{i=1}(y_i(1-h(w^Tx_i))x_i+(y_i-1)h(w^Tx_i)x_i)=-\frac{1}{m}\sum^{m}_{i=1}{(y_i-h(w^Tx_i))x_i}∂w∂J​=−m1​i=1∑m​(yi​(1−h(wTxi​))xi​+(yi​−1)h(wTxi​)xi​)=−m1​i=1∑m​(yi​−h(wTxi​))xi​
  将∂J∂w\frac{\partial J}{\partial w}∂w∂J​带入参数www的更新公式w∗=w−η∂J∂ww^*=w-\eta\frac{\partial J}{\partial w}w∗=w−η∂w∂J​,最终得到www的更新公式如下:
w∗=w+ηm∑i=1m(yi−h(wTxi))xiw^*=w+\frac{\eta}{m}\sum^{m}_{i=1}{(y_i-h(w^Tx_i))x_i}w∗=w+mη​i=1∑m​(yi​−h(wTxi​))xi​

四、Python实现

  梯度下降优化算法:

def fit(self, X, y): self.W = np.zeros(X.shape[1] + 1) for i in range(self.max_iter): delta = self._activation(self._linear_func(X)) - y self.W[0] -= self.eta * delta.sum() self.W[1:] -= self.eta * (delta @ X) return self

  导入鸢尾花数据集进行测试:

if __name__ == "__main__": from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report irirs = datasets.load_iris() X = irirs["data"][:100] y = irirs["target"][:100] X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7, test_size=0.3) classifier = LRClassifier().fit(X_train, y_train) y_pred = classifier.predict(X_test) print(classification_report(y_test, y_pred))

  分类报告如下:
分类报告


作者:LyEurus



逻辑回归 对数几率 回归 几率 对数

需要 登录 后方可回复, 如果你还没有账号请 注册新账号