逻辑回归模型的建立的实证分析
逻辑回归模型的建立的实证分析
多元逻辑回归原理
多元逻辑回归是逻辑回归的一种扩展,用于处理多个自变量与多分类的问题。在 多元逻辑回归中,因变量是分类变量,可以有两个以上的类别。多元逻辑回归基于 Logistic 函数(也称为 Sigmoid 函数),该函数可以将一个线性组合的输入映射到[0, 1] 范围内,用于模拟事件的概率。在多元逻辑回归中,有多个 Logistic 函数,每个函数对 应一个类别。
逻辑回归模型建立与实验步骤
2.1 导入必要的库
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
2.2 导入数据
df = pd.read_excel('宁波大学生旅游消费预算(副本).xlsx')
# 查看数据前几行
print(df.head())
2.3 区分特征变量和目标变量
目标变量:第4题(您每年计划用于旅游的总预算大概是多少?)
y = df.iloc[:, 4]
X = df.drop(df.columns[4], axis=1)
# 检查目标变量的类别分布(多分类情况)
print("目标变量类别分布:")
print(y.value_counts())
2.4 对特征进行标准化处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
标准化的目的是确保不同特征之间具有一致的数值范围,以防止某些特征对模型产生过大的影响。
2.5 标准化后的特征数据和目标变量划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=0)
test_size=0.2:表示将数据集划分为测试集的比例。测试集的大小为总数据集的 20%。
random_state=0:随机数生成器的种子。设置种子是为了确保每次运行代码时得到相同的随机划分。
返回值:函数返回四个值,分别是训练集的特征 X_train,测试集的特征 X_test,训练集的目标变量 y_train,和测试集的目标变量 y_test。
2.6 创建一个多元逻辑回归模型实例
# multi_class='multinomial'表示使用多项逻辑回归
# solver='lbfgs'适用于多分类
model = LogisticRegression(multi_class='multinomial', solver='lbfgs', max_iter=1000, random_state=123)
通过 LogisticRegression() 构造函数,创建了一个 Logistic Regression 模型对象,并将其分配给变量 model。
multi_class='multinomial':指定了模型使用的多分类策略,这里"multinomial",表示采用多项式逻辑回归,适用于多类别分类问题。
solver='lbfgs':指定了用于求解优化问题的算法,这里是'L-BFGS',即有限内存的Broyden-Fletcher-Goldfarb-Shanno 算法,通常在多分类问题上表现较好。
max_iter=1000:设置了迭代的最大次数,即模型在拟合数据时所允许的最大迭代次数,这里是 1000 次。
random_state=123:设置了一个随机种子,以确保结果的可重复性。
2.7 训练模型
model.fit(X_train, y_train)
Logistic Regression 模型会根据训练集中的特征和目标变量来拟合参数,以最大程度地拟合训练数据。在训练过程中,通过优化算法(通常采用梯度下降法),模型调整权重以最小化损失函数。训练完成后,该模型便可用于对新数据进行预测。
2.8 获取并打印预测结果
y_pred = model.predict(X_test)
print("预测结果前20个:", y_pred[:20])
2.9 输出性能报告
print("Classification Report:")
print(classification_report(y_test, y_pred))
引入了 scikit-learn 库中用于模型评估的一些工具,这些工具包括绘制 ROC 曲线以及生成测试集上的分类性能报告,用于评估分类模型的性能。
2.10 预测准确度
2.11 计算训练集上的准确率(检验过拟合程度)
2.12 打印逻辑回归模型的系数和截距
print("模型系数(coef_):")
print(model.coef_)
print("模型截距(intercept_):")
print(model.intercept_)
2.13 获取每个类别的预测概率
y_pred_proba = model.predict_proba(X_test)
print("预测概率前5行:")
print(y_pred_proba[:5])
通过查看每个样本的概率分布,可以了解模型对于每个类别的预测置信度。通常模型选择的类别是概率最高的那个类别。
2.14 混淆矩阵
2.15 绘制ROC曲线
from sklearn.preprocessing import label_binarize
from sklearn.multiclass import OneVsRestClassifier
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
# 获取类别列表
classes = sorted(y.unique())
n_classes = len(classes)
# 将测试集的y进行二值化
y_test_bin = label_binarize(y_test, classes=classes)
# 使用OneVsRestClassifier进行多分类ROC计算
ovr_classifier = OneVsRestClassifier(LogisticRegression(multi_class='ovr', solver='lbfgs', max_iter=1000, random_state=123))
y_score = ovr_classifier.fit(X_train, y_train).predict_proba(X_test)
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(n_classes):
# 若某类在y_test中无正样本,跳过
if y_test_bin[:, i].sum() == 0:
print(f"Class {classes[i]} has no positive samples, skipping AUC calculation for this class.")
continue
fpr[i], tpr[i], _ = roc_curve(y_test_bin[:, i], y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
# 绘制ROC曲线
plt.figure(figsize=(8,6))
for i in range(n_classes):
if i in roc_auc:
plt.plot(fpr[i], tpr[i], label=f'Class {classes[i]} (AUC = {roc_auc[i]:.2f})')
plt.plot([0,1],[0,1],color='navy', linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) curve')
plt.legend(loc="lower right")
plt.show()