Python 機器學習核心入門與實戰進階 Day 7 - 復盤 + 綜合實戰挑戰

? 今日目標

  • 綜合應用本周所學的:

    • 分類算法(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 代碼性能分析的核心方法,并逐步解析關鍵工具的使用技巧,帶您從…