机器学习实战:线性回归、逻辑回归、交叉验证与召回率评测
文章简介
本文结合实战代码,依次讲解多元线性回归建模流程、金融数据集下逻辑回归分类应用、交叉验证参数寻优方式,同时详解召回率评估指标含义,附带完整可运行源码,适合机器学习入门学习者梳理基础建模思路与模型评估方法。
一、多元线性回归原理与实战
1. 算法概述
多元线性回归利用多个自变量拟合线性方程,探究特征与目标值之间的线性关联关系,通用模型公式: y=w1x1+w2x2+b 其中w为特征系数,b为截距项,通过最小二乘法求解最优参数,常用于数值预测场景。
2. 完整实战代码
python
运行
import pandas as pd
from sklearn.linear_model import LinearRegression
# 读取数据集,适配中文编码
data = pd.read_csv("多元线性回归.csv",encoding='gbk',engine='python')
# 计算特征间相关系数,分析关联性
corr=data[["体重","年龄","血压收缩"]].corr()
print("特征相关系数矩阵:\n",corr)
# 划分特征与预测标签
lr_model=LinearRegression()
x=data[['体重','年龄']]
y=data[['血压收缩']]
# 模型训练
lr_model.fit(x,y)
# 模型拟合评分
score =lr_model.score(x,y)
print("模型拟合度R²:",score)
# 批量预测、单样本预测、多样本预测
print("全体数据预测结果:\n",lr_model.predict(x))
print("单样本预测[体重80,年龄60]:",lr_model.predict([[80,60]]))
print("多样本预测结果:\n",lr_model.predict([[70,30],[70,20]]))
# 提取系数与截距,拼接回归方程
a=lr_model.coef_
b=lr_model.intercept_
print("线性回归模型为:y={:.2f}x1+{:.2f}x2+{:.2f}".format(a[0][0],a[0][1],b[0]))
3. 代码核心解析
- 数据读取与相关性分析:通过 corr 函数查看体重、年龄与血压的关联程度,判断建模合理性;
- 数据集划分:二维格式特征输入,单列目标标签,符合 sklearn 输入规范;
- 训练与预测:fit 完成模型拟合,predict 实现不同维度样本预测;
- 模型公式输出:提取权重系数和截距,直观展示拟合完成的线性方程。
二、逻辑回归分类实战(金融欺诈检测)
1. 算法介绍
逻辑回归虽命名为回归,实际多用于二分类任务,将线性计算结果映射至 0-1 概率区间,判定样本类别,适合欺诈检测、风险判别等场景。 关键参数C代表正则化强度,数值越小正则约束越强,可有效规避模型过拟合问题。
2. 数据预处理流程
金融数据集存在量纲不统一、冗余字段问题,预处理步骤:标准化数值特征、删除无用字段、样本分布可视化。
python
运行
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
from sklearn.preprocessing import StandardScaler
# 配置中文绘图
mpl.rcParams['font.sans-serif']=['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus']=False
# 读取信用卡数据集
data=pd.read_csv("creditcard.csv")
print("数据集前5行:\n",data.head())
# 金额字段Z标准化,消除量纲影响
scaler=StandardScaler()
data['Amount']=scaler.fit_transform(data[['Amount']])
# 删除无关时间字段
data=data.drop(['Time'],axis=1)
# 统计正负样本数量并绘图
labels_count=data['Class'].value_counts()
print("样本类别分布:\n",labels_count)
plt.title("正负例样本数")
plt.xlabel("类别")
plt.ylabel("频数")
labels_count.plot(kind='bar')
plt.show()
3. 数据集划分与基础模型训练
采用预留划分方式拆分训练集与测试集,比例 7:3,固定随机种子保证实验可复现。
python
运行
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
# 划分特征与标签
X=data.drop('Class',axis=1)
y=data.Class
x_train,x_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=1000)
# 初始化逻辑回归模型并训练
lr=LogisticRegression(C=0.01,max_iter=1000)
lr.fit(x_train,y_train)
# 训练集、测试集预测
train_predicted=lr.predict(x_train)
test_predicted=lr.predict(x_test)
# 输出分类评估报告
print("训练集分类报告:\n",metrics.classification_report(y_train,train_predicted))
print("测试集分类报告:\n",metrics.classification_report(y_test,test_predicted))
三、交叉验证与最优参数寻优
1. 交叉验证作用
单次划分数据集存在随机性偏差,K 折交叉验证将训练集均等拆分,轮流交替训练测试,取平均得分客观评估模型性能,同时用于超参数筛选。
2. 召回率评估指标
本次欺诈检测属于不平衡样本场景,优先选用 ** 召回率 (recall)** 评判模型: 召回率越高,代表真实欺诈样本被检测出来的概率越高,减少漏判风险。
3. C 参数遍历寻优代码
遍历多组正则系数,通过 8 折交叉验证计算平均召回率,筛选最优惩罚因子。
python
运行
import numpy as np
from sklearn.model_selection import cross_val_score
# 定义待遍历的C参数范围
scores=[]
c_param_range=[0.01,0.1,1,10,100]
# 遍历参数,交叉验证打分
for i in c_param_range:
lr=LogisticRegression(C=i,max_iter=1000)
# 8折交叉验证,以召回率为评估标准
score=cross_val_score(lr,x_train,y_train,cv=8,scoring='recall')
score_mean=sum(score)/len(score)
scores.append(score_mean)
print(f"C={i} 平均召回率:{score_mean:.4f}")
# 选取召回率最高对应的最优C值
best_c=c_param_range[np.argmax(scores)]
print("最优惩罚因子为:{}".format(best_c))
4. 核心函数说明
cross_val_score:自动完成 K 折拆分、训练、打分,批量输出每一轮验证分数;np.argmax:定位数组中最大值下标,匹配最优参数;max_iter=1000:增大迭代次数,保证逻辑回归模型收敛。
四、知识点总结对比
表格
| 算法 | 适用场景 | 核心特点 |
|---|---|---|
| 多元线性回归 | 连续数值预测 | 拟合线性方程,输出具体预测值 |
| 逻辑回归 | 二分类判别 | 概率分类,轻量化易训练 |
| 交叉验证 | 模型评估、参数优选 | 规避数据随机性,结果更稳定 |
| 召回率 | 不平衡样本评估 | 重点衡量样本漏判程度 |
五、常见踩坑点
- sklearn 模型输入特征必须为二维格式,单列数据使用
[[]]包裹; - 标准化仅在训练集执行 fit,测试集直接 transform,避免数据泄露;
- 样本不均衡场景不优先使用准确率,召回率更贴合业务需求;
- 逻辑回归迭代次数不足会报错,调高 max_iter 保证模型收敛。
六、完整学习感悟
从数值预测的线性回归,到分类任务的逻辑回归,建模流程遵循数据读取 - 预处理 - 数据集划分 - 模型训练 - 评估优化统一范式。交叉验证解决单次实验偶然性问题,召回率适配金融欺诈这类特殊业务场景,参数寻优能够进一步提升模型实用效果,整套流程可复用在常规机器学习入门项目中。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)