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 进程已结束,退出代码02.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 进程已结束,退出代码02.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类 | StandardScaler | MinMaxScaler |
| 本案例选择 | ✓ 逻辑回归案例使用 | × 未使用 |
2.6学习感悟
- 回归是预测数,分类是判类别。
- 线性回归适合简单数值拟合,逻辑回归是工业界最常用的二分类基线模型。
- 真实业务数据大多不平衡(如贷款风控),不能只看准确率。
掌握了完整机器学习流程:数据读取 → 预处理 → 可视化 → 数据集划分 → 建模训练 → 模型评估。