
- 機器學習基礎
- ML - 首頁
- ML - 簡介
- ML - 入門
- ML - 基本概念
- ML - 生態系統
- ML - Python 庫
- ML - 應用
- ML - 生命週期
- ML - 所需技能
- ML - 實現
- ML - 挑戰與常見問題
- ML - 限制
- ML - 例項
- ML - 資料結構
- ML - 數學
- ML - 人工智慧
- ML - 神經網路
- ML - 深度學習
- ML - 獲取資料集
- ML - 類別資料
- ML - 資料載入
- ML - 資料理解
- ML - 資料準備
- ML - 模型
- ML - 監督學習
- ML - 無監督學習
- ML - 半監督學習
- ML - 強化學習
- ML - 監督學習與無監督學習
- 機器學習資料視覺化
- ML - 資料視覺化
- ML - 直方圖
- ML - 密度圖
- ML - 箱線圖
- ML - 相關矩陣圖
- ML - 散點矩陣圖
- 機器學習統計學
- ML - 統計學
- ML - 均值、中位數、眾數
- ML - 標準差
- ML - 百分位數
- ML - 資料分佈
- ML - 偏度和峰度
- ML - 偏差和方差
- ML - 假設
- ML中的迴歸分析
- ML - 迴歸分析
- ML - 線性迴歸
- ML - 簡單線性迴歸
- ML - 多元線性迴歸
- ML - 多項式迴歸
- ML中的分類演算法
- ML - 分類演算法
- ML - 邏輯迴歸
- ML - K近鄰演算法 (KNN)
- ML - 樸素貝葉斯演算法
- ML - 決策樹演算法
- ML - 支援向量機
- ML - 隨機森林
- ML - 混淆矩陣
- ML - 隨機梯度下降
- ML中的聚類演算法
- ML - 聚類演算法
- ML - 基於中心點的聚類
- ML - K均值聚類
- ML - K中心點聚類
- ML - 均值漂移聚類
- ML - 層次聚類
- ML - 基於密度的聚類
- ML - DBSCAN聚類
- ML - OPTICS聚類
- ML - HDBSCAN聚類
- ML - BIRCH聚類
- ML - 親和傳播
- ML - 基於分佈的聚類
- ML - 凝聚層次聚類
- ML中的降維
- ML - 降維
- ML - 特徵選擇
- ML - 特徵提取
- ML - 後退消除法
- ML - 前向特徵構建
- ML - 高相關性過濾器
- ML - 低方差過濾器
- ML - 缺失值比率
- ML - 主成分分析
- 強化學習
- ML - 強化學習演算法
- ML - 利用與探索
- ML - Q學習
- ML - REINFORCE演算法
- ML - SARSA強化學習
- ML - 演員-評論家方法
- 深度強化學習
- ML - 深度強化學習
- 量子機器學習
- ML - 量子機器學習
- ML - 使用Python的量子機器學習
- 機器學習雜項
- ML - 效能指標
- ML - 自動工作流
- ML - 提升模型效能
- ML - 梯度提升
- ML - 自舉匯聚 (Bagging)
- ML - 交叉驗證
- ML - AUC-ROC曲線
- ML - 網格搜尋
- ML - 資料縮放
- ML - 訓練和測試
- ML - 關聯規則
- ML - Apriori演算法
- ML - 高斯判別分析
- ML - 成本函式
- ML - 貝葉斯定理
- ML - 精度和召回率
- ML - 對抗性
- ML - 堆疊
- ML - 時期
- ML - 感知器
- ML - 正則化
- ML - 過擬合
- ML - P值
- ML - 熵
- ML - MLOps
- ML - 資料洩露
- ML - 機器學習的貨幣化
- ML - 資料型別
- 機器學習 - 資源
- ML - 快速指南
- ML - 速查表
- ML - 面試問題
- ML - 有用資源
- ML - 討論
機器學習 - 交叉驗證
交叉驗證是一種強大的技術,用於在機器學習中估計模型在未見資料上的效能。它是構建穩健機器學習模型的重要步驟,因為它有助於識別過擬合或欠擬合,並有助於確定最佳模型超引數。
什麼是交叉驗證?
交叉驗證是一種用於評估模型效能的技術,它透過將資料集劃分為子集,在資料的一部分上訓練模型,然後在剩餘的資料上驗證模型來實現。交叉驗證的基本思想是使用資料的一個子集來訓練模型,並使用另一個子集來測試其效能。這使得機器學習模型能夠在各種資料上進行訓練,並更好地泛化到新資料。
有不同的交叉驗證技術可用,但最常用的技術是k折交叉驗證。在k折交叉驗證中,資料被劃分為k個大小相等的部分。然後在k-1個部分上訓練模型,並在剩餘的部分上進行測試。此過程重複k次,每次使用k個部分中的一個作為驗證資料。然後對k次迭代的模型最終效能取平均值,以獲得模型效能的估計值。
為什麼交叉驗證很重要?
交叉驗證是機器學習中必不可少的一項技術,因為它有助於防止模型過擬合或欠擬合。過擬合發生在模型過於複雜並且過分擬合訓練資料時,導致在新資料上的效能下降。另一方面,欠擬合發生在模型過於簡單並且無法捕捉資料中的潛在模式時,導致訓練資料和測試資料上的效能下降。
交叉驗證還有助於確定最佳模型超引數。超引數是控制模型行為的設定。例如,在決策樹演算法中,樹的最大深度是一個超引數,它決定了模型的複雜程度。透過使用交叉驗證來評估模型在不同超引數值下的效能,我們可以選擇最大化模型效能的最佳超引數。
在Python中實現交叉驗證
在本節中,我們將討論如何使用Scikit-learn庫在Python中實現k折交叉驗證。Scikit-learn是一個流行的Python機器學習庫,它提供了一系列用於資料預處理、模型選擇和評估的演算法和工具。
為了演示如何在Python中實現交叉驗證,我們將使用著名的鳶尾花資料集。鳶尾花資料集包含三種不同鳶尾花物種的花萼長度、花萼寬度、花瓣長度和花瓣寬度的測量值。目標是構建一個模型,可以根據其測量值預測鳶尾花物種。
首先,我們需要使用Scikit-learn的load_iris()函式載入資料集,並使用train_test_split()函式將其拆分為訓練集和測試集。訓練集將用於訓練模型,測試集將用於評估模型的效能。
from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # Load the Iris dataset iris = load_iris() # Split the data into a training set and a test set X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)
接下來,我們將使用Scikit-learn的DecisionTreeClassifier()函式建立一個決策樹分類器。
from sklearn.tree import DecisionTree
建立一個決策樹分類器。
clf = DecisionTreeClassifier(random_state=42)
現在,我們可以使用k折交叉驗證來評估模型的效能。我們將使用Scikit-learn的cross_val_score()函式執行k折交叉驗證。該函式將模型、訓練資料、目標變數和摺疊數作為輸入。它返回一個分數陣列,每個摺疊一個。
from sklearn.model_selection import cross_val_score # Perform k-fold cross-validation scores = cross_val_score(clf, X_train, y_train, cv=5)
在這裡,我們指定摺疊數為5,這意味著資料將被劃分為5個大小相等的部分。cross_val_score()函式將在4個部分上訓練模型,並在剩餘的部分上進行測試。此過程將重複5次,每次使用一個部分作為驗證資料。該函式返回一個分數陣列,每個摺疊一個。
最後,我們可以計算分數的均值和標準差,以獲得模型效能的估計值。
import numpy as np # Calculate the mean and standard deviation of the scores mean_score = np.mean(scores) std_score = np.std(scores) print("Mean cross-validation score: {:.2f}".format(mean_score)) print("Standard deviation of cross-validation score: {:.2f}".format(std_score))
此程式碼的輸出將是分數的均值和標準差。平均分數表示模型在所有摺疊上的平均效能,而標準差表示分數的可變性。
示例
以下是Python中交叉驗證的完整實現:
from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import cross_val_score import numpy as np # Load the iris dataset iris = load_iris() # Define the features and target variables X = iris.data y = iris.target # Create a decision tree classifier clf = DecisionTreeClassifier(random_state=42) # Perform k-fold cross-validation scores = cross_val_score(clf, X, y, cv=5) # Calculate the mean and standard deviation of the scores mean_score = np.mean(scores) std_score = np.std(scores) print("Mean cross-validation score: {:.2f}".format(mean_score)) print("Standard deviation of cross-validation score: {:.2f}".format(std_score))
輸出
執行此程式碼時,將產生以下輸出:
Mean cross-validation score: 0.95 Standard deviation of cross-validation score: 0.03