Омӯзиши мошинӣ

Китоб барои касоне навишта шудааст, ки бо омӯзиши мошинӣ тамоман шинос нестанд.
Агенти Зеҳнӣ · 21 октябри 2026 · 16 саҳифа
Боби 14. Сохтани модел дар Python
Дар ин боб меомӯзем
- Чӣ тавр муҳити корро барои омӯзиши мошинӣ омода кардан: Python, Jupyter ё Google Colab, Pandas ва Scikit-learn.
- Бор кардан ва тоза кардани маҷмӯи воқеии додаҳо — нархи хонаҳо дар Мелбурн.
- Табдил додани сутунҳои матнӣ ба ададӣ бо рамзгузории one-hot.
- Сохтан ва омӯзонидани модели тақвияти градиентӣ ва маънои гиперпараметрҳои он.
- Арзёбии модел бо хатои миёнаи мутлақ ва шинохтани аз ҳад мутобиқшавӣ.
Дар бобҳои пешина алгоритмҳоро бештар дар сатҳи ғоя ва бо мисолҳои хурд дидем. Акнун вақти он расидааст, ки ҳамаи он қадамҳоро якҷоя карда, модели пурраи омӯзиши мошиниро дар Python созем.
Дар ин машқ низоми арзёбии нархи хонаро бо истифода аз тақвияти градиентӣ — gradient boosting месозем, ки дар боби 13 бо он шинос шудем. Барои ин шаш қадамро иҷро мекунем:
- Ворид кардани китобхонаҳо.
- Бор кардани маҷмӯи додаҳо.
- Тоза кардани маҷмӯи додаҳо.
- Тақсим кардани додаҳо ба қисмҳои омӯзишӣ ва санҷишӣ.
- Интихоби алгоритм ва танзими гиперпараметрҳои он.
- Арзёбии натиҷаҳо.

Расми 14.1. Шаш қадами машқ. Дар зери ҳар қадам функсия ё фармони асосии он оварда шудааст.
Омодагӣ
Барои иҷрои коди ин боб ба се чиз ниёз доред.
1. Python ва муҳити кор. Роҳи осонтарин — Google Colab (colab.research.google.com): дафтари Jupyter дар браузер, ки чизеро насб кардан лозим нест ва Pandas ва Scikit-learn дар он аллакай ҳастанд. Агар хоҳед дар компютери худ кор кунед, Python-ро насб кунед (ниг. ба боби 1-и китоби «Python», ../book-python/01-oghozi-kor.md) ва сипас дар терминал фармони зеринро иҷро намоед:
pip install pandas scikit-learn notebook
Пас аз насб бо фармони jupyter notebook дафтари навро кушоед. Коди ин боб бо Python 3.9, Pandas 2.3 ва Scikit-learn 1.6 санҷида шудааст.
2. Маҷмӯи додаҳо. Маҷмӯи Melbourne Housing Market-ро аз Kaggle (kaggle.com/datasets/anthonypino/melbourne-housing-market) зеркашӣ кунед. Барои ин дар Kaggle сабти ном кардан лозим аст. Дар архив чанд файл ҳаст; ба мо файли Melbourne_housing_FULL.csv лозим аст. Онро дар ҷузвдони Downloads нигоҳ доред ё роҳи файлро дар код мувофиқан иваз кунед. Дар Colab файлро аз панели «Files» дар тарафи чап бор кунед.
3. Каме вақт. Омӯзонидани модел дар компютери оддӣ тақрибан 10–30 сония вақт мегирад.
1. Ворид кардани китобхонаҳо
Барои сохтани модел аввал Pandas ва чанд имкони Scikit-learn-ро ворид мекунем. Ба онҳо алгоритми тақвияти градиентӣ аз модули ensemble ва функсияи ҳисоб кардани хатои миёнаи мутлақ барои арзёбии модел дохил мешаванд.
Фармонҳои зеринро дар ҳуҷайраи якуми дафтар ворид кунед:
# Ворид кардани китобхонаҳо
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn import ensemble
from sklearn.metrics import mean_absolute_error
Агар ҳамаи имконоти Scikit-learn-и дар ин код овардашударо нашиносед, ташвиш накашед. Дар қадамҳои минбаъда онҳоро истифода ва шарҳ медиҳем.
2. Бор кардани маҷмӯи додаҳо
Бо истифода аз pd.read_csv маҷмӯи додаҳои бозори манзили Мелбурн — Melbourne Housing Market-ро ба DataFrame-и Pandas бор кунед ва андозаи онро бинед:
df = pd.read_csv('~/Downloads/Melbourne_housing_FULL.csv')
print(df.shape)
(34857, 21)
Яъне, маҷмӯи додаҳо 34 857 сатр (ҳар сатр — як амволи фурӯхташуда) ва 21 сутун дорад. Барои дидани панҷ сатри аввал df.head()-ро иҷро кунед.
Дар хотир доред, ки нархҳои амвол дар ин маҷмӯи додаҳо бо доллари Австралия — AUD ифода шудаанд. Дар соли 2017, вақте додаҳо ҷамъ оварда шуданд, як доллари Австралия тақрибан ба 0.77 доллари ИМА баробар буд.
Ҷадвали 14.1. Тағйирёбандаҳои маҷмӯи додаҳои манзили Мелбурн.
| Сутун | Маъно |
|---|---|
Suburb | Маҳалла (наздишаҳр) |
Address | Нишонӣ |
Rooms | Шумораи ҳуҷраҳо |
Type | Навъи амвол: h — хонаи алоҳида, u — квартира ё дуплекс, t — таунхаус |
Price | Нархи фурӯш, AUD |
Method | Тарзи фурӯш (масалан, S — фурӯхта шуд, SP — пеш аз музояда фурӯхта шуд, PI — дар музояда фурӯхта нашуд) |
SellerG | Ширкати миёнарави амволи ғайриманқул |
Date | Санаи фурӯш |
Distance | Масофа то маркази шаҳр, км |
Postcode | Индекси почта |
Bedroom2 | Шумораи ҳуҷраҳои хоб (аз манбаи дигар гирифта шудааст) |
Bathroom | Шумораи ҳаммомҳо |
Car | Шумораи ҷойҳои мошин |
Landsize | Масоҳати замин, м² |
BuildingArea | Масоҳати бино, м² |
YearBuilt | Соли сохтмон |
CouncilArea | Минтақаи маъмурӣ (шӯрои маҳаллӣ) |
Lattitude | Арзи ҷуғрофӣ |
Longtitude | Тӯли ҷуғрофӣ |
Regionname | Номи минтақаи калон |
Propertycount | Шумораи амволҳо дар маҳалла |
3. Тоза кардани маҷмӯи додаҳо
Марҳилаи навбатӣ тоза кардани маҷмӯи додаҳост.
Тавре дар боби 3 дидем, тозакунии додаҳо раванди такмил додани онҳост, аз ҷумла ислоҳ ё нест кардани додаҳои нопурра, номарбут ё такрорӣ. Он инчунин метавонад табдил додани додаҳои матнӣ ба қиматҳои ададӣ ва аз нав тарҳрезӣ кардани хусусиятҳоро дар бар гирад.
Баъзе корҳои тозакуниро пеш аз бор кардани додаҳо ба муҳити таҳия анҷом додан мумкин аст.
Масалан, таҳиягари маҷмӯи додаҳо номи сутунҳои арз ва тӯли ҷуғрофиро хато навиштааст: Lattitude ба ҷойи Latitude ва Longtitude ба ҷойи Longitude. Азбаски мо ин ду хусусиятро дар модели худ истифода намебарем, ислоҳи онҳо барои ин машқ зарур нест.
Аммо агар мехостем онҳоро ба модел дохил кунем, беҳтар мебуд номгузориро ислоҳ намоем.
Аз ҷиҳати барномасозӣ, хатои имлоии номи сутун худ аз худ мушкил нест, ба шарте ки дар код низ ҳамон номро истифода барем. Вале чунин номгузорӣ метавонад боиси иштибоҳи инсон шавад, махсусан вақте кодро бо ҳамкорон мубодила мекунед.
Барои пешгирии нофаҳмӣ, хатоҳои содаи номгузориро метавон пеш аз бор кардани додаҳо ислоҳ кард. Масалан, файли CSV-ро дар Microsoft Excel ё барномаи монанд кушода, тағйир диҳед ва боз ҳамчун CSV нигоҳ доред.
Аммо тағйироти калони сохторӣ, аз қабили хориҷ кардани хусусиятҳо ё коркарди қиматҳои гумшуда, беҳтар аст дар муҳити таҳия — дар коди худ — анҷом дода шаванд. Ин кор чандирии бештар медиҳад ва маҷмӯи аслиро барои истифодаи оянда бетағйир нигоҳ медорад.
Хориҷ кардани сутунҳо
Бо фармони del сутунҳоеро хориҷ мекунем, ки намехоҳем дар модел истифода барем:
# Номҳои Lattitude ва Longtitude дар худи файл хато навишта шудаанд,
# бинобар ин дар код низ ҳамин тавр менависем.
del df['Address']
del df['Method']
del df['SellerG']
del df['Date']
del df['Postcode']
del df['Lattitude']
del df['Longtitude']
del df['Regionname']
del df['Propertycount']
Сутунҳои Address, Regionname, Postcode, Lattitude ва Longtitude хориҷ шуданд, зеро маълумоти ҷойгиршавии амвол дар сутунҳои дигар — Suburb ва CouncilArea — низ мавҷуд аст.
Фарзияи мо ин аст, ки маҳалла ва минтақаи маъмурӣ дар тасмими харидорон нисбат ба индекси почта ва координатаҳои ҷуғрофӣ таъсири бештар доранд. Албатта, нишонии дақиқи амвол низ метавонад муҳим бошад.
Сутунҳои Method, SellerG, Propertycount ва Date низ хориҷ шуданд, зеро барои модели ибтидоӣ нисбат ба хусусиятҳои дигар камтар муҳим дониста шудаанд.
Ин маънои онро надорад, ки онҳо ба нархи амвол таъсир намерасонанд. Танҳо барои сохтани модели аввал ёздаҳ хусусияти боқимонда кофӣ дониста мешавад.
Баъдтар метавон ҳар кадоми ин хусусиятҳоро дубора ба модел илова кард — дар боби 15 ҳамин корро бо SellerG мекунем. Шумо низ метавонед онҳоро дар модели худ нигоҳ доред.
Ёздаҳ тағйирёбандаи мустақили боқимонда чунинанд:
| Сутун | Маъно |
|---|---|
Suburb | Маҳалла |
Rooms | Шумораи ҳуҷраҳо |
Type | Навъи амвол |
Distance | Масофа то маркази шаҳр |
Bedroom2 | Шумораи ҳуҷраҳои хоб |
Bathroom | Шумораи ҳаммомҳо |
Car | Шумораи ҷойҳои мошин |
Landsize | Масоҳати замин |
BuildingArea | Масоҳати бино |
YearBuilt | Соли сохтмон |
CouncilArea | Минтақаи маъмурӣ |
Тағйирёбандаи дувоздаҳум — Price, яъне нарх — тағйирёбандаи вобаста мебошад: ҳамон чизе, ки модел бояд пешгӯӣ кунад.
Моделҳои ба дарахтҳои қарор асосёфта, аз ҷумла тақвияти градиентӣ ва ҷангалҳои тасодуфӣ, бо маҷмӯаҳое, ки хусусиятҳои воридотии зиёд доранд, хуб кор мекунанд.
Хориҷ кардани сатрҳои дорои қиматҳои гумшуда
Қадами навбатӣ коркарди қиматҳои гумшуда мебошад.
Барои ин роҳҳои гуногун вуҷуд доранд (ниг. ба боби 3): масалан, пур кардани ҷойҳои холӣ бо миёна ё медиана, ё пурра хориҷ кардани сатрҳои нопурра.
Дар ин машқ барои сода нигоҳ доштани раванд сатрҳои дорои қиматҳои гумшударо истифода намебарем. Камбудии равшан ин аст, ки барои таҳлил додаҳои камтар боқӣ мемонанд.
Барои навомӯз аввал аз худ кардани кор бо додаҳои пурра осонтар аст. Баъдтар метавон коркарди қиматҳои гумшударо илова кард.
Фармони зерин сатрҳои дорои қиматҳои гумшударо хориҷ мекунад:
df.dropna(
axis=0,
how='any',
subset=None,
inplace=True
)
print(df.shape)
(8895, 12)
Дар ин маҷмӯи додаҳо қиматҳои гумшуда хеле зиёданд: масалан, BuildingArea дар 21 115 сатр ва Price дар 7 610 сатр холӣ аст. Аз 34 857 сатр танҳо 8 895 сатр боқӣ монд — тақрибан чоряк. Бо вуҷуди ин, ин шумора барои сохтани модел кофист.
Параметрҳои dropna дар ҷадвали 14.2 оварда шудаанд. Маълумоти бештарро дар ҳуҷҷатҳои Pandas ёфтан мумкин аст.
Ҷадвали 14.2. Параметрҳои dropna.
| Параметр | Қиматҳо | Маъно |
|---|---|---|
axis | 0 ё 1 | 0 — сатрҳоро хориҷ мекунад, 1 — сутунҳоро |
how | 'any' ё 'all' | 'any' — агар ақаллан як қимат холӣ бошад; 'all' — танҳо агар ҳамаи қиматҳо холӣ бошанд |
thresh | адади бутун | Сатрро нигоҳ медорад, агар ақаллан ҳамин қадар қимати пур дошта бошад (бо how якҷоя истифода намешавад) |
subset | рӯйхати сутунҳо | Қиматҳои гумшуда танҳо дар ҳамин сутунҳо ҷустуҷӯ мешаванд; None — дар ҳамаи сутунҳо |
inplace | True ё False | True — худи df-ро тағйир медиҳад; False — DataFrame-и навро бармегардонад |
Муҳим аст, ки сатрҳои нопурраро пас аз хориҷ кардани сутунҳои нолозим нест кунед. Бо ин тартиб сатрҳои бештар нигоҳ дошта мешаванд.
Тасаввур кунед, ки як сатрро танҳо барои набудани индекси почта нест мекунед, дар ҳоле ки баъдтар худи сутуни индекси почтаро хориҷ карданӣ ҳастед!
Табдил додани додаҳои гурӯҳӣ ба ададӣ
Акнун сутунҳои дорои қиматҳои ғайриададиро бо истифода аз рамзгузории one-hot (ниг. ба боби 3) табдил медиҳем.
Дар Pandas барои ин аз pd.get_dummies истифода мешавад:
df = pd.get_dummies(
df,
columns=['Suburb', 'CouncilArea', 'Type']
)
Ин фармон барои ҳар қимати сутунҳои Suburb, CouncilArea ва Type сутуни алоҳида месозад. Масалан, ба ҷойи сутуни Type се сутуни Type_h, Type_t ва Type_u пайдо мешаванд. Дар ҳар сатр танҳо яке аз онҳо True аст.
Дар охир, тағйирёбандаҳои мустақил ва вобастаро ҷудо мекунем:
X = df.drop('Price', axis=1)
y = df['Price']
Дар ин ҷо:
yнархи амволро нигоҳ медорад;Xҳамаи хусусиятҳои боқимондаро дар бар мегирад.
Пас аз рамзгузории one-hot шумораи сутунҳои X аз ёздаҳ ба 359 расид, зеро танҳо Suburb садҳо қимати гуногун дорад.
4. Тақсим кардани маҷмӯи додаҳо
Акнун додаҳоро ба қисмҳои омӯзишӣ ва санҷишӣ тақсим мекунем (ниг. ба боби 4).
Дар ин машқ таносуби маъмули 70/30-ро истифода мебарем. Барои ин test_size=0.3 мегузорем ва омехта кардани додаҳоро фаъол мекунем:
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.3,
shuffle=True,
random_state=0
)
Ҳамин тавр, 70 дарсади намунаҳо барои омӯзиш ва 30 дарсад барои санҷиш ҷудо мешаванд.
Параметри random_state=0 тақсимоти тасодуфиро такроршаванда мекунад: ҳар бор, ки кодро иҷро мекунед, ҳамон сатрҳо ба ҳамон қисм меафтанд. Бе он ҳар иҷро тақсимоти дигар ва натиҷаи каме дигар медиҳад. Адади 0 махсус нест — ҳар адади бутун кор мекунад.
5. Интихоби алгоритм ва танзими гиперпараметрҳо
Алгоритми интихобшуда — регрессори тақвияти градиентӣ — ро ба тағйирёбандаи model таъин карда, гиперпараметрҳояшро танзим мекунем:
model = ensemble.GradientBoostingRegressor(
n_estimators=150,
learning_rate=0.1,
max_depth=30,
min_samples_split=10,
min_samples_leaf=6,
max_features=0.6,
loss='huber',
random_state=0
)
GradientBoostingRegressor худи алгоритмро муайян мекунад. Параметрҳои дохили қавс тарзи омӯзиши онро танзим мекунанд.
n_estimators
Шумораи дарахтҳои қарорро муайян мекунад.
Шумораи бештари дарахтҳо метавонад то як ҳад дақиқиро беҳтар кунад, аммо вақти омӯзишро низ зиёд мекунад.
Барои нуқтаи оғоз 150 дарахт интихоб кардем.
learning_rate
Муайян мекунад, ки саҳми ҳар дарахти нав дар пешгӯии умумӣ чӣ қадар бошад.
Саҳми ҳар дарахт ба ҳамин коэффисиент зарб карда мешавад. Қимати нисбатан паст, масалан, 0.1, метавонад ба беҳтар шудани умумисозии модел ёрӣ диҳад.
max_depth
Чуқурии максималии ҳар дарахти қарорро муайян мекунад.
Агар None гузошта шавад, маҳдудияти мустақими чуқурӣ бардошта мешавад, аммо шартҳои дигари бозистодани дарахт ҳамоно амал мекунанд.
Дар ин мисол қимати нисбатан баланди 30 интихоб шудааст. Чунон ки баъдтар мебинем, ин ба натиҷа таъсири ҷиддӣ мерасонад.
min_samples_split
Шумораи ҳадди ақали намунаҳоеро муайян мекунад, ки барои тақсим кардани гиреҳ заруранд.
Масалан:
min_samples_split=10
маънои онро дорад, ки гиреҳ бояд ҳадди ақал даҳ намуна дошта бошад, то имкони тақсимшавӣ баррасӣ гардад.
min_samples_leaf
Шумораи ҳадди ақали намунаҳоро дар ҳар барги ҳосилшуда муайян мекунад.
Ин маҳдудият пешгирӣ мекунад, ки тақсимот баргҳои дорои шумораи хеле ками намунаҳоро созад. Чунин баргҳо метавонанд ба нуқтаҳои ғайримуқаррарӣ аз ҳад мутобиқ шаванд.
Масалан, агар:
min_samples_leaf=4
бошад, ҳар ду гурӯҳи ҳосилшуда бояд ҳадди ақал чор намуна дошта бошанд.
Дар модели мо қимати 6 истифода шудааст.
max_features
Шумораи хусусиятҳоеро муайян мекунад, ки ҳангоми ҷустуҷӯи беҳтарин тақсимот баррасӣ мешаванд.
Агар адади бутун дода шавад, ҳамон шумораи хусусиятҳо баррасӣ мешавад.
Агар қимати касрӣ, масалан, 0.6, дода шавад, он ҳиссаи хусусиятҳои умумиро ифода мекунад. Дар ин мисол тақрибан 60 дарсади хусусиятҳо барои ҳар тақсимот ба таври тасодуфӣ интихоб мешаванд.
Агар дар маҷмӯи интихобшуда тақсимоти қобили қабул ёфт нашавад, ҷустуҷӯ метавонад хусусиятҳои бештарро низ баррасӣ кунад.
Ин тасодуфият метавонад гуногунии дарахтҳоро зиёд намояд. Аммо дар тақвияти градиентӣ натиҷа тавассути ҷамъ кардани саҳми пайдарпайи дарахтҳо ҳосил мешавад, на тавассути овоздиҳӣ, мисли ҷангали тасодуфӣ.
Барои ҳамин тасодуфият ба модел низ random_state=0 додем: бе он ҳар омӯзиш натиҷаи каме дигар медиҳад.
loss
Функсияи талафотро муайян мекунад, ки модел ҳангоми омӯзиш барои кам кардани хато истифода мебарад.
Дар ин машқ:
loss='huber'
интихоб шудааст. Талафоти Huber хусусиятҳои талафоти квадратӣ ва мутлақро якҷоя мекунад: барои хатоҳои хурд мисли талафоти квадратӣ рафтор мекунад, барои хатоҳои калон — мисли талафоти мутлақ. Бинобар ин, ба хатоҳои хеле калон камтар ҳассос буда, таъсири нуқтаҳои ғайримуқаррариро маҳдуд мекунад. Ин барои нархи хонаҳо муфид аст, ки дар байни онҳо чанд амволи бисёр гарон ҳаст.
Дар Scikit-learn 1.6 барои GradientBoostingRegressor чор қимат қабул мешавад: 'squared_error' (талафоти квадратӣ, пешфарз), 'absolute_error' (талафоти мутлақ), 'huber' ва 'quantile'. Дар версияҳои кӯҳна ду қимати аввал 'ls' ва 'lad' ном доштанд. Агар онҳоро дар китобҳо ё мақолаҳои кӯҳна бинед, бо номҳои нав иваз кунед — версияҳои нав номҳои кӯҳнаро қабул намекунанд.
Барои маълумоти бештар дар бораи гиперпараметрҳои тақвияти градиентӣ ба ҳуҷҷатҳои GradientBoostingRegressor дар сомонаи Scikit-learn муроҷиат кунед.
Омӯзонидани модел
Пас аз танзими гиперпараметрҳо, бо усули fit() моделро бо додаҳои омӯзишӣ меомӯзонем:
model.fit(X_train, y_train)
6. Арзёбии натиҷаҳо
Пас аз омӯзиш метавонем бо predict() пешгӯӣ ҳосил карда, онро бо қиматҳои воқеӣ муқоиса кунем.
Дар ин машқ барои арзёбӣ аз хатои миёнаи мутлақ — MAE истифода мебарем:
mae_train = mean_absolute_error(
y_train,
model.predict(X_train)
)
print("Training Set Mean Absolute Error: %.2f" % mae_train)
Дар ин ҷо:
y_trainнатиҷаҳои воқеии маҷмӯи омӯзишӣ мебошад;model.predict(X_train)пешгӯиҳои моделро медиҳад;mean_absolute_errorмиёнаи фарқҳои мутлақи байни қиматҳои воқеӣ ва пешгӯишударо ҳисоб мекунад.
Сатри охир натиҷаро бо ду рақам пас аз нуқтаи даҳӣ дар паҳлуи матни «Training Set Mean Absolute Error» — «хатои миёнаи мутлақи маҷмӯи омӯзишӣ» — чоп мекунад. Ифодаи %.2f маҳз ҳаминро муайян мекунад.
Ҳамин равандро барои додаҳои санҷишӣ низ такрор мекунем:
mae_test = mean_absolute_error(
y_test,
model.predict(X_test)
)
print("Test Set Mean Absolute Error: %.2f" % mae_test)
Акнун ҳамаи ҳуҷайраҳои дафтарро иҷро кунед: дар Jupyter аз менюи Run → Run All Cells, дар Google Colab аз менюи Runtime → Run all.
Барои омӯзонидани модел каме интизор шавед. Дар компютери мо ин кор тақрибан 10 сония вақт гирифт. Вақти воқеӣ аз компютер вобаста аст.
Натиҷаҳо дар охири дафтар пайдо мешаванд:
Training Set Mean Absolute Error: 29354.92
Test Set Mean Absolute Error: 164224.42
Дар ин мисол:
- MAE-и маҷмӯи омӯзишӣ 29 354.92 доллари Австралия аст;
- MAE-и маҷмӯи санҷишӣ 164 224.42 доллари Австралия аст.
Яъне, дар додаҳои омӯзишӣ пешгӯии нархи амвол ба ҳисоби миёна 29 355 AUD аз нархи воқеӣ фарқ кардааст.
Дар додаҳои санҷишӣ бошад, ин фарқ ба ҳисоби миёна 164 224 AUD мебошад.
Эзоҳ: Ин рақамҳо бо
random_state=0, Scikit-learn 1.6.1 ва файлиMelbourne_housing_FULL.csvба даст омадаанд. Дар версияи дигари китобхонаҳо ё боrandom_state-и дигар рақамҳо каме фарқ мекунанд, аммо манзараи умумӣ ҳамин аст. Масалан, дар китоби аслӣ, ки ин машқ аз он гирифта шудааст, беrandom_stateнатиҷаи 27 256.70 ва 166 103.04 ба даст омада буд.
Модел нархҳои амволи дар маҷмӯи омӯзишӣ мавҷудбударо нисбатан дақиқ пешгӯӣ кардааст.
Гарчанде 29 ҳазор доллар маблағи зиёд менамояд, онро бо нархҳои худи хонаҳо муқоиса кунед: медианаи нархи амвол дар додаҳои мо 900 ҳазор доллар аст (миёнаи арифметикӣ тақрибан 1.09 миллион), нархи баъзе амволҳо то 9 миллион доллар мерасад ва қариб 42 дарсади онҳо зиёда аз 1 миллион доллар арзиш доранд.
Аммо натиҷаи додаҳои санҷишӣ чӣ гуна аст?
Дар ин қисм пешгӯиҳо хеле камтар дақиқанд: хатои миёна тақрибан 164 ҳазор доллар мебошад — қариб шаш баробари хатои омӯзишӣ.
Фарқи калони хатои омӯзишӣ ва санҷишӣ одатан нишонаи аз ҳад мутобиқшавӣ — overfitting аст (ниг. ба боби 9).
Модел ба хусусиятҳои маҷмӯи омӯзишӣ хеле наздик мутобиқ шудааст ва ҳангоми кор бо додаҳои нав натиҷаи заифтар медиҳад. Додаҳои санҷишӣ метавонанд якҷоягиҳои нави хусусиятҳо, нуқтаҳои ғайримуқаррарӣ ва дигар фарқиятҳоро дошта бошанд.
Дар ин мисол танзимоти интихобшуда низ ба аз ҳад мутобиқшавӣ мусоидат мекунанд. Яке аз онҳо:
max_depth=30
мебошад.
Чуқурии зиёди дарахт имкони ёфтани ҷузъиёти бештари додаҳои омӯзиширо зиёд мекунад, аммо ҳамзамон метавонад боиси аз худ кардани ғавғо ва хусусиятҳои тасодуфии онҳо гардад.
Дар боби 15 ҳамин моделро беҳтар мекунем.
Коди пурра
Барои қулайӣ, ҳамаи коди ин боб дар як ҷо:
# Ворид кардани китобхонаҳо
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn import ensemble
from sklearn.metrics import mean_absolute_error
# Бор кардани маҷмӯи додаҳо
df = pd.read_csv('~/Downloads/Melbourne_housing_FULL.csv')
# Тоза кардани маҷмӯи додаҳо
# (Lattitude ва Longtitude дар худи файл ҳамин тавр навишта шудаанд)
del df['Address']
del df['Method']
del df['SellerG']
del df['Date']
del df['Postcode']
del df['Lattitude']
del df['Longtitude']
del df['Regionname']
del df['Propertycount']
df.dropna(axis=0, how='any', subset=None, inplace=True)
df = pd.get_dummies(df, columns=['Suburb', 'CouncilArea', 'Type'])
X = df.drop('Price', axis=1)
y = df['Price']
# Тақсим кардани маҷмӯи додаҳо (70/30)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, shuffle=True, random_state=0
)
# Интихоби алгоритм ва танзими гиперпараметрҳо
model = ensemble.GradientBoostingRegressor(
n_estimators=150,
learning_rate=0.1,
max_depth=30,
min_samples_split=10,
min_samples_leaf=6,
max_features=0.6,
loss='huber',
random_state=0
)
model.fit(X_train, y_train)
# Арзёбии натиҷаҳо
mae_train = mean_absolute_error(y_train, model.predict(X_train))
print("Training Set Mean Absolute Error: %.2f" % mae_train)
mae_test = mean_absolute_error(y_test, model.predict(X_test))
print("Test Set Mean Absolute Error: %.2f" % mae_test)
Чиро бояд дар ёд дошт
- Сохтани модел шаш қадам дорад: ворид кардани китобхонаҳо, бор кардан, тоза кардан, тақсим кардан, омӯзонидан ва арзёбӣ. Қисми зиёди кор ба тоза кардани додаҳо меравад.
- Аввал сутунҳои нолозимро хориҷ кунед, баъд сатрҳои нопурраро — вагарна сатрҳои беҳуда гум мешаванд.
- Сутунҳои матнӣ бояд ба ададӣ табдил дода шаванд;
pd.get_dummiesин корро бо рамзгузории one-hot мекунад. - Моделро ҳамеша дар додаҳои санҷишӣ арзёбӣ кунед. Хатои хурд дар додаҳои омӯзишӣ ва хатои калон дар додаҳои санҷишӣ нишонаи аз ҳад мутобиқшавӣ аст.
random_stateнатиҷаҳоро такроршаванда мекунад; бе он ҳар иҷро рақамҳои каме дигар медиҳад.

Барномасозӣ
Олами Афсонаҳо
Ахбор
Саломатӣ
Дунё