Kross-validatsiya


ULASHISH

O‘zaro tekshirish

Modellarni sozlashda biz ko‘rinmaydigan ma’lumotlar bo‘yicha umumiy model unumdorlikni oshirishga intilamiz. Giperparametrlarni sozlash test majmualarida ancha yaxshi ishlashga olib kelishi mumkin. Biroq, test to‘plamiga parametrlarni optimallashtirish ma’lumotlarning chiqib ketishiga olib kelishi mumkin, bu esa modelning ko‘rinmas ma’lumotlarda yomonroq shakllanishiga olib keladi. Buni tuzatish uchun biz o‘zaro tekshirishni amalga oshirishimiz mumkin.

Rezyumeni yaxshiroq tushunish uchun biz iris ma’lumotlar to‘plamida turli usullarni qo‘llaymiz. Keling, avval ma’lumotlarni yuklaymiz va ajratamiz.

from sklearn import datasets

X, y = datasets.load_iris(return_X_y=True)

O‘zaro tekshirishning ko‘plab usullari mavjud, biz k-katta o‘zaro tekshirishni ko‘rib chiqishdan boshlaymiz.


K-katlama

Modelda foydalaniladigan o‘quv ma’lumotlari modelni tasdiqlash uchun foydalanish uchun k soni kichikroq setlarga bo‘linadi. Keyin model o‘quv majmuasining k-1 burmalarida o‘qitiladi. Qolgan katlama modelni baholash uchun tasdiqlash to‘plami sifatida ishlatiladi.

Biz ìrísí gullarining turli turlarini tasniflashga harakat qilar ekanmiz, biz klassifikator modelini import qilishimiz kerak, bu mashq uchun biz DecisionTreeClassifierdan foydalanamiz. Shuningdek,sklearndan CV modullarini import qilishimiz kerak bo‘ladi.

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import KFold, cross_val_score

Yuklangan ma’lumotlar bilan biz endi baholash uchun model yaratishimiz va moslashimiz mumkin.

clf = DecisionTreeClassifier(random_state=42)

Keling, modelimizni baholaymiz va u har bir k-katlamada qanday ishlashini ko‘rib chiqamiz.

k_folds = KFold(n_splits = 5)

scores = cross_val_score(clf, X, y, cv = k_folds)

Bundan tashqari, barcha burmalar bo‘yicha ballarni o‘rtacha hisoblab, rezyumening qanday ishlashini ko‘rish yaxshi amaliyotdir.

Misol

Run k-fold CV:

from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import KFold, cross_val_score X, y = datasets.load_iris(return_X_y=True) clf = DecisionTreeClassifier(random_state=42) k_folds = KFold(n_splits = 5) scores = cross_val_score(clf, X, y, cv = k_folds) print("Cross Validation Scores: ", scores) print("Average CV Score: ", scores.mean()) print("Number of CV Scores used in Average: ", len(scores))
Misolni ishga tushirish »


Stratifikatsiyalangan K-katlama

Classlar nomutanosib bo‘lgan hollarda o‘qitish (train) va tekshirish (validation) to‘plamlaridagi nomutanosiblikni hisobga olish usuli kerak bo‘ladi. Buning uchun maqsadli classlarni stratifikatsiya qilishimiz mumkin, ya’ni ikkala to‘plamda ham barcha classlar teng nisbatda bo‘ladi.

Misol

from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import StratifiedKFold, cross_val_score X, y = datasets.load_iris(return_X_y=True) clf = DecisionTreeClassifier(random_state=42) sk_folds = StratifiedKFold(n_splits = 5) scores = cross_val_score(clf, X, y, cv = sk_folds) print("Cross Validation Scores: ", scores) print("Average CV Score: ", scores.mean()) print("Number of CV Scores used in Average: ", len(scores))
Misolni ishga tushirish »

Qatlamlar soni bir xil bo‘lsa-da, tabaqalashtirilgan classlar mavjudligiga ishonch hosil qilganda, o‘rtacha CV asosiy k-kattadan ortadi.


Bir marta tark etish (LOO)

K-katlamali LeaveOneOut kabi trening ma’lumotlari to‘plamidagi bo‘linishlar sonini tanlash o‘rniga, tekshirish uchun 1 ta kuzatuvdan va mashq qilish uchun n-1 ta kuzatuvdan foydalaning. Bu usul to‘liq texnikadir.

Misol

Run LOO CV:

from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import LeaveOneOut, cross_val_score X, y = datasets.load_iris(return_X_y=True) clf = DecisionTreeClassifier(random_state=42) loo = LeaveOneOut() scores = cross_val_score(clf, X, y, cv = loo) print("Cross Validation Scores: ", scores) print("Average CV Score: ", scores.mean()) print("Number of CV Scores used in Average: ", len(scores))
Misolni ishga tushirish »

Amalga oshirilgan o‘zaro tekshirish ballari soni ma’lumotlar to‘plamidagi kuzatishlar soniga teng ekanligini kuzatishimiz mumkin. Bunday holda, iris ma’lumotlar to‘plamida 150 ta kuzatuv mavjud.

O‘rtacha CV ball 94% ni tashkil qiladi.


Chiqib ketish (LPO)

Leave-P-Out - bu Leave-One-Out g‘oyasining oddiy farqi, chunki biz tasdiqlash to‘plamida foydalanish uchun p sonini tanlashimiz mumkin.

Misol

Run LPO CV:

from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import LeavePOut, cross_val_score X, y = datasets.load_iris(return_X_y=True) clf = DecisionTreeClassifier(random_state=42) lpo = LeavePOut(p=2) scores = cross_val_score(clf, X, y, cv = lpo) print("Cross Validation Scores: ", scores) print("Average CV Score: ", scores.mean()) print("Number of CV Scores used in Average: ", len(scores))
Misolni ishga tushirish »

Ko‘rib turganimizdek, bu to‘liq usul bo‘lib, biz p = 2 bo‘lsa ham, birdan-bir chiqishdan ko‘ra ko‘proq ball hisoblaymiz, ammo u taxminan bir xil o‘rtacha CV balliga erishadi.


Shaffle Split

KFolddan farqli o‘laroq,ShuffleSplit ma’lumotlarning bir foizini qoldiradi, uni poezdda yoki tasdiqlash to‘plamlarida ishlatmaslik kerak. Buning uchun biz poezd va test o‘lchamlari, shuningdek, bo‘linishlar sonini hal qilishimiz kerak.

Misol

Run Shuffle Split CV:

from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import ShuffleSplit, cross_val_score X, y = datasets.load_iris(return_X_y=True) clf = DecisionTreeClassifier(random_state=42) ss = ShuffleSplit(train_size=0.6, test_size=0.3, n_splits = 5) scores = cross_val_score(clf, X, y, cv = ss) print("Cross Validation Scores: ", scores) print("Average CV Score: ", scores.mean()) print("Number of CV Scores used in Average: ", len(scores))
Misolni ishga tushirish »

Yakuniy eslatmalar

Bu modellarga qo‘llanilishi mumkin bo‘lgan CV usullarining bir nechtasi. Yana ko‘plab o‘zaro tekshirish sinflari mavjud, aksariyat modellar o‘z sinfiga ega. Ko‘proq CV variantlari uchun sklearns o‘zaro tekshiruvini tekshiring.


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!