機器學習——K 折交叉驗證(K-Fold Cross Validation),案例:邏輯回歸 交叉尋找最佳懲罰因子C


什么是交叉驗證?

交叉驗證是一種將原始數據集劃分為若干個子集,反復訓練和驗證模型的策略。

交叉驗證(Cross-Validation)適用于你在模型調參(如邏輯回歸中的 C

最常用的:K 折交叉驗證(K-Fold Cross Validation)

將數據集平均分成 K 份,每次取其中 1 份做驗證,剩下的 K-1 份做訓練,重復 K 次,最終將 K 次的結果取平均。

圖示流程(以 K=4 舉例)

輪次訓練集驗證集
1[2,3,4][1]
2[1,3,4][2]
3[1,2,4][3]
4[1,2,3][4]

最后將 4 次的驗證結果平均,得到模型在未見數據上的穩定表現。


為什么要使用交叉驗證?

作用說明
? 穩定評估模型表現解決只依賴單一測試集帶來的評估波動問題
? 防止過擬合多次訓練驗證,有助于檢測模型是否泛化能力不足
? 用于超參數選擇常用于網格搜索、正則化參數調優(如邏輯回歸中的 C)

什么時候該用交叉驗證?

場景是否推薦使用交叉驗證
數據量較小? 強烈建議
不平衡分類問題? 建議配合 StratifiedKFold
模型調參(如 C、k、深度)? 必用
數據量極大(上百萬)? 考慮分批驗證或子集評估

代碼使用:

from sklearn.model_selection import cross_val_scorecross_val_score(estimator, X, y=None, *, scoring=None, cv=None,n_jobs=None, verbose=0, fit_params=None, pre_dispatch='2*n_jobs',error_score=np.nan)

參數詳解:

參數名類型說明
estimator模型對象

要評估的模型,例如 LogisticRegression()RandomForestClassifier()

‘model = LogisticRegression()’后直接傳入‘model’即可

Xndarray / DataFrame特征數據集
yarray-like目標標簽(監督學習必須)
scoringstr 或 callable指定評估指標(如 accuracy, recall, f1, roc_auc 等)
cvint 或 交叉驗證對象交叉驗證折數,如 cv=5;或 StratifiedKFold, KFold 等對象
n_jobsint并行執行的任務數:-1 使用所有核心,1 表示不并行
verboseint控制打印的詳細程度(0為不輸出,越大越詳細)
fit_paramsdict要傳遞給 estimator.fit() 的額外參數(少用)
pre_dispatchstr控制預分發任務數,默認 '2*n_jobs',通常無需改動
error_score‘raise’ 或 float出錯時返回分數,或拋異常。默認返回 NaN


實戰案例:用交叉驗證尋找最優懲罰因子 C

信用卡欺詐檢測數據集?creditcard.csv

  • 數據來源信用卡欺詐檢測實戰數據集_數據集-阿里云天池https://tianchi.aliyun.com/dataset/101562?accounttraceid=c1258603818f44d6a57fe125248cc969rkgu

  • 樣本總數:284,807 條

  • 特征數:30(28個匿名特征 + 金額 Amount + 時間 Time

  • 目標變量Class(0=正常交易,1=欺詐交易)

import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression  # 導入邏輯回歸模型
from sklearn.model_selection import train_test_split, cross_val_score  # 用于數據拆分和交叉驗證
from sklearn.preprocessing import StandardScaler  # 用于數據標準化處理
from sklearn import metrics  # 用于模型評估指標計算data = pd.read_csv('creditcard.csv')# 初始化標準化器,對交易金額(Amount)進行標準化處理
scaler = StandardScaler()
data['Amount'] = scaler.fit_transform(data[['Amount']])     # 準備特征數據X(排除時間和目標變量)和目標變量y(欺詐標簽,1表示欺詐,0表示正常)
X = data.drop(["Time","Class"], axis=1)
y = data.Class# 將數據拆分為訓練集(70%)和測試集(30%),設置隨機種子保證結果可復現
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=100)#----------------------------------------------------------------------------------------
# 以下部分用于尋找最優的正則化參數C
c_range = [0.01, 0.1, 1, 10, 100]   # 定義要嘗試的正則化參數C的取值范圍(C越小,正則化強度越大)
scores = []   # 存儲不同C值對應的交叉驗證平均召回率
for c in c_range:model = LogisticRegression(C=c, penalty='l2', solver='lbfgs', max_iter=1000)   # 初始化邏輯回歸模型,指定正則化參數C、L2正則化、求解器和最大迭代次數score = cross_val_score(model, X_train, y_train, cv=8, scoring='recall')   # 使用8折交叉驗證,計算模型在訓練集上的召回率recallscore_mean = sum(score) / len(score)   # 計算交叉驗證召回率的平均值scores.append(score_mean)   # 將平均召回率添加到列表中print(score_mean)
# 找到最大平均召回率對應的C值,作為最優懲罰因子
best_c = c_range[np.argmax(scores)]   #argmax返回數組中最大值所在的索引位置
print(f'最優懲罰因子為:{best_c}')
#----------------------------------------------------------------------------------------# 使用最優懲罰因子訓練最終的邏輯回歸模型
model = LogisticRegression(C=best_c, penalty='l2', solver='lbfgs')
model.fit(X_train, y_train)

K-Fold Cross Validation 背后的原理(做了什么)

cross_val_score(model, X, y, cv=8) 等價于以下操作:

  1. 將數據按 8?等份分割

  2. 第一次拿前 7?份訓練,第 8?份驗證 → 計算指標

  3. 第二次拿 1,2,3,4,5,6,8 訓練,第 7?份驗證 → 計算指標

  4. ...

  5. 得到 8?個指標結果,返回組成數組

自動完成了分割、訓練、預測和評分


常見擴展:StratifiedKFold(保持類別比例)

對于不平衡數據(如欺詐檢測),StratifiedKFold 是更合適的選擇,它能在每一折中保持正負樣本比例一致。

from sklearn.model_selection import StratifiedKFoldskf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(model, X_train, y_train, cv=skf, scoring='recall')

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917393.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917393.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917393.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

藍橋杯----串口

(五)、串口1、串口通信簡介制定通信的規則,通信雙方按照協議規則進行數據收發,將一個設備的數據傳送到另一個設備,擴展硬件系統,串口USART有兩根通信線Tx、Rx,可同時雙向通信,稱之為…

錯誤: 找不到或無法加載主類 原因: java.lang.ClassNotFoundException

背景: 代碼沒有更改,主類位置也沒有移動,運行時突然報找不到或無法加載主類的錯誤 錯誤: 找不到或無法加載主類 原因: java.lang.ClassNotFoundException編譯器上方顯示 Java file is located outside of the module source root so it wont …

Lock 接口及實現類詳解:從 ReentrantLock 到并發場景實踐

在 Java 并發編程中,除了synchronized關鍵字,java.util.concurrent.locks.Lock接口及其實現類是另一種重要的同步機制。自 JDK 5 引入以來,Lock接口憑借靈活的 API 設計、可中斷的鎖獲取、公平性控制等特性,成為復雜并發場景的首選…

「iOS」————SideTable

iOS學習前言sideTableSlideTablesSideTableBufSideTable前言 我們在上一篇中,簡單的介紹了weak的實現原理。其中弱引用表就是存儲在SideTable中的,這里我們來學習了解一下SideTable sideTable sideTable主要用于存儲和管理對象的額外信息,…

【PHP】CURL請求第三方API接口

當我們需要調用第三方接口時,就需要使用CURL,通過CURL操作去請求第三方API接口,有的是通過POST方式,有的是通過GET方式,下面介紹一個通用的使用CURL調用API接口的方法。一、CURL操作共兩個方法,分別是CURL操…

對于考研數學的理解

文章目錄高等數學總結補充說明1. 微分方程與無窮級數的特殊性2. 隱藏的邏輯鏈條3. 向量代數的橋梁作用核心框架為什么這樣設計?結論線性代數核心邏輯框架各講之間的本質聯系1. 行列式 → 矩陣2. 矩陣 → 向量組3. 矩陣 向量組 → 線性方程組4. 矩陣 → 特征值與特征…

基于 Hadoop 生態圈的數據倉庫實踐 —— OLAP 與數據可視化(四)

目錄 四、數據可視化與 Hue 簡介 1. 數據可視化簡介 (1)數據可視化的重要性 (2)數據可視化的用途 (3)實施數據可視化需要考慮的問題 (4)幾種主要的數據可視化工具 2. Hue 簡介…

HarmonyOS 開發:基于 ArkUI 實現復雜表單驗證的最佳實踐

摘要 在現代應用開發中,表單是最常見的交互方式之一。不管是用戶注冊、信息錄入,還是登錄驗證,表單的可靠性直接影響用戶體驗。而在鴻蒙 ArkUI 開發中,雖然表單結構清晰,但要實現 復雜驗證(比如&#xff1a…

高效游戲狀態管理:使用雙模式位運算與數學運算

在游戲開發中,狀態管理是一個核心問題。無論是任務系統、成就系統還是玩家進度跟蹤,我們都需要高效地存儲和查詢大量狀態。本文將深入分析一個創新的游戲狀態管理工具類 GameStateUtil,它巧妙結合了位運算和數學運算兩種模式,在存…

linux-process-control

Linux進程控制 1. 進程終止 1.1. 進程終止的本質是回收資源 1.1 釋放資源 內存資源: 釋放進程的地址空間(mm_struct),包括代碼段、數據段、堆、棧等,通過寫時復制(CoW)共享的頁會減少引用計數&a…

Autoswagger:揭露隱藏 API 授權缺陷的開源工具

Autoswagger 是一款免費的開源工具,用于掃描 OpenAPI 文檔中列出的 API,查找授權漏洞。 即使在擁有成熟安全團隊的大型企業中,這類漏洞仍然很常見,而且尤其危險,因為即使技術水平不高的人也能利用它們。 Autoswagger…

Golang 語言 Channel 的使用方式

一、無緩存 channel無緩沖channel 可用于兩個goroutine 之間 傳遞信號,比如以下示例:順序打印1 至 100 的奇數和偶數:import ("fmt""time" )func main() {block : make(chan struct{})go odd(block)go even(block)time.S…

Element Plus常見基礎組件(一)

基礎組件 Button 按鈕 一、基礎用法 <el-button>默認按鈕</el-button> <el-button type"primary">主要按鈕</el-button>二、按鈕類型 (type) 類型說明示例代碼default默認按鈕<el-button>默認</el-button>primary主要按鈕&a…

sdxl量化加速筆記

文章目錄一、量化加速sdxl模型1&#xff09;涉及模型2&#xff09;環境安裝3&#xff09;轉換模型safetensor to pytorch文件4&#xff09;tensorRT的環境準備&#xff08;1&#xff09;下載tensorRT 10.10&#xff08;2&#xff09;下載cuda一、量化加速sdxl模型 1&#xff0…

西門子 G120 變頻器全解析:從認知到參數設置

在工業自動化領域&#xff0c;變頻器作為電機驅動的核心設備&#xff0c;其穩定運行與精準控制直接影響生產效率。西門子 G120 變頻器憑借可靠性能與靈活配置&#xff0c;成為眾多工業場景的優選。本文將從基礎認知、操作面板到參數設置&#xff0c;全方位帶你掌握 G120 變頻器…

【自動化運維神器Ansible】YAML支持的數據類型詳解:構建高效Playbook的基石

目錄 1 YAML數據類型概述 1.1 為什么數據類型很重要&#xff1f; 1.2 YAML數據類型分類 2 標量類型&#xff08;Scalars&#xff09; 2.1 字符串&#xff08;String&#xff09; 2.2 布爾值&#xff08;Boolean&#xff09; 2.3 數值&#xff08;Numbers&#xff09; 2…

基于崗位需求的康養休閑旅游服務實訓室建設方案

一、康養休閑旅游服務實訓室建設方案建設需求分析康養休閑旅游服務行業的快速發展對技能人才提出了精準化、場景化的能力要求&#xff0c;康養休閑旅游服務實訓室建設方案需緊密對接健康咨詢、接待服務、康樂服務等核心崗位群的實際需求。從崗位技能來看&#xff0c;健康咨詢崗…

MES 與工業物聯網(IIoT)的化學反應:為何是智能工廠的 “神經中樞”?

從“被動救火”到“主動預警”的工廠革命想象一下&#xff0c;當你正在家中熟睡時&#xff0c;智能手環突然震動&#xff0c;提醒你心率異常&#xff1b;早上出門前&#xff0c;手機 APP 告訴你愛車的某個零件即將達到磨損極限&#xff0c;建議及時更換。這些日常生活中的智能預…

工作好用小工具積累

1、內部環境太多&#xff0c;網站導航git地址&#xff1a;https://github.com/hslr-s/sun-panel/releases gitee地址&#xff1a;https://gitee.com/luofei1284999247/sun-panel

智能Agent場景實戰指南 Day 26:Agent評估與性能優化

【智能Agent場景實戰指南 Day 26】Agent評估與性能優化 開篇 歡迎來到"智能Agent場景實戰指南"系列的第26天&#xff01;今天我們將深入探討智能Agent的評估方法與性能優化技術。構建高效、可靠的智能Agent系統需要完善的評估體系和優化策略&#xff0c;本文將系統…