目录
(一)适用情况
- 自变量:,其中;
- 因变量:二分类变量,取值为True(1) or False(0),满足0,1分布~Binomial(1,p)
- 由以下公式可以看出,为当自变量取值为xik时,因变量取1的概率,则pi取值范围应当处于(0,1)之间;
(二)普通回归弊端(建立逻辑回归的原因)
2.1 普通回归
- ,
- 其中:
2.2 存在问题
问题一:无法保证的取值在(0,1)之间,则p_i存在荒谬性;
问题二:误差项e_i在基准回归下存在异分布性,不满足同方差假定;
2.3 模型推导
①目标:无法控制最终范围的情况下,对函数形式做出变换,使得其最终变换后的形式处于(0,1)之间;
②推导过程:
③推导结果:
函数形式由
(三)Logit模型 vs Logistic模型
- logit模型:
- logistic模型:
- 联系:logit函数的反函数为logistic函数,二者实质是一样的;
- 一种理解方式:logit理解为log-it,其中it指的是概率odds;
延申:probit回归
(1)回归目标:同样用于解决二分类问题
(2)方程形式:将logit模型中的
延申:Sigmod函数
一种常用的辅助函数,在神经网络中sigmoid通常被用作激活函数,它可以用来处理二分类问题。
(1)Def:
(2)函数特点:
- 值域的范围控制在了(0,1)之间
- 函数具有非常好的对称性
- 函数对输入超过一定范围就会不敏感
(3)常用于二分类问题:采用sigmoid的输出的是事件概率,也就是当输出满足满足某一概率条件后,我们将其划分正类;
(四)Logit回归—残差分布+极大似然
4.1 残差服从分布
已知:
- 残差也服从二分类分布:
4.2 极大似然估计
- 极大似然函数:
- 取对数得到:
- 得到估计值:
参考: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博客