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():返回 R² 拟合系数,衡量拟合效果好坏,越接近 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. 掌握了完整机器学习流程:数据读取 → 预处理 → 可视化 → 数据集划分 → 建模训练 → 模型评估。

更多推荐