iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0

前言

重新抽樣(Resampling)的方法在機器學習或深度學習領域是一個非常重要工具,由訓練集(trainning set)中重新抽樣獲得樣本,在每個樣本上建構模型並整合這些模型在不同樣本上的結果,可以降低原來單個資料集中建構模型產生的偏差(bias)以及方差(variance),也可以用來選擇模型中比較適合的超參數(hyperparameter),例如lasso與ridge的https://chart.googleapis.com/chart?cht=tx&chl=%5Clambda、KNN的K等等。

1. K-fold Cross-Validation (K-fold CV)

將資料隨機切割成K等分(以k=10為例),利用切割後的K-1個資料集來訓練模型,最後第K的資料集當成驗證集(validation set),以這樣的方式將這K個資料集輪流當成驗證集(也就是重複K次),最後可以得到每個結果測試誤差(testing error),將這K個結果的平均誤差拿來當成評估模型好壞的指標。

https://ithelp.ithome.com.tw/upload/images/20220925/20151276HaIc7HPNz1.png

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import datasets

X, y = datasets.load_iris(return_X_y=True)
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=10)

scores = cross_val_score(knn, X, y, cv=5)
scores

https://ithelp.ithome.com.tw/upload/images/20220925/20151276TEmJ37dgH1.png

#選擇KNN的K,找能夠使平均error最小的K
k_range = range(1,31)
k_scores = []
for k_number in k_range:
    knn = KNeighborsClassifier(n_neighbors=k_number)
    scores = cross_val_score(knn,X,y,cv=10,scoring='accuracy')
    k_scores.append(scores.mean())

2. Leave-One-Out Cross-Validation (LOOCV)

為K-fold CV的特例,假設資料總共有N筆,LOOCV就是將資料切割成N等分的K-fold CV,可以獲得比K-fold CV更精準且誤差更小的error,缺點是運算效率比較差。

from sklearn.model_selection import LeaveOneOut

X = [1, 2, 3, 4]
loo = LeaveOneOut()
for train, test in loo.split(X):
    print("%s %s" % (train, test))

https://ithelp.ithome.com.tw/upload/images/20220925/20151276U0tR4D70vR.png

3. Bootstrap

Bootstrap是一種從資料中重複抽取資料的方法(取後放回),可以自行決定抽取樣本大小。舉例來說假設有人口為1000人的族群,想了解他們的身高分佈,就可以利用Bootstrap的方式取代實際測量1000人的身高,例如抽取50組(每組4人)的樣本,利用他們的樣本平均值來估計總體的人口身高。

import numpy as np
import random

x = np.random.normal(loc= 300.0, size=1000)
print(np.mean(x))

sample_mean = []
for i in range(50):
  y = random.sample(x.tolist(), 4)
  avg = np.mean(y)
  sample_mean.append(avg)

print(np.mean(sample_mean))

上一篇
Day17 分類(Classification)(5)-- Python建立線性判別分析(LDA)模型
下一篇
Day19 決策樹(Decision Tree)(1)--迴歸樹(Regression Tree)
系列文
人類學習機器學習的學習筆記 with Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言