機器學習進階 第一節 第九課
概述
一般在進行模型的測試是, 我們會將資料分為訓練集合測試集. 在給定的樣本空間中, 拿出大部分樣本作為訓練集來訓練模型, 剩餘的小部分樣本使用剛建立的模型進行預測.
訓練集與測試集
訓練集與測試集的分割可以使用 cross_validation 中的 train_test_split 方法. 大部分的交叉驗證迭代器都內建一個劃分資料前進行資料索引打散的選項, train_test_split 方法內部使用的就是交叉驗證迭代器. 預設不會進行打散, 包括設定 cv = some_integer (直接) k 摺疊交叉驗證的 cross_val_score 返回一個隨機的劃分. (如果資料具有時間性, 千萬不要打散資料在劃分)
sklearn.cross_validation.train_test_split
程式碼如下:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 例項化
li = load_iris()
# 注意返回值: 訓練集 train: x_train, y_train, 測試集 test: x_test, y_test
x_train, x_test, y_train, y_test = train_test_split(li.data, li.target, test_size=0.25)
# 除錯輸出
print("訓練集特徵值和目標值: ", x_train, y_train)
print("測試集特徵值和目標值: ", x_test, y_test)
上面的方法也有侷限. 應為只進行一次測試, 並不一定代表模型的真實準確率. 因為, 模型的準確率和資料的切分有關係, 在資料量不大的情況下, 影響尤其突出. 所以還是需要一個比較好的解決方案.
holdout method
評估模型泛化能力的典型方法是 holdout 交叉驗證 (holdout cross vaildation). holdout 方法很簡單, 我們只需要將袁術資料集分割為訓練集和測試集, 前者用於訓練模型, 後者用於評估模型的效能. 一般來說, Holdout 驗證並非一種交叉驗證, 因為資料並沒有交叉使用. 隨機從最初的樣本中選出部分, 形成交叉驗證資料, 而剩餘的就當做訓練資料. 一般來說, 少於原本樣本三分之一的資料被選做驗證資料, 所有這種方法得到的結果其實並不具有說服性.
k-折交叉驗證
K 折交叉驗證, 初始取樣分割成 K 個樣本, 一個單獨的子樣本被保留作為驗證模型的資料, 其他 K-1 個樣本用來訓練. 交叉驗證重複 K 次, 每個子樣本驗證異常, 平均 K 次的結果或者使用其它結合方式, 最終得到一個單一估測. 這個方法的優勢在於, 同時複用運用隨機產生的子樣本進行訓練和驗證, 每次的結果驗證一次, 10 折交叉驗證是最常用的.
例如 5 折交叉驗證, 全部可用資料集分成五個集合, 每次迭代都選用其中的 1 個集合資料作為驗證即, 另外 4 個集合作為訓練集, 經過 5 組的迭代過程, 交叉驗證的好處在於, 可以保證所有資料都有機會被訓練和驗證, 也盡最大可能讓優化的模型效能表現的更加可信.
使用交叉驗證的最簡單的方式是在估計器和資料集上使用 cross_val_score 函式.
sklearn.cross_validation.cross_val_score
程式碼如下:
from sklearn.cross_validation import cross_val_score
diabetes = datasets.load_diabetes()
X = diabetes.data[:150]
y = diabetes.target[:150]
lasso = linear_model.Lasso()
print(cross_val_score(lasso, X, y))
使用交叉驗證方法的目的主要有 2 個:
- 從有限的學習資料中獲取儘可能多的有效資訊
- 可以在一定程度上避免過擬合問題
estimator 的工作流程
在 sklearn 中, 估計器 (estimator) 是一個重要的角色, 分類器和迴歸都屬於 estimator. 在估計器中有兩個重要的方法是 fit 和 transform.
- fit 方法用於從訓練集中學習模型引數
- transform 用學習帶的引數轉換資料
相關文章
- 機器學習進階 第一節 第一課機器學習
- 機器學習進階 第一節 第四課機器學習
- 機器學習進階 第一節 第七課機器學習
- 機器學習進階 第一節 第十六課機器學習
- 機器學習 第五節 第九課機器學習
- 機器學習進階 第二節 第八課機器學習
- 第一節課心得
- 機器學習 第六節 第二課機器學習
- 機器學習 第五節 第八課機器學習
- 【機器學習】第一節 - 基本概念機器學習
- ARM第一節基礎課
- JAVA入門第三季第一章第九節課後練習題!Java
- 機器學習入門第一課:從高中課本談起機器學習
- 前端進階課程之this指向前端
- OOP課第一階段總結OOP
- Java基礎 第一節 第八課Java
- Java基礎 第三節 第一課Java
- Python進階細節Python
- 機器學習30天進階實戰機器學習
- 前端進階課程之宣告提升前端
- 資料結構 第一節 第六課資料結構
- MindStudio訓練營第一季-進階班課後筆記筆記
- python第一節課內容及練習Python
- 10.15 見習後的第一節課
- 第九小節 函式函式
- 軟體工程概論18918第一節課軟體工程
- iOS進階課程-Newsstand程式設計iOS程式設計
- 前端進階課程之單元測試前端
- 第九節 - SCNGeometry用法詳解
- 第一章:第一節資料載入及初步觀察-課程
- 機器學習 | 吳恩達機器學習第九周學習筆記機器學習吳恩達筆記
- 機器學習入門(三) — 迴歸模型(進階案例)機器學習模型
- Spark修煉之道(進階篇)——Spark入門到精通:第一節 Spark 1.5.0叢集搭建Spark
- redis進階之快取管理(1課時)Redis快取
- 4、Pico Robot 感測器進階課程
- 吳恩達機器學習第一課 Supervised Machine Learning Regression and Classification吳恩達機器學習Mac
- 《Web前端開發精品課HTML與CSS進階教程》——第一部分 HTML進階第01章 HTML基礎知識1.1 HTML和CSS進階簡介Web前端HTMLCSS
- C++入門經典第九章指標第一節自測題C++指標