2.线性回归与逻辑回归

2.1两者到底有什么区别?

线性回归

解决问题:回归预测(预测连续数值)

输入特征 → 输出一个具体数字

适用:房价、销量、血压、温度预测

逻辑回归

解决问题:二分类问题(判断类别)

输入特征 → 输出概率,判定 0 或 1

适用:是否违约、是否通过贷款、是否患病


2.2实战案例一:多元线性回归(血压预测)

2.2.1 项目场景

根据用户的体重、年龄两个特征,预测人体收缩血压,是典型的多元线性回归任务。

2.2.2 完整代码

import pandas as pd from sklearn.linear_model import LinearRegression # 读取数据集 data = pd.read_csv("多元线性回归.csv", encoding="GBK", engine='python') # 构建特征和标签 x = data[['体重', '年龄']] # 特征 y = data[['血压收缩']] # 预测目标 # 建模 + 训练 lr_model = LinearRegression() lr_model.fit(x, y) # 模型评估 R² score = lr_model.score(x, y) print("模型拟合度 R²:", score)

输出:

0.9461441227520285 进程已结束,退出代码0

2.2.3 代码详解

  • 拟合(核心概念):简单来说就是让模型找到数据的规律,画出一条最贴合所有数据的直线/曲线。所有的数据点都是散乱的,拟合的过程就是模型不断调整参数,尽可能让直线贴近大部分数据,从而学习到特征和目标值的关联关系。
  • fit(x, y):执行拟合过程,模型自动学习数据规律,求解出最优线性方程
  • score():返回拟合系数,衡量拟合效果好坏,越接近 1 代表直线越贴合数据、模型效果越好

2.2.4 小结

线性回归 =拟合数据、预测数值


2.3 实战案例二:逻辑回归(银行贷款风险判断)

2.3.1 项目场景

银行需要根据用户交易、金额、行为特征,自动判断用户:

  • 0:正常用户,可以放款
  • 1:高风险用户,存在违约风险,拒绝放款

这是典型的不平衡二分类问题(正常用户远多于风险用户)。

2.3.2 完整代码

import pandas as pd import matplotlib.pyplot as plt from pylab import mpl from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression # 1. 读取数据 data = pd.read_csv(r"./creditcard.csv") print(data.head()) # 2. 数据标准化(金额字段量纲太大) scaler = StandardScaler() data['Amount'] = scaler.fit_transform(data[['Amount']]) # 3. 删除无用字段 data = data.drop(['Time'], axis=1) # 4. 查看样本分布(不平衡数据) mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei'] mpl.rcParams['axes.unicode_minus'] = False labels_count = data['Class'].value_counts() print(labels_count) # 绘制样本分布图 plt.title("银行贷款风险样本分布") plt.xlabel("0=正常用户 1=高风险用户") plt.ylabel("样本数量") labels_count.plot(kind='bar') plt.show() # 5. 划分训练集、测试集 X_whole = data.drop('Class', axis=1) y_whole = data.Class x_train_w, x_test_w, y_train_w, y_test_w = train_test_split( X_whole, y_whole, test_size=0.3, random_state=1000) # 6. 逻辑回归建模训练 lr = LogisticRegression(C=0.01, max_iter=1000) lr.fit(x_train_w, y_train_w) # 7. 模型评估 test_predicted = lr.predict(x_test_w) result = lr.score(x_test_w, y_test_w) print("测试集准确率:", result)

输出:

Time V1 V2 V3 ... V27 V28 Amount Class 0 0.0 -1.359807 -0.072781 2.536347 ... 0.133558 -0.021053 149.62 0 1 0.0 1.191857 0.266151 0.166480 ... -0.008983 0.014724 2.69 0 2 1.0 -1.358354 -1.340163 1.773209 ... -0.055353 -0.059752 378.66 0 3 1.0 -0.966272 -0.185226 1.792993 ... 0.062723 0.061458 123.50 0 4 2.0 -1.158233 0.877737 1.548718 ... 0.219422 0.215153 69.99 0 [5 rows x 31 columns] Class 0 284315 1 492 Name: count, dtype: int64 0.9990168884519505 进程已结束,退出代码0

2.3.3 重点知识点复盘

为什么要标准化?

贷款金额 Amount 数值很大、跨度广,标准化可以消除量纲、加快模型收敛

逻辑回归参数作用
  • C=0.01:加强正则化,防止过拟合
  • max_iter=1000:解决模型迭代不足、不收敛报错
业务重点(银行风控)

不平衡数据中,准确率没有意义

银行最怕漏判风险用户,后续需要重点关注召回率。


2.4今日核心总结:两个模型对比

模型任务类型输出本次实战案例
线性回归回归预测连续数值血压预测
逻辑回归二分类0/1 类别银行贷款风险判断

2.5 数据标准化

2.5.1 标准化的重要性

在机器学习中,数据标准化(Normalization)是数据预处理的关键步骤,特别是当特征具有不同量纲或数值范围差异较大时。标准化可以:

  • 消除量纲影响:使不同特征处于同一数量级
  • 加快模型收敛:优化算法(如梯度下降)能更快找到最优解
  • 提高模型稳定性:防止某些特征因数值过大而主导模型训练
  • 改善模型性能:特别是对距离敏感的算法(如KNN、SVM)和基于梯度的算法(如逻辑回归、神经网络)

2.5.2 两种常用标准化方法

1. Z-Score 标准化(StandardScaler)

公式

x' = (x - μ) / σ

其中

  • x:原始特征值
  • μ:特征的均值
  • σ:特征的标准差
  • x':标准化后的值

特点

  • 处理后数据均值为0,标准差为1
  • 适合数据近似正态分布的情况
  • Scikit-learn中对应StandardScaler
  • 本案例中逻辑回归使用的就是这种方法

Python代码示例

from sklearn.preprocessing import StandardScaler import numpy as np 示例数据 data = np.array([[1000], [2000], [3000], [4000], [5000]]) Z-Score标准化 scaler = StandardScaler() scaled_data = scaler.fit_transform(data) print("原始数据:", data.flatten()) print("标准化后:", scaled_data.flatten()) print("均值:", scaler.mean_) print("标准差:", scaler.scale_)
2. Min-Max 标准化(MinMaxScaler)

公式

x' = (x - min) / (max - min)

其中

  • x:原始特征值
  • min:特征的最小值
  • max:特征的最大值
  • x':标准化后的值(范围[0, 1])

特点

  • 将数据缩放到[0, 1]区间
  • 对异常值敏感(最大值最小值受异常值影响大)
  • Scikit-learn中对应MinMaxScaler
  • 适合数据边界明确、需要固定范围的情况

Python代码示例

from sklearn.preprocessing import MinMaxScaler import numpy as np 示例数据 data = np.array([[10], [20], [30], [40], [50]]) Min-Max标准化 scaler = MinMaxScaler() scaled_data = scaler.fit_transform(data) print("原始数据:", data.flatten()) print("标准化后:", scaled_data.flatten()) print("数据范围:[{}, {}]".format(scaler.data_min_, scaler.data_max_))

2.5.3 两种方法对比与选择建议

对比维度Z-Score标准化Min-Max标准化
公式x' = (x - μ) / σx' = (x - min) / (max - min)
输出范围无固定范围(通常[-3, 3])[0, 1]
对异常值相对稳健非常敏感
适用场景数据近似正态分布
需要保留原始分布形状
需要固定输出范围
图像处理(像素值)
神经网络输入层
Scikit-learn类StandardScalerMinMaxScaler
本案例选择✓ 逻辑回归案例使用

× 未使用

2.6学习感悟

  1. 回归是预测数,分类是判类别
  2. 线性回归适合简单数值拟合,逻辑回归是工业界最常用的二分类基线模型。
  3. 真实业务数据大多不平衡(如贷款风控),不能只看准确率
  4. 掌握了完整机器学习流程:数据读取 → 预处理 → 可视化 → 数据集划分 → 建模训练 → 模型评估。