【学习笔记】逻辑回归

目录

(一)适用情况

(二)普通回归弊端(建立逻辑回归的原因)

2.1 普通回归

2.2 存在问题

2.3 模型推导

(三)Logit模型 vs Logistic模型

延申:probit回归

延申:Sigmod函数

(四)Logit回归—残差分布+极大似然

4.1 残差服从分布

4.2 极大似然估计

(五)Logit回归—机器学习

5.1 损失函数

5.2 Python代码实现


(一)适用情况

  • 自变量:x_{ik},k=0,1,2....p,其中x_{0i}=1
  • 因变量:y_i二分类变量,取值为True(1) or False(0),满足0,1分布~Binomial(1,p)
  • 由以下公式可以看出,E(y_i)=p_i为当自变量取值为xik时,因变量取1的概率,则pi取值范围应当处于(0,1)之间;

E(y_i)=p(y_i=1|x_{01}...x_{np})*1+p(y_i=0|x_{01}...x_{np})*0

E(y_i)=p(y_i=1|x_{01}...x_{np})=p_i

(二)普通回归弊端(建立逻辑回归的原因)

2.1 普通回归

  • Y=X^T\beta+e\eta=X^T\beta
  • y_i=\sum\beta_kx_{ik}+e_i
  • 其中:E(y_i)=\sum\beta_kx_{ik}=p_i

2.2 存在问题

问题一:无法保证\sum\beta_kx_{ik}的取值在(0,1)之间,则p_i存在荒谬性;

问题二:误差项e_i在基准回归下存在异分布性,不满足同方差假定;

2.3 模型推导

①目标:无法控制\eta =\sum\beta_kx_{ik}最终范围的情况下,对函数形式做出变换,使得其最终变换后的形式处于(0,1)之间;

②推导过程:

p_i\in(0,1)

\frac{p_i}{1-p_i}\in(0,+\infty )

ln(\frac{p_i}{1-p_i})\in(-\infty,+\infty )

\therefore logit(p_i)=ln(\frac{p_i}{1-p_i})=\eta_i=\sum\beta_kx_{ik}

p_i=\frac{e^{\eta_i}}{1+e^{\eta_i}}=\frac{e^{\sum\beta_kx_{ik}}}{1+e^{\sum\beta_kx_{ik}} }

③推导结果:

        函数形式由Y=X^T\beta\Rightarrow ln(\frac{P}{1-P})=X^T\beta

(三)Logit模型 vs Logistic模型

  • logit模型logit(p)=ln(\frac{p}{1-p})=\eta=X^T\beta
  • logistic模型logistic(\eta)=\frac{e^\eta}{1+e^\eta }=p=\frac{1}{1+e^{-\eta} }=\frac{1}{1+e^{-X^T\beta} }
  • 联系:logit函数的反函数为logistic函数,二者实质是一样的;

  • 一种理解方式:logit理解为log-it,其中it指的是概率odds;

参考:Logit究竟是个啥?——离散选择模型之三 - 知乎

延申:probit回归

(1)回归目标:同样用于解决二分类问题

(2)方程形式:将logit模型中的logit(p)=ln(\frac{p}{1-p})\Rightarrow probit(p)

  • probit(p)=\phi ^{-1}(p)=\eta=X^T\beta
  • p=\phi (X^T\beta)

延申:Sigmod函数

一种常用的辅助函数,在神经网络中sigmoid通常被用作激活函数,它可以用来处理二分类问题。

(1)Def:

S(z)=\frac{1}{1+e^{-z}}

(2)函数特点:

  • 值域的范围控制在了(0,1)之间
  • 函数具有非常好的对称性
  • 函数对输入超过一定范围就会不敏感

(3)常用于二分类问题:采用sigmoid的输出的是事件概率,也就是当输出满足满足某一概率条件后,我们将其划分正类;

(四)Logit回归—残差分布+极大似然

4.1 残差服从分布

已知:y_i\sim Binomial(1,p_i),f(y_i)=p_i^{y_i}(1-p_i)^{1-y_i}

  • e_i=y_i-\widehat{y_i}=y_i-\widehat{p_i}=y_i-\frac{1}{1+e^{-\eta_i} }
  • 残差也服从二分类分布:

e_i=1-\frac{1}{1+e^{-\eta_i} },y_i=1

e_i= -\frac{1}{1+e^{-\eta_i} },y_i=0

4.2 极大似然估计

  1. 极大似然函数:L(x_1...x_n;p_i)=\prod p_i^{y_i}(1-p_i)^{1-y_i}
  2. 取对数得到:lnL(x_1...x_n;p_i)=\sum [y_iln(p_i)+(1-y_i)ln(1-p_i)]
  3. \Rightarrow lnL(x_1...x_n;\beta)=\sum y_i\eta_i-\sum ln(1+e^{\eta_i})
  4. 得到估计值:\widehat{\beta}=argmax_\beta lnL

参考:https://www.cnblogs.com/xzt6/p/13393119.html

(五)Logit回归—机器学习

5.1 损失函数

机器学习中逻辑回归的损失函数通常采用交叉熵损失函数,最终推导出来的结果与上述4.2的极大似然函数基本保持一致,但加入了一个负号,取了相反数;

(损失函数是希望得到最小,极大似然是希望得到最大)

5.2 Python代码实现

step1:准备

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#Sklearn机器学习包
import sklearn
from sklearn.model_selection import train_test_split #训练测试集划分
from sklearn.metrics import confusion_matrix #导入混淆矩阵
from sklearn.metrics import precision_score,recall_score,f1_score #导入混淆矩阵的评价指
from sklearn.linear_model import LogisticRegression #逻辑回归算法模块

step2:导入鸢尾花数据集(多分类任务)

#使用自带数据集鸢尾花
from sklearn.datasets import load_iris
iris_data=load_iris()                                                                                                                                        
x=iris_data.data    #鸢尾花的属性数据:150*4
y=iris_data.target  #鸢尾花输出的分类:150*1,分为三类0,1,2
iris_features = pd.DataFrame(data=iris_data.data, columns=iris_data.feature_names) #转化为DataFrame格式
iris_features

##对变量特征进行描述性统计
iris_features.describe()

step3:建立简单的模型判别输出标准

def output_pred(y_test,y_pred):
    """
    机器学习预测结果检验
    """
    train_nums=y_test.shape[0]
    predict_false=(y_test != y_pred).sum()
    C=confusion_matrix(y_test,y_pred)
    print('精准率:',precision_score(y_test,y_pred,average='micro'))
    print("样本数量为: %d 其中预测错误的样本数量为 : %d"% (train_nums,predict_false))
    #绘制混淆矩阵
    print('混淆矩阵:\n',confusion_matrix(y_test,y_pred))
    
    plt.matshow(C, cmap=plt.cm.Blues)
    plt.ylabel('True label')
    plt.xlabel('Predicted label')
    plt.title('Test set confusion matrix')
    for i in range(len(C)):
        for j in range(len(C)):
            plt.annotate(C[j, i], xy=(i, j), horizontalalignment='center', verticalalignment='center', color = 'b')
    plt.show()

Step4:训练模型并检验

## 划分测试集,训练集
x_train, x_test, y_train, y_test = train_test_split(iris_features, y, test_size = 0.2, random_state = 2023)

## 建立/训练模型
#from sklearn.linear_model import LogisticRegression 逻辑回归算法模块
LR=LogisticRegression(multi_class='multinomial', random_state=0, solver='lbfgs')
    #solver:优化算法选择参数
    #multi_class:分类方式选择参数,如果因变量不止两个,可通过该参数指定多酚类问题解决方法,可选参数为ovr和multinomial,默认为ovr

# 在训练集上训练逻辑回归模型,因为是三分类问题,所以整个模型内有三个回归方程
LR.fit(x_train, y_train)
## 查看拟合模型对应的系数
print('the weight of Logistic Regression:\n',LR.coef_)
## 查看拟合模型对应的截距
print('the intercept(w0) of Logistic Regression:\n',LR.intercept_)

train_predict = LR.predict(x_train)
test_predict = LR.predict(x_test)
print("训练集的学习结果:")
output_pred(y_train,train_predict)
print("测试集的学习结果:")
output_pred(y_test,test_predict)


参考链接:【精选】Python实现逻辑回归(LogisticRegression)完整过程_python logisticregression-CSDN博客

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值