Хиймэл Оюун Ухаан ба Өгөгдөл хэмээх сэдвүүдийг миний хувьд бичсэн билээ. Үүнтэй холбоотой Overfitting Underfitting хэмээх хиймэл оюуны машин сургалтын ойлголтыг одоо та бүхэндээ тайлбарлах гэж байна.
Тохирсон монгол нэршлийг олоход хэцүү тул халилт ба дутагдмал байдал хэмээн миний бие нэрийдлээ. Гэвч нийтлэлийн туршид гадаад нэршлийг ашиглах болно.
Энэхүү нийтлэлийг уншиж ойлгохын тулд та хиймэл оюун ухаан болон машин сургалт тэр дундаа scikit-learn мөн түүн дээр хэрхэн supervised learning хийх kaggle орчин болон dataframe pandas зэрэг нэр томьёонуудыг ойлгосон байх хэрэгтэй.
Та scikit-learn-ийн document-д шийдвэрийн модны загвар нь олон сонголттой болохыг харж болно (таны удаан хугацааны туршид хүсэхээс илүү). Хамгийн чухал сонголтууд нь модны гүнийг тодорхойлдог.
Одоо бүгдээрээ байшингийн өгөгдлийг classificationtree ашиглан загвараа сургасан гэж үзээд дараах тайлбар луу шилжицгээе.
Практикт мод нь дээд давхрага (бүх байшин) болон навчны хооронд 10 удаа хуваагдах нь энгийн үзэгдэл биш. Мод гүнзгийрэх тусам өгөгдлийн багц нь цөөн тооны байшинтай навчнууд болон хуваагдана. Хэрэв мод зөвхөн 1 хуваагдсан бол өгөгдлийг 2 бүлэгт хуваана. Хэрэв бүлэг бүр дахин хуваагдвал бид 4 бүлэг байшин авах болно. Тэдгээрийг дахин хуваах нь 8 бүлэг үүсгэх болно. Хэрэв бид давхраа болгонд хуваах бүлгүүдийн тоог хоёр дахин нэмэгдүүлбэл 10-р түвшинд хүрэхэд 2^10 бүлэг байшинтай болно. Энэ нь 1024 навчтай байна.
Бид байшингуудыг олон навчны хооронд хуваах үед навч бүрт цөөхөн байшин байдаг. Маш цөөхөн байшинтай навчнууд эдгээр байшингийн бодит үнэ цэнэтэй ойролцоо таамаглал дэвшүүлэх боловч шинэ өгөгдөлд маш найдваргүй таамаглал дэвшүүлж болно (учир нь таамаглал бүр нь хэдхэн байшинд тулгуурладаг).
Энэ нь загвар нь сургалтын өгөгдөлтэй бараг төгс таарч байгаа боловч баталгаажуулалт болон бусад шинэ өгөгдлүүдийн хувьд тааруухан байдаг энэ нь overfitting гэж нэрлэгддэг үзэгдэл юм. Нөгөө талаас, хэрэв бид модыг маш гүехэн болговол энэ нь байшингуудыг маш тодорхой бүлгүүдэд хуваагдахгүй.
Хэт ихэдсэн тохиолдолд, хэрэв мод нь байшингуудыг зөвхөн 2 эсвэл 4 болгон хуваавал бүлэг бүр олон төрлийн байшинтай хэвээр байна. Үр дүнгийн таамаглал нь ихэнх байшинд, тэр ч байтугай сургалтын өгөгдөлд ч хол байж болно (мөн энэ нь ижил шалтгаанаар баталгаажуулалтад муу байх болно). Загвар нь өгөгдлийн чухал ялгаа, хэв маягийг олж авч чадахгүй мөн сургалтын өгөгдөлд ч муу гүйцэтгэлтэй байвал үүнийг дутуу тохирох гэж нэрлэдэг.
Бид баталгаажуулалтын өгөгдлөөр тооцоолсон шинэ өгөгдлийн нарийвчлалд анхаарлаа хандуулдаг тул бид дутуу тохирох ба хэт тохирох хоёрын хоорондох тохиромжтой цэгийг олохыг хүсч байна. Харагдацын хувьд бид доорх зураг дээрх (улаан) баталгаажуулалтын муруйны доод цэгийг зорилгоо болгоод байна.
Жишээ
Модны гүнийг хянах хэд хэдэн хувилбар байдаг бөгөөд олонх нь модоор дамжин өнгөрөх зарим замыг бусад замаас илүү гүнтэй байлгахыг зөвшөөрдөг. Гэхдээ max_leaf_nodes аргумент нь overfitting ба underfitting тохирохыг хянах маш ухаалаг арга юм. Загвар хийх боломжийг бид хэдий чинээ их навчтай байна, төдий чинээ бид дээрх график дээрх дутуу тохирох хэсгээс хэт тохирох хэсэг рүү шилжинэ.f\
Бид max_leaf_nodes-ын өөр өөр утгуудын MAE оноог харьцуулахад туслах функцийг ашиглаж болно:
from sklearn.metrics import mean_absolute_error from sklearn.tree import DecisionTreeRegressor def get_mae(max_leaf_nodes, train_X, val_X, train_y, val_y): model = DecisionTreeRegressor(max_leaf_nodes=max_leaf_nodes, random_state=0) model.fit(train_X, train_y) preds_val = model.predict(val_X) mae = mean_absolute_error(val_y, preds_val) return(mae) Бид дараах хувьсагч нарыг аль хэдийнээ зарласан гээд төсөөлөөд үзъе train_X, val_X, train_y and val_y. Бид max_leaf_nodes-ийн өөр өөр утгуудаар бүтээгдсэн загваруудын нарийвчлалыг харьцуулахын тулд for-loop ашиглаж болно.
# compare MAE with differing values of max_leaf_nodes for max_leaf_nodes in [5, 50, 500, 5000]: my_mae = get_mae(max_leaf_nodes, train_X, val_X, train_y, val_y) print("Max leaf nodes: %d \t\t Mean Absolute Error: %d" %(max_leaf_nodes, my_mae)) Max leaf nodes: 5 Mean Absolute Error: 347380 Max leaf nodes: 50 Mean Absolute Error: 258171 Max leaf nodes: 500 Mean Absolute Error: 243495 Max leaf nodes: 5000 Mean Absolute Error: 254983
Жагсаалтанд орсон сонголтуудаас 500 нь навчны оновчтой тоо юм.
Дүгнэлт
- Overfitting өгөгдлүүдийг давхардуулалгүй, ялгаатай өгөгдлүүдээр сургах хэрэгтэй. үүний тулд data preprocess хийх хэрэгтэй.
- Underfitting зөв дата байхгүй бол модел дутуу сургагдана.
Нийтлэл бичсэн: Б. Сайнбаяр
Comments
OILGOLOO