機器學習——KNN超參數

sklearn.model_selection.GridSearchCV 是 scikit-learn 中用于超參數調優的核心工具,通過結合交叉驗證和網格搜索實現模型參數的自動化優化。以下是詳細介紹:


一、功能概述

GridSearchCV 在指定參數網格上窮舉所有可能的超參數組合,通過交叉驗證評估每組參數的性能,最終選擇最優參數組合。其核心價值在于:

  1. 自動化調參:替代手動參數調試,提升效率3。
  2. 交叉驗證支持:通過 K 折交叉驗證減少過擬合風險,評估結果更可靠。


二、核心參數說明

參數類型作用
estimator估計器對象需調參的模型(如?SVC()RandomForestClassifier()
param_grid字典或列表參數名稱(字符串)為鍵,候選參數值列表為值(如?{'C': [1,10], 'kernel': ['linear','rbf']}
scoring字符串/可調用對象評估指標(如?'accuracy''roc_auc'),默認使用模型的?score()?方法1013
cvint/交叉驗證生成器交叉驗證折數(默認 5 折),或自定義數據劃分策略28
n_jobsint并行任務數(-1?表示使用所有 CPU 核)

三、主要屬性

調用?fit()?方法后可通過以下屬性獲取結果:

  • best_score_:交叉驗證中的最高得分。
  • best_params_:最優參數組合(如?{'C': 10, 'kernel': 'rbf'})。
  • cv_results_:詳細結果字典,包含每組參數的平均得分、標準差等。

四、工作流程

  1. 數據劃分:原始數據分為訓練集和測試集,訓練集進一步通過 K 折交叉驗證劃分為子集。
  2. 參數組合生成:根據?param_grid?生成所有可能的超參數組合(如 2×2 網格生成 4 組參數。
  3. 交叉驗證評估:每組參數在 K 折數據上訓練并驗證,計算平均得分。
  4. 最優模型選擇:選擇平均得分最高的參數組合,最終在完整訓練集上訓練模型8

五、代碼演示

1、手動調參(循環調參)

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris#加載數據集
iris = load_iris()
x = iris.data
y = iris.target#劃分數據集
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.7, random_state=233, stratify=y)#分類
from sklearn.neighbors import KNeighborsClassifier#設置默認參數
neigh = KNeighborsClassifier(n_neighbors=3,weights='distance',#'uniform',p = 2
)
#適配參數
neigh.fit(x_train, y_train)
#評估模型
neigh.score(x_test, y_test) #結果:0.9777777777777777#自動設參(主要遍歷每個參數,找出最佳結果的參數)
best_score = -1
best_n  = -1
best_weight = ''
best_p = -1for n in range(1, 20):for weight in ['uniform', 'distance']:for p in range(1, 7):neigh = KNeighborsClassifier(n_neighbors=n,weights=weight,p = p)neigh.fit(x_train, y_train)score = neigh.score(x_test, y_test)if score > best_score:best_score = scorebest_n = nbest_weight = weightbest_p = pprint("n_neighbors:", best_n)
print("weights:", best_weight)
print("p:", best_p)
print("score:", best_score)#結果:n_neighbors: 5
#weights: uniform
#p: 2
#score: 1.0

2、KNN-sklearn.model_selection.GridSearchCV調參

import numpy as np
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris#加載數據集
iris=load_iris()
x=iris.data
y=iris.target#劃分數據集(7:3)
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.7, random_state=233, stratify=y)#設置參數范圍
params = {'n_neighbors': [n for n in range(1, 20)],'weights': ['uniform', 'distance'],'p': [p for p in range(1, 7)]
}#定義調參對象
grid = GridSearchCV(estimator=KNeighborsClassifier(),param_grid=params,n_jobs=-1
)#適配參數
grid.fit(x_train, y_train)#打印最佳參數
print(grid.best_params_)#輸出預測值
print(grid.best_estimator_.predict(x_test))#模型評估
print(grid.best_estimator_.score(x_test, y_test))

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

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

相關文章

穩定運行的以Oracle NoSQL數據庫為數據源和目標的ETL性能變差時提高性能方法和步驟

提高基于Oracle NoSQL數據庫的ETL(提取、轉換、加載)性能時,主要從多個角度進行優化。 提高基于Oracle NoSQL數據庫的ETL性能需要綜合考慮多個方面,關鍵是減少不必要的I/O操作、優化數據轉換和加載過程、合理配置Oracle NoSQL數據…

Compose 原理解析

Compose 的組件都是放在 setContent() 之后才能顯示的,那需要先看看這個函數的作用。 先看 ComponentActivity 的擴展函數 setContent(): /*** 將給定的可組合項合成到給定的 Activity 中。[content] 將成為給定 Activity 的根視圖。* 這大致相當于使用…

細說衛星導航:測距定位原理

測距定位原理 1. 偽距測量技術 核心原理:衛星發射信號,用戶接收并記錄傳播時間,乘以光速得到距離(偽距)。 技術細節: 信號傳播路徑分析 信號結構: 衛星信號包含三部分: 載波&…

19921 多重背包

19921 多重背包 ??難度:中等 🌟考點:動態規劃、背包問題 📖 📚 import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {static int N …

js逆向之斷點調試

1.XHR/提取斷點用法 當刷新頁面時候,有大量請求,并且你無法定位參數信息的時候,或者參數被混淆無法搜到,可以用該方法,該方法是會捕獲所有請求連接,然后我們通過連接過濾出自己想要的請求,然后…

基于32單片機的無人機直流電機閉環調速系統設計

標題:基于32單片機的無人機直流電機閉環調速系統設計 內容:1.摘要 本文針對無人機直流電機調速需求,設計了基于32單片機的無人機直流電機閉環調速系統。背景在于無人機應用場景不斷拓展,對電機調速精度和穩定性要求日益提高。目的是開發一套高精度、響應…

如何用Deepseek制作流程圖?

使用Deepseek制作流程圖,本質上是讓AI根據你的需求,生成相關流程圖的代碼,然后在流程圖編輯器中渲染,類似于Python一樣,ChatGPT可以生成代碼,但仍需在IDE中執行。 你知道繪制流程圖最高效的工具是什么嗎&a…

嵌入式硬件工程師從小白到入門-原理圖(三)

原理圖繪制從小白到入門:知識點速通與注意事項 一、原理圖繪制基礎概念 什么是原理圖? 原理圖(Schematic)是電子電路的圖形化表示,展示元器件之間的電氣連接關系,是硬件設計的藍圖。 核心元素 元器件符號&…

WSL 環境橋接與雷達通信配置筆記

作者: DWDROME 維護時間: 2025-03-22 參考文章:Windows子系統(WSL)通過橋接網絡實現被外部局域網主機直接訪問 WSL 環境橋接與雷達通信配置筆記 環境說明 Windows 11 專業版(啟用 Hyper-V)WSL2 Ubuntu 20.04物理網線&#xff08…

ToDesk云電腦各類鼠標有什么區別?虛擬/3D/游戲鼠標等各有利

不知道各位在使用ToDesk云電腦的時候是否是有注意到,這其中的鼠標竟有多種名稱、多種模式可以選,比如鎖定鼠標、3D鼠標、游戲鼠標這幾項。 那么這些不同名稱的鼠標都代表什么意思吶,又應該怎么選擇、怎么用吶?本篇內容小編就為大…

DeepBI:重構流量邏輯,助力亞馬遜廣告實現高效流量增長

在日益激烈的跨境電商競爭環境中,廣告投放早已從“粗放撒網”走向“精細化運營”。尤其是在亞馬遜這樣一個成熟且競爭白熱化的平臺,如何在廣告預算有限的前提下實現高效曝光、精準觸達、穩定轉化,成為眾多賣家和運營團隊面臨的核心挑戰。 De…

java項目之基于ssm的畢業論文管理系統(源碼+文檔)

項目簡介 畢業論文管理系統實現了以下功能: 本畢業論文管理系統主要實現的功能模塊包括學生模塊、導師模塊和管理員模塊三大部分,具體功能分析如下: (1)導師功能模塊:導師注冊登錄后主要功能模塊包括個人…

【自學筆記】Linux基礎知識點總覽-持續更新

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 Linux 基礎知識點總覽目錄Linux 簡介文件和目錄結構常用命令文件操作目錄操作權限管理文本處理 Shell 腳本基礎進程管理用戶和組管理網絡配置 總結 Linux 基礎知識點…

【PCB工藝】晶體管的發展歷史

晶體管被認為是20世紀最偉大的發明之一,因為沒有晶體管就不會有現代電腦、手機或平板??,你也無法閱讀到這里的內容,因為不存在網絡。 ——本文純粹出于對過往奮斗在這個領域中科學家的緬懷。科學家有太多寶貴的思想和經驗值得我們認真總結和…

第23章:Kubernetes網絡模型深度剖析

第23章:Kubernetes網絡模型深度剖析 作者:DogDog_Shuai 閱讀時間:約25分鐘 難度:高級 目錄 1. 引言2. Kubernetes網絡模型基礎3. 四種網絡通信模式4. CNI架構深度解析5. 網絡實現原理

HTML應用指南:利用GET請求獲取貓眼電影日票房信息——以哪吒2為例

2025年春節檔期,國產動畫電影《哪吒之魔童鬧海》(以下簡稱《哪吒2》)以顛覆性的敘事風格與工業化制作水準震撼登場,不僅刷新了中國動畫電影的票房紀錄,更成為全球影史現象級作品。影片憑借春節檔期的爆發式開局、持續5…

Model Context Protocol:下一代AI系統集成范式革命

在2023年全球AI工程化報告中,開發者面臨的核心痛點排名前三的分別是:模型與業務系統集成復雜度(58%)、上下文管理碎片化(42%)、工具調用標準化缺失(37%)。傳統API集成模式在對接大語言模型時暴露明顯短板:RESTful接口無法承載動態上下文,GraphQL缺乏工具編排能力,gR…

Java 鎖機制全面解析

在 Java 并發編程中,鎖(Lock)是保證線程安全的關鍵工具。本文將全面介紹 Java 的鎖機制,包括 synchronized 關鍵字、Lock 接口及其實現、讀寫鎖、樂觀鎖與悲觀鎖等,幫助新手理解 Java 并發控制。 1. Java 中的鎖概述 …

JavaScript 中 “new Map()”的使用

new Map() 是 JavaScript 中用于創建 Map 對象 的構造函數。Map 是一種鍵值對集合,類似于普通對象(Object),但有以下區別: 1. Map 的特點 1.1 鍵的類型 Map:鍵可以是任意類型(包括對象、函數、…

Rust語言的集成測試

Rust語言的集成測試 引言 隨著軟件開發的不斷發展,測試已成為一個不可或缺的環節。特別是在系統復雜度日益增加的今天,確保代碼質量和穩定性變得尤為重要。Rust作為一門強調安全性和性能的編程語言,其測試框架提供了豐富的工具來幫助開發者…