✅ 今日目标

  • 综合应用本周所学的:

    • 分类算法(SVM、决策树、随机森林等)
    • 模型调参(GridSearchCV)
    • 模型持久化(joblib)
    • 特征工程与数据构造
  • 构建一套完整的二分类建模流程


📘 项目任务说明

构建一个机器学习系统,用于判断学生是否及格,训练后保存模型,并支持预测新数据。


✅ 第一步:数据准备

模拟学生数据:

  • 特征:成绩、性别、是否缺勤
  • 标签:是否及格(>=60)
features: score, gender(0/1), absent(0/1)
label: 1 (pass), 0 (fail)

✅ 第二步:建模流程

  1. 拆分训练集 / 测试集
  2. 使用 Pipeline 组合数据预处理 + 分类器
  3. 使用 GridSearchCV 寻找最佳参数组合
  4. 保存训练好的模型(joblib)
  5. 提供预测函数,支持加载模型预测单个新样本

✅ 第三步:项目结构建议

student_pass_predictor/
├── train_model.py         # 训练 + 网格搜索 + 保存模型
├── predictor.py           # 加载模型 + 预测新数据
├── data/                  # 存放模型或数据文件
│   └── svm_model.joblib

✅ 第四步:挑战加分项(进阶)

  • 封装 StudentPredictor 类,支持 fit/predict/save/load 方法
  • 实现命令行调用支持
  • 日志输出记录训练结果与模型参数
  • 为预测写一个简单的 Flask Web 接口(未来任务)

🧾 今日总结

能力具体体现
模型构建数据准备 → 建模 → 调参 → 测试
模型部署保存模型,准备使用
编码组织使用模块化脚本结构
综合思维把“算法知识”转化为“工程实现”

✅ 项目脚本:

  • train_model.py(模型训练与保存)
# train_model.py - 训练学生是否及格预测模型并保存import numpy as np
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import classification_report, accuracy_score
from joblib import dump
import os# 模拟学生数据:score, gender, absent(是否缺勤),label(是否及格)
np.random.seed(42)
size = 200
scores = np.random.randint(40, 100, size)
genders = np.random.choice([0, 1], size=size)
absents = np.random.choice([0, 1], size=size, p=[0.8, 0.2])  # 缺勤较少
labels = ((scores >= 60) & (absents == 0)).astype(int)  # 缺勤也可能影响及格X = np.column_stack(((scores - scores.mean()) / scores.std(), genders, absents))
y = labels# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 构建 pipeline
pipe = Pipeline([('scaler', StandardScaler()),('svc', SVC())
])# 网格搜索参数
param_grid = {'svc__C': [0.1, 1, 10],'svc__kernel': ['linear', 'rbf'],'svc__gamma': ['scale', 'auto']
}grid = GridSearchCV(pipe, param_grid, cv=5, verbose=1, n_jobs=-1)
grid.fit(X_train, y_train)# 模型评估
print("最佳参数:", grid.best_params_)
y_pred = grid.predict(X_test)
print("准确率:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))# 保存模型
os.makedirs("data", exist_ok=True)
dump(grid.best_estimator_, "data/svm_model.joblib")
print("模型已保存到 data/svm_model.joblib")

运行输出

最佳参数: {'svc__C': 10, 'svc__gamma': 'scale', 'svc__kernel': 'rbf'}
准确率: 0.975precision    recall  f1-score   support0       1.00      0.94      0.97        171       0.96      1.00      0.98        23accuracy                           0.97        40macro avg       0.98      0.97      0.97        40
weighted avg       0.98      0.97      0.97        40模型已保存到 data/svm_model.joblib
  • predictor.py(加载模型并预测新样本)
# predictor.py - 加载模型并预测新学生是否及格from joblib import load
import numpy as np
import os# 加载模型
model_path = "data/svm_model.joblib"
if not os.path.exists(model_path):raise FileNotFoundError(f"未找到模型文件: {model_path}")model = load(model_path)
print("✅ 模型加载成功")# 示例新学生数据:[score, gender, absent]
def predict_pass(score, gender, absent):score_std = (score - 70) / 15  # 简单标准化,建议保持一致性x = np.array([[score_std, gender, absent]])pred = model.predict(x)[0]return "及格 ✅" if pred == 1 else "不及格 ❌"# 示例:输入学生信息预测
if __name__ == "__main__":while True:try:s = int(input("输入学生成绩(0-100):"))g = int(input("输入性别(0=女,1=男):"))a = int(input("是否缺勤(0=否,1=是):"))result = predict_pass(s, g, a)print(f"预测结果:{result}")except Exception as e:print("输入有误,请重试:", e)print("-" * 40)

运行输出

✅ 模型加载成功
输入学生成绩(0-100):90
输入性别(0=女,1=男):0
是否缺勤(0=否,1=是):1
预测结果:不及格 ❌
----------------------------------------
输入学生成绩(0-100):60
输入性别(0=女,1=男):1
是否缺勤(0=否,1=是):0
预测结果:不及格 ❌
----------------------------------------
输入学生成绩(0-100):99
输入性别(0=女,1=男):1
是否缺勤(0=否,1=是):1
预测结果:不及格 ❌
----------------------------------------
输入学生成绩(0-100):100             
输入性别(0=女,1=男):1
是否缺勤(0=否,1=是):0
预测结果:及格 ✅
----------------------------------------
输入学生成绩(0-100):

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88152.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88152.shtml
英文地址,请注明出处:http://en.pswp.cn/web/88152.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#版本的训练AI模型软件

程序介绍文档 项目概述 HL.AI.train 是由深圳海蓝智能开发的AI模型训练与转换工具,版本号1.2.1.0。该程序基于Windows Forms构建,提供图形化界面支持YOLOv5和YOLOv8模型的训练配置、数据集管理以及PyTorch模型到ONNX格式的转换功能。程序支持CUDA GPU加速…

新手向:从零理解LTP中文文本处理

如果你想了解计算机如何处理中文文本,这篇博客就是为你准备的。我们将通过一个真实的代码案例,深入浅出地解析中文分词技术,保证每一步都讲得明明白白! 什么是中文分词? 想象你读英文句子时,单词之间有空…

图像采集卡选型详细指南

选择图像采集卡是构建机器视觉或图像处理系统的关键一步,需要综合考虑硬件接口、性能需求、软件兼容性、应用场景等多个维度。以下是详细的选型指南,帮助你做出明智决策:一、核心选型因素1. 相机接口匹配常见工业相机接口:GigE Vi…

核心网络协议的深度解析

1. IP协议(网际层核心)(1)IPv4 vs IPv6特性IPv4IPv6地址长度32位(约42亿地址)128位(3.410⁸地址)表示方法点分十进制(如192.168.1.1)冒号分隔十六进制&#x…

Nexus zkVM 3.0 及未来:迈向模块化、分布式的零知识证明

1. 引言 2025年3月,Nexus团队发布了 Nexus zkVM 3.0,本文将更详细地介绍其设计意图与功能。 零知识虚拟机(zkVM)领域正在迅速演进,推动力来自于对可扩展、高效且可靠的系统的需求——这些系统应能够在不受计算规模、…

thinkphp使用redis抢单实例

问题:当客户预约时产生一个订单,该订单需要业务人员抢单后跟进一,产生订单时设置redis$redis new Redis(); $ydkey "yyqd_".$insertId; $exptime 600;//过期时间 600秒 $redis->lpush($ydkey,$$data);//压入订单ID $redis-&g…

Java SE--继承

一.为什么要继承呢?可以保持原有类的功能上扩展新功能,继承主要解决的问题是共性的抽取,实现代码的复用二.继承的语法举例:相关图像:三.父类成员访问1.子类中(注意)访问父类的成员变量了解原因&…

掌握 Winget 安装:从 Microsoft Store 到 winget-install 脚本的完整方案

掌握 Winget 安装:从 Microsoft Store 到 winget-install 脚本的完整方案 Winget 作为 Windows 官方推出的命令行包管理工具,能极大简化软件的安装、升级与卸载流程。本文将系统梳理从官方渠道到第三方工具的多种安装方式,涵盖普通用户、开发…

简单来说:Redis的增量同步是怎么一回事

简单来说: 增量同步就是Master 只把比 Slave 新的数据发给 Slave,而不是发送全部数据。它像一个持续更新的直播流,或者我之前比喻的“每日更新期刊”。Slave 不用重新加载所有数据,只需要接收和应用这些新的更新。 这就像&#xf…

MySQL 安全优化指南:保护你的数据库免受攻击

在当今高度互联的数字世界中,数据是企业的核心资产,而数据库则是存储这些资产的堡垒。作为最流行的开源关系型数据库之一,MySQL 被广泛应用于各种业务场景。然而,其普及性也使其成为网络攻击者青睐的目标。一旦数据库被攻破,可能导致敏感数据泄露、业务中断、声誉受损,甚…

界面控件Telerik UI for WinForms 2025 Q2亮点 - 支持.NET 10 Preview

随着2025年第二季度新版本的发布,Progress Telerik通过流行的集成IDE的AI编码助手,基于提示的样式和基于GenAI的报表见解重新定义了开发人员的工作效率! Telerik和Kendo UI在构建尖端应用程序时继续推动开发人员工作效率提升,202…

DVWA靶场通关笔记-验证码绕过reCAPTCHA(Medium级别)

目录 一、reCAPTCHA 二、代码审计(Medium级别) 1、渗透准备 (1)配置security为Medium级别。 (2)配置RECAPTCHA参数 (3)再次打开靶场 2、源码分析 (1)…

人工智能安全基础复习用:对抗样本检测与防御

一、对抗样本(Adversarial Examples)定义:对输入样本添加人眼无法察觉的细微干扰,导致模型以高置信度输出错误结果。对抗样本的分布通常偏离自然数据分布,与正常样本在模型中间层/输出层的分布存在差异。核心目标&…

[数学基础] 矩阵的秩及其应用

深入浅出:矩阵的秩及其应用 文章目录深入浅出:矩阵的秩及其应用一、数学定义二、核心作用三、计算方法与步骤方法1:高斯消元法(最常用)方法2:奇异值分解(SVD)方法3:行列式…

LKH-3算法求解TSP问题基本原理与应用

通俗理解LKH-3算法 LKH-3(Lin-Kernighan-Helsgaun)是求解**旅行商问题(TSP)**的最强启发式算法之一,由丹麦计算机科学家Keld Helsgaun在LKH-2基础上改进而来。它的核心思想是:通过智能的“局部破坏与修复”…

游戏开发学习记录

初始化只是第一次实例化的时候调用,show和unshow是打开界面和关闭界面的时候,会多次调用 在一个脚本里面show是每一次打开界面的时候需要做的事情,而Init是初始化。UIMgr里面的数据结构:为什么我要先从数据结构入手呢?…

一级缓存与二级缓存深度剖析:作用域、配置与同步方案全解析

引言 在分布式系统与高并发场景下,缓存机制已成为提升系统性能的关键技术。本文从作用域、失效机制、配置实践到同步方案,系统化解析一级缓存与二级缓存的核心差异与工程实践。 一、一级缓存:会话级数据加速器 1.1 作用域与生命周期 作用域&a…

OneCode MQTT插件开发实战:基于Paho.Client的物联网通信解决方案

引言 在物联网应用开发中,MQTT协议因其轻量、低带宽占用的特性被广泛采用。OneCode平台提供的xui.MQTT插件基于Eclipse Paho.Client实现了完整的MQTT通信能力,本文将从插件用途、核心实现、开发要点和功能扩展四个维度,详解如何基于该插件构建…

1.1_5_1 计算机网络的性能指标(上)

在这个小节中我们要学习计算机网络的性能指标,我们在考研当中主要掌握这样的七个性能指标,分别是速率、带宽、吞吐量、时延、时延带宽积、往返时延和信道利用率。我会把相关性比较紧密的性能指标放在一起讲解。在这个视频中,我们先来学习前三…

Python 性能优化指南:深入剖析代码分析与优化工具

Python 性能优化指南:深入剖析代码分析与优化工具 在 Python 的广泛应用场景中,性能优化既是挑战,也是机遇。无论是构建 Web 应用还是处理数据分析,理解代码性能瓶颈并有效优化至关重要。本文将探讨 Python 代码性能分析的核心方法,并逐步解析关键工具的使用技巧,带您从…