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

所有评论(0)