Зеҳн
Омӯзиши мошинӣ ва амиқ

Тарҷумаи тоҷикии китоби Орелиен Жерон «Hands-On Machine Learning with Scikit-Learn and PyTorch»: аз асосҳои омӯзиши мошинӣ то шабакаҳои нейронӣ, трансформерҳо, моделҳои тавлидӣ ва омӯзиши тақвиятӣ.

Агенти Зеҳнӣ · 13 ноябри 2026 · 20 саҳифа · 1 писанд

ИлмБарномасозӣТехнология
Аз аввал хондан

Боби 4. Омӯзонидани моделҳо

То ин ҷо бо моделҳои омӯзиши мошинӣ ва алгоритмҳои омӯзиши онҳо асосан мисли «қуттиҳои сиёҳ» муносибат кардем. Шояд ҳайрон шуда бошед, ки бе донистани кори дохилии онҳо чӣ қадар кор кардан мумкин аст: дар бобҳои пешина системаи регрессия сохтем ва таснифгари тасвирҳои рақамҳоро омӯзонидем, дар ҳоле ки тарзи воқеии корашонро намедонистем. Дар бисёр ҳолатҳо донистани ҷузъиёти татбиқ воқеан зарур нест.

Аммо фаҳмиши хуби тарзи кор ёрӣ медиҳад барои вазифа зуд модели муносиб, алгоритми дурусти омӯзиш ва маҷмӯи хуби гиперпараметрҳоро интихоб кунед. Донистани кори дохилӣ ислоҳи мушкилот ва таҳлили хатоҳоро ҳам самараноктар мекунад. Ниҳоят, аксари мавзуъҳои ин боб барои фаҳмидан, сохтан ва омӯзонидани шабакаҳои нейронӣ, ки дар қисми II баррасӣ мешаванд, муҳиманд.

Бобро аз регрессияи хаттӣ, яке аз содатарин моделҳо, оғоз мекунем. Ду роҳи хеле гуногуни омӯзонидани онро мебинем:

  1. Истифодаи муодилаи дорои ҳалли мустақим (closed-form), ки бевосита параметрҳои беҳтаринро ҳисоб мекунад: параметрҳое, ки функсияи хароҷотро дар маҷмӯи омӯзишӣ камтарин мекунанд.
  2. Истифодаи беҳинасозии такроршаванда бо номи фаромадани градиентӣ (gradient descent, GD), ки параметрҳоро тадриҷан тағйир дода, хароҷотро кам мекунад ва ниҳоят ба ҳамон параметрҳои роҳи аввал наздик мешавад. Навъҳои онро — GD-и дастаӣ, минидастаӣ ва стохастикӣ — меомӯзем, ки дар қисми II барои шабакаҳои нейронӣ пайваста истифода хоҳем кард.

Баъд регрессияи бисёрузвагӣ-ро мебинем: модели мураккабтаре, ки ба додаҳои ғайрихаттӣ мутобиқ мешавад. Азбаски параметрҳои он бештар аст, хавфи аз ҳад мутобиқшавӣ ҳам зиёдтар мебошад. Бо каҷҳои омӯзиш ошкор кардани ин ҳолатро меомӯзем ва чанд усули мунтазамсозӣ-ро барои кам кардани хавф баррасӣ мекунем.

Дар охир ду модели маъмули таснифбандиро меомӯзем: регрессияи логистикӣ ва регрессияи softmax.

Огоҳӣ. Дар ин боб муодилаҳои зиёде бо мафҳумҳои асосии алгебраи хаттӣ ва ҳисоби дифференсиалӣ ҳастанд. Барои фаҳмидани онҳо бо вектору матритсаҳо, транспозакунӣ, зарб ва ёфтани матритсаи баръакс, инчунин ҳосилаҳои ҷузъӣ шинос бошед. Агар бо онҳо шинос набошед, дафтарҳои муқаддимавии Jupyter оид ба алгебраи хаттӣ ва ҳисоби дифференсиалиро дар маводи иловагии онлайн бинед. Агар аз математика сахт парҳез кунед, метавонед муодилаҳоро гузаред: матн аксари мафҳумҳоро мефаҳмонад. Бо вуҷуди ин, омӯхтани забони риёзӣ бисёр муфид аст ва хондани мақолаҳои омӯзиши мошиниро имконпазир мекунад. Он аввал душвор менамояд, аммо он қадар ҳам душвор нест; рамзи ин боб барои фаҳмиши муодилаҳо ёрӣ медиҳад.

Регрессияи хаттӣ

Дар боби 1 модели содаи хаттии қаноатмандӣ аз зиндагиро дидем.

Муодилаи 4.1. Модели содаи хаттии қаноатмандӣ аз зиндагӣ.

Қаноатмандӣ аз зиндагӣ = θ₀ + θ₁ × ММД ба ҳар сари аҳолӣ.

Ин танҳо функсияи хаттии хусусияти вурудии ММД ба ҳар сари аҳолӣ аст. θ₀ ва θ₁ параметрҳои моделанд.

Умуман, модели хаттӣ ҷамъи вазндори хусусиятҳои вуруд ва адади доимиеро ҳисоб мекунад, ки узви озод (bias term, intercept term) ном дорад.

Муодилаи 4.2. Пешгӯии модели регрессияи хаттӣ.

ŷ = θ₀ + θ₁x₁ + θ₂x₂ + ⋯ + θₙxₙ.

Дар ин ҷо:

  • ŷ қимати пешгӯишуда аст;
  • n шумораи хусусиятҳост;
  • xᵢ қимати хусусияти i-ум аст;
  • θⱼ параметри j-уми модел аст: θ₀ узви озод ва θ₁, …, θₙ вазнҳои хусусиятҳо мебошанд.

Бо шакли векторӣ кӯтоҳтар менависем.

Муодилаи 4.3. Пешгӯии регрессияи хаттӣ дар шакли векторӣ.

ŷ = h_θ(x) = θ · x.

Дар ин ҷо h_θ функсияи гипотеза бо параметрҳои θ аст. Вектори θ узви озод ва вазнҳои θ₁ то θₙ-ро дорад. Вектори хусусиятҳои x аз x₀ то xₙ иборат буда, x₀ ҳамеша 1 аст. Ҳосили зарби скалярии θ · x ба θ₀x₀ + θ₁x₁ + … + θₙxₙ баробар мебошад.

Эзоҳ. Дар омӯзиши мошинӣ векторҳоро аксар вақт ҳамчун векторҳои сутунӣ — массивҳои дученакаи яксутуна — ифода мекунанд. Агар θ ва x сутунӣ бошанд, пешгӯӣ ŷ = θᵀx мешавад. θᵀ транспозаи θ, яъне вектори сатрӣ, ва θᵀx зарби матритсавии он бо x аст. Натиҷа ҳамон аст, аммо ҳамчун матритсаи якҳуҷайра, на скаляр. Дар китоб ҳамин аломатгузориро истифода мебарам, то байни зарби скалярӣ ва матритсавӣ пайваста нагузарем.

Модел маълум шуд, аммо чӣ гуна меомӯзонем? Омӯзиш муайян кардани параметрҳоест, ки моделро ба маҷмӯи омӯзишӣ беҳтар мутобиқ мекунанд. Аввал меъёри хуб ё бад мутобиқ шудан лозим аст. Дар боби 2 дидем, ки меъёри маъмул решаи миёнаи квадратҳои хато (RMSE) аст. Пас бояд θ-еро ёбем, ки RMSE-ро камтарин кунад. Дар амал камтарин кардани миёнаи квадратҳои хато (MSE) осонтар аст ва ҳамон натиҷаро медиҳад: нуқтаи камтарини функсияи мусбат нуқтаи камтарини решаи квадратии он ҳам мебошад.

Огоҳӣ. Алгоритмҳо ҳангоми омӯзиш аксар вақт функсияи талафоти дигареро беҳина мекунанд, ки аз меъёри арзёбии ниҳоӣ фарқ дорад. Сабаб осонтар будани беҳинасозӣ ё доштани узвҳои танҳо барои омӯзиш зарур, масалан мунтазамсозӣ, аст. Меъёри хуб бояд ба ҳадафи ниҳоии тиҷоратӣ наздик бошад. Талафоти хуби омӯзиш бояд осон беҳина шуда, бо он меъёр ҳамбастагии қавӣ дошта бошад. Масалан, таснифгарро бо талафоти логарифмӣ меомӯзонанд, аммо бо precision/recall месанҷанд. Кам кардани талафоти логарифмӣ осон аст ва одатан precision/recall-ро беҳтар мекунад.

MSE-и гипотезаи хаттии h_θ дар маҷмӯи X чунин ҳисоб мешавад.

Муодилаи 4.4. Функсияи хароҷоти MSE барои регрессияи хаттӣ.

MSE(X, h_θ) = (1 / m) · Σᵢ₌₁ᵐ (θᵀx⁽ⁱ⁾ − y⁽ⁱ⁾)².

Аксари аломатҳо дар боби 2 муаррифӣ шудаанд. Танҳо ба ҷойи h менависем h_θ, то вобастагии модел ба вектори θ равшан бошад. Барои кӯтоҳӣ ба ҷойи MSE(X, h_θ) танҳо MSE(θ) менависем.

Муодилаи нормалӣ

Барои ёфтани θ-и камтаринкунандаи MSE ҳалли мустақим ҳаст: муодилае, ки натиҷаро бевосита медиҳад. Он муодилаи нормалӣ (normal equation) ном дорад.

Муодилаи 4.5. Муодилаи нормалӣ.

θ̂ = (XᵀX)⁻¹ Xᵀy.

θ̂ қимати θ аст, ки хароҷотро камтарин мекунад. y вектори қиматҳои ҳадаф аз y⁽¹⁾ то y⁽ᵐ⁾ мебошад.

Барои санҷиш додаҳои ба хат монанд тавлид мекунем (расми 4.1):

import numpy as np

rng = np.random.default_rng(seed=42)
m = 200  # number of instances
X = 2 * rng.random((m, 1))  # column vector
y = 4 + 3 * X + rng.standard_normal((m, 1))  # column vector

Маҷмӯи хаттии тасодуфӣ

Расми 4.1. Маҷмӯи хаттии тасодуфан тавлидшуда.

Акнун θ̂-ро ҳисоб мекунем. Барои матритсаи баръакс inv() аз модули алгебраи хаттии NumPy — np.linalg — ва барои зарби матритсавӣ @ истифода мешавад:

from sklearn.preprocessing import add_dummy_feature

X_b = add_dummy_feature(X)  # add x0 = 1 to each instance
theta_best = np.linalg.inv(X_b.T @ X_b) @ X_b.T @ y

Эзоҳ. Барои массивҳои NumPy A @ B ба np.matmul(A, B) баробар аст. TensorFlow, PyTorch ва JAX низ @-ро дастгирӣ мекунанд. Аммо онро ба рӯйхатҳои одии Python, яъне рӯйхати рӯйхатҳо, татбиқ карда наметавонед.

Додаҳоро бо y = 4 + 3x₁ + ғавғои гауссӣ сохтем. Муодила чӣ ёфт?

>>> theta_best
array([[3.69084138],
       [3.32960458]])

Мехостем θ₀ = 4 ва θ₁ = 3 гирем, на 3,6908 ва 3,3296. Натиҷа наздик аст, аммо ғавғо барқарор кардани параметрҳои дақиқро номумкин кард. Маҷмӯа ҳар қадар хурдтару ғавғодортар бошад, кор душвортар мешавад.

Акнун бо θ̂ пешгӯӣ мекунем:

>>> X_new = np.array([[0], [2]])
>>> X_new_b = add_dummy_feature(X_new)  # add x0 = 1 to each instance
>>> y_predict = X_new_b @ theta_best
>>> y_predict
array([[ 3.69084138],
       [10.35005055]])

Пешгӯиҳоро мекашем (расми 4.2):

import matplotlib.pyplot as plt

plt.plot(X_new, y_predict, "r-", label="Predictions")
plt.plot(X, y, "b.")
[...]  # beautify the figure: add labels, axis, grid, and legend
plt.show()

Пешгӯиҳои модели хаттӣ

Расми 4.2. Пешгӯиҳои модели регрессияи хаттӣ.

Истифодаи Scikit-Learn нисбатан осон аст:

>>> from sklearn.linear_model import LinearRegression
>>> lin_reg = LinearRegression()
>>> lin_reg.fit(X, y)
>>> lin_reg.intercept_, lin_reg.coef_
(array([3.69084138]), array([[3.32960458]]))
>>> lin_reg.predict(X_new)
array([[ 3.69084138],
       [10.35005055]])

Scikit-Learn узви озодро дар intercept_ ва вазнҳоро дар coef_ ҷудо нигоҳ медорад. LinearRegression ба scipy.linalg.lstsq() асос ёфтааст; номи функсия ихтисораи «least squares», яъне «квадратҳои хурдтарин», аст. Онро бевосита низ даъват кардан мумкин аст:

>>> theta_best_svd, residuals, rank, s = np.linalg.lstsq(X_b, y, rcond=1e-6)
>>> theta_best_svd
array([[3.69084138],
       [3.32960458]])

Функсия θ̂ = X⁺y-ро ҳисоб мекунад, ки X⁺ псевдобаръакси Мур–Пенроуз-и X аст. Бо np.linalg.pinv() онро бевосита меёбед:

>>> np.linalg.pinv(X_b) @ y
array([[3.69084138],
       [3.32960458]])

Псевдобаръакс бо усули маъмули таҷзияи матритса — таҷзия ба қиматҳои сингулярӣ (singular value decomposition, SVD) — ҳисоб мешавад. Он X-ро ба зарби се матритса ҷудо мекунад:

X = UΣVᵀ

X⁺ = VΣ⁺Uᵀ.

Ба numpy.linalg.svd() нигаред. Барои Σ⁺ алгоритм қиматҳои аз ҳадди хеле хурд поёнро сифр карда, ҳамаи қиматҳои ғайрисифриро бо баръакси онҳо иваз карда, матритсаи ҳосилшударо транспоза мекунад. Ин аз муодилаи нормалӣ самараноктар буда, ҳолатҳои махсусро ҳам хуб ҳал мекунад. Агар XᵀX баръакспазир набошад, яъне сингуляр бошад, масалан m < n ё баъзе хусусиятҳо зиёдатӣ бошанд, муодилаи нормалӣ кор намекунад. Аммо псевдобаръакс ҳамеша таъриф шудааст.

Мураккабии ҳисоббарорӣ

Муодилаи нормалӣ баръакси XᵀX-ро ҳисоб мекунад: матритсаи (n + 1) × (n + 1), ки n шумораи хусусиятҳост. Мураккабии баръаксгирӣ вобаста ба татбиқ одатан аз O(n^2.4) то O(n³) аст. Пас дучанд кардани хусусиятҳо вақти ҳисобро тақрибан аз 2^2.4 ≈ 5,3 то 2³ = 8 маротиба зиёд мекунад.

Равиши SVD-и LinearRegression нисбат ба n тақрибан O(n²) аст. Дучанд шудани хусусиятҳо вақтро тақрибан чор баробар мекунад.

Огоҳӣ. Ҳар ду усул бо хусусиятҳои хеле зиёд, масалан 100 000-то, хеле суст мешаванд. Аммо нисбат ба шумораи намунаҳо хаттианд — O(m) — ва бо маҷмӯаҳои калон самаранок кор мекунанд, ба шарте ки дар хотира ғунҷанд.

Пас аз омӯзиш пешгӯӣ хеле тез аст, новобаста аз он ки кадом алгоритмро истифода бурдед. Мураккабӣ ҳам нисбат ба шумораи намунаҳои пешгӯишаванда ва ҳам нисбат ба хусусиятҳо хаттӣ аст. Дучанд кардани ҳар кадом вақтро тақрибан дучанд мекунад.

Акнун роҳи тамоман дигареро мебинем, ки барои хусусиятҳои бисёр ё додаҳои дар хотира нағунҷанда мувофиқтар аст.

Фаромадани градиентӣ

Фаромадани градиентӣ (GD) алгоритми умумии беҳинасозист, ки барои доираи васеи масъалаҳо ҳалли беҳтарин меёбад. Андешаи асосӣ тағйири такроршавандаи параметрҳо барои камтарин кардани функсияи хароҷот аст.

Фарз кунед дар кӯҳистон дар тумани ғафс гум шудаед ва танҳо нишебии замини зери поятонро ҳис мекунед. Барои зуд ба поёни водӣ расидан ба самти тезтарин нишебии поёнрав ҳаракат кардан хуб аст. GD ҳамин корро мекунад: градиенти маҳаллии функсияи хаторо нисбат ба θ чен карда, ба самти камшавӣ меравад. Вақте градиент сифр мешавад, ба нуқтаи минимум расидаед!

Дар амал θ-ро аввал бо қиматҳои тасодуфӣ пур мекунед — оғоздиҳии тасодуфӣ (random initialization). Баъд бо қадамҳои хурд тадриҷан беҳтар месозед ва ҳар қадам кӯшиш мекунад хароҷот, масалан MSE, кам шавад, то алгоритм ба минимум ҳамгаро гардад (расми 4.3).

Қадамҳои фаромадани градиентӣ

Расми 4.3. Параметрҳо тасодуфан оғоз шуда, барои кам кардани хароҷот пайваста тағйир меёбанд. Андозаи қадам ба нишебии хароҷот мутаносиб аст, бинобар ин наздики минимум қадамҳо хурд мешаванд.

Андозаи қадамро гиперпараметри суръати омӯзиш (learning rate) муайян мекунад. Агар хеле хурд бошад, барои ҳамгароӣ даврҳои бисёр ва вақти зиёд лозим мешавад (расми 4.4).

Суръати омӯзиши паст

Расми 4.4. Суръати омӯзиши аз ҳад паст.

Агар аз ҳад баланд бошад, мумкин аст аз водӣ парида, ба тарафи дигар, ҳатто ба нуқтаи баландтар аз пешина, бароед. Алгоритм метавонад аз ҳал дур шуда, қиматҳои торафт калонтар диҳад ва ҳалли хуб наёбад (расми 4.5).

Суръати омӯзиши баланд

Расми 4.5. Суръати омӯзиши аз ҳад баланд.

Ғайр аз ин, на ҳамаи функсияҳои хароҷот косаи ҳамвору зебо доранд. Онҳо метавонанд чуқурӣ, қирра, сатҳи ҳамвор ва ноҳамвориҳои дигар дошта бошанд. Расми 4.6 ду мушкили асосиро нишон медиҳад. Агар оғоз дар чап бошад, алгоритм ба минимуми маҳаллӣ мерасад, ки аз минимуми глобалӣ бадтар аст. Агар дар рост оғоз кунад, гузаштан аз сатҳи ҳамвор вақти зиёд мегирад. Агар барвақт қатъ кунед, ба минимуми глобалӣ намерасед.

Минимуми маҳаллӣ ва сатҳи ҳамвор

Расми 4.6. Домҳои фаромадани градиентӣ.

Хушбахтона, MSE-и регрессияи хаттӣ функсияи барҷаста (convex) аст: порчаи пайвасткунандаи ҳар ду нуқтаи график ҳеҷ гоҳ аз график поён намеафтад. Пас минимуми маҳаллии ғайриглобалӣ надорад. Функсия пайваста аст ва нишебӣ ногаҳон тағйир намеёбад. Аз ин рӯ, агар ба қадри кофӣ мунтазир шавед ва суръат аз ҳад баланд набошад, GD метавонад ба минимуми глобалӣ ба қадри дилхоҳ наздик шавад.

Гарчанде шакл косамонанд аст, агар миқёси хусусиятҳо хеле фарқ кунад, коса дарозрӯя мешавад. Дар тарафи чапи расми 4.7 хусусиятҳои 1 ва 2 ҳаммиқёсанд, аммо дар тарафи рост қиматҳои хусусияти 1 аз хусусияти 2 хеле хурдтаранд.

Дар чап алгоритм рост ба минимум меравад ва зуд мерасад. Дар рост аввал қариб ба самти амудӣ нисбат ба роҳи минимум меравад, баъд дар водии қариб ҳамвор роҳи дароз мепаймояд. Ниҳоят мерасад, аммо дер.

Диаграмма ҳамчунин нишон медиҳад, ки омӯзиш ҷустуҷӯи таркиби параметрҳоест, ки хароҷотро дар маҷмӯи омӯзишӣ камтарин мекунад. Ин ҷустуҷӯ дар фазои параметрҳо аст. Параметрҳо ҳар қадар зиёд бошанд, андозаҳои фазо бештар ва ҷустуҷӯ душвортар аст: ёфтани сӯзан дар хирмани 300-ченака аз сеченака хеле душвортар мебошад. Хушбахтона, дар регрессияи хаттӣ функсия барҷаста аст ва сӯзан танҳо дар қаъри коса ҷойгир мебошад.

GD бо миқёсбандӣ ва бе он

Расми 4.7. Фаромадани градиентӣ бо миқёсбандии хусусиятҳо дар чап ва бе он дар рост.

Огоҳӣ. Барои GD миқёси ҳамаи хусусиятҳоро монанд созед, масалан бо StandardScaler. Вагарна ҳамгароӣ хеле дертар мешавад.

Фаромадани градиентии дастаӣ

Аксари моделҳо бештар аз як параметр доранд. Пас барои GD бояд градиенти хароҷотро нисбат ба ҳар θⱼ ҳисоб кунед: агар онро андаке тағйир диҳед, хароҷот чӣ қадар тағйир меёбад? Ин ҳосилаи ҷузъӣ аст. Мисли он ки аввал пурсед «нишебии кӯҳ ба самти шарқ чӣ қадар аст?» ва баъд ба самти шимол ва дигар андозаҳо, агар фазои беш аз сеченакаро тасаввур кунед. Ҳосилаи ҷузъии MSE нисбат ба θⱼ чунин аст.

Муодилаи 4.6. Ҳосилаҳои ҷузъии функсияи хароҷот.

∂MSE(θ) / ∂θⱼ = (2 / m) · Σᵢ₌₁ᵐ (θᵀx⁽ⁱ⁾ − y⁽ⁱ⁾) · xⱼ⁽ⁱ⁾.

Ба ҷойи ҳисобҳои ҷудогона ҳамаи ҳосилаҳоро якбора ҳисоб мекунем. Вектори градиент, ∇_θ MSE(θ), барои ҳар параметр як ҳосилаи ҷузъӣ дорад.

Муодилаи 4.7. Вектори градиенти функсияи хароҷот.

             ⎡ ∂MSE / ∂θ₀ ⎤
             ⎢ ∂MSE / ∂θ₁ ⎥
∇_θ MSE(θ) = ⎢     ⋮      ⎥ = (2 / m) · Xᵀ(Xθ − y).
             ⎣ ∂MSE / ∂θₙ ⎦

Огоҳӣ. Дар ҳар қадам ҳисоб бо тамоми маҷмӯи X анҷом мешавад! Аз ҳамин сабаб номи алгоритм GD-и дастаӣ (batch gradient descent) аст; «GD-и пурра» шояд беҳтар мебуд. Барои маҷмӯаҳои азим хеле суст аст. Аммо бо зиёд шудани хусусиятҳо хуб кор мекунад: бо садҳо ҳазор хусусият аз муодилаи нормалӣ ё SVD хеле тезтар меомӯзонад.

Градиент ба боло ишора мекунад. Барои поён рафтан баръакс ҳаракат мекунем: онро аз θ тарҳ менамоем. Суръати омӯзиши η андозаи қадамро муайян мекунад.

Муодилаи 4.8. Қадами фаромадани градиентӣ.

θ^(қадами нав) = θ − η · ∇_θ MSE(θ).

Татбиқи сода:

eta = 0.1  # learning rate
n_epochs = 1000
m = len(X_b)  # number of instances

rng = np.random.default_rng(seed=42)
theta = rng.standard_normal((2, 1))  # randomly initialized model parameters

for epoch in range(n_epochs):
    gradients = 2 / m * X_b.T @ (X_b @ theta - y)
    theta = theta - eta * gradients

Чандон душвор набуд! Ҳар гузариши пурра аз маҷмӯи омӯзишӣ эпоха (epoch) ном дорад. Натиҷаи θ:

>>> theta
array([[3.69084138],
       [3.32960458]])

Айнан натиҷаи муодилаи нормалӣ! GD комилан кор кард. Агар суръати дигар — eta — мегирифтед, чӣ? Расми 4.8 бист қадами аввалро бо се суръат нишон медиҳад. Хати поёни ҳар график нуқтаи оғози тасодуфӣ аст ва ҳар эпоха бо хати ториктар нишон дода мешавад.

GD бо се суръати омӯзиш

Расми 4.8. Фаромадани градиентӣ бо суръатҳои гуногуни омӯзиш.

Дар чап суръат паст аст: алгоритм ниҳоят мерасад, вале дер. Дар миёна муносиб аст: дар чанд эпоха ҳамгаро шудааст. Дар рост баланд аст: алгоритм ба ҳар тараф ҷаҳида, ҳар қадам аз ҳал дуртар мешавад.

Барои ёфтани суръати хуб ҷустуҷӯи шабакавӣ-ро истифода баред (боби 2). Аммо шумораи эпохаҳоро маҳдуд кунед, то моделҳои хеле сустҳамгаро барвақт хориҷ шаванд.

Шумораи эпохаҳоро чӣ гуна интихоб мекунед? Агар кам бошад, алгоритм ҳангоми қатъ аз ҳал дур мемонад. Агар зиёд бошад, баъди дигар тағйир наёфтани параметрҳо вақт беҳуда меравад. Роҳи сода: шумораи хеле калон гузоред, аммо вақте нормаи градиент аз адади хурди ε, ки таҳаммул (tolerance) ном дорад, камтар шуд, қатъ кунед. Ин маънои қариб расидан ба минимумро дорад.

Суръати ҳамгароӣ

Агар хароҷот барҷаста бошад ва нишебӣ ногаҳон тағйир наёбад, мисли MSE, GD-и дастаӣ бо суръати собит ниҳоят ба ҳал ҳамгаро мешавад. Аммо вобаста ба шакли функсия барои расидан ба ҳамсоягии ε-и беҳтарин ҳал то O(1/ε) давр лозим шуда метавонад. Агар барои дақиқии бештар ε-ро 10 маротиба кам кунед, вақт метавонад тақрибан 10 баробар зиёд шавад.

Фаромадани градиентии стохастикӣ

Мушкили асосии GD-и дастаӣ истифодаи тамоми маҷмӯа дар ҳар қадам аст, ки барои додаҳои калон суст мебошад. GD-и стохастикӣ (stochastic gradient descent, SGD) дар ҳар қадам як намунаи тасодуфӣ гирифта, градиентро танҳо аз рӯйи он ҳисоб мекунад. Ҳар давр додаи хеле кам коркард мешавад, пас хеле тезтар аст. Ҳамчунин маҷмӯаҳои азимро омӯзонидан мумкин аст, зеро ҳар бор танҳо як намуна бояд дар хотира бошад. SGD метавонад алгоритми берун аз хотираи асосӣ бошад; ба боби 1 нигаред.

Аммо аз сабаби тасодуфӣ будан ҳаракати он аз GD-и дастаӣ ноҳамвортар аст. Хароҷот ба ҷойи коҳиши ҳамвор боло-поён ҷаҳида, танҳо ба ҳисоби миёна кам мешавад. Ниҳоят ба минимум хеле наздик мешавад, аммо дар гирди он ҳаракатро идома дода, ором намегирад (расми 4.9). Пас аз қатъ параметрҳо хубанд, вале беҳтарин нестанд.

Агар хароҷот хеле ноҳамвор бошад, мисли расми 4.6, ин тасодуфият барои баромадан аз минимумҳои маҳаллӣ муфид аст ва имкони ёфтани минимуми глобалиро нисбат ба GD-и дастаӣ зиёд мекунад.

Пас тасодуфият барои раҳоӣ аз минимумҳои маҳаллӣ хуб, аммо барои ором гирифтан дар минимум бад аст. Роҳи ҳал тадриҷан кам кардани суръати омӯзиш мебошад. Қадамҳои аввал калонанд, то зуд пеш равад ва аз минимумҳои маҳаллӣ барояд; баъд хурд мешаванд, то дар минимуми глобалӣ устувор шавад. Ин ба тафсонидани тақлидӣ (simulated annealing) монанд аст: алгоритме, ки аз оҳиста хунук кардани филизи гудохта илҳом гирифтааст.

Функсияи муайянкунандаи суръати ҳар давр ҷадвали суръати омӯзиш (learning schedule) ном дорад. Агар суръат хеле зуд кам шавад, модел дар минимуми маҳаллӣ ё ҳатто нимароҳ «ях» мекунад. Агар хеле оҳиста кам шавад, муддати дароз дар гирди минимум ҷаҳида, ҳангоми қатъи барвақт ҳалли ғайрибеҳтарин медиҳад.

Роҳи SGD ва GD-и дастаӣ

Расми 4.9. Ҳар қадами SGD аз GD-и дастаӣ хеле тезтар, вале тасодуфитар аст.

Ин рамз SGD-ро бо ҷадвали сода татбиқ мекунад:

n_epochs = 50
t0, t1 = 5, 50  # learning schedule hyperparameters

def learning_schedule(t):
    return t0 / (t + t1)

rng = np.random.default_rng(seed=42)
theta = rng.standard_normal((2, 1))  # randomly initialized model parameters

for epoch in range(n_epochs):
    for iteration in range(m):
        random_index = rng.integers(m)
        xi = X_b[random_index : random_index + 1]
        yi = y[random_index : random_index + 1]
        gradients = 2 * xi.T @ (xi @ theta - yi)  # for SGD, do not divide by m
        eta = learning_schedule(epoch * m + iteration)
        theta = theta - eta * gradients

Одатан ҳар m даврро як эпоха мегӯем. GD-и дастаии пешина тамоми маҷмӯаро 1 000 бор мегузашт; ин рамз танҳо 50 бор гузашта, ҳалли хуб мегирад:

>>> theta
array([[3.69826475],
       [3.30748311]])

Расми 4.10 бист қадами аввалро нишон медиҳад. Ноҳамвории қадамҳоро бинед.

Бист қадами аввали SGD

Расми 4.10. Бист қадами аввали SGD.

Азбаски интихоб тасодуфист, баъзе намунаҳо дар як эпоха чанд бор ва баъзеҳо тамоман гирифта намешаванд. Барои кафолати гузаштан аз ҳамаи намунаҳо метавонед маҷмӯаро дар оғози ҳар эпоха омехта кунед — вурудҳо ва барчаспҳоро якҷо — ва баъд яктоӣ гузаред. Аммо ин мураккабтар аст ва одатан натиҷаро беҳтар намекунад.

Огоҳӣ. Барои он ки параметрҳо ба ҳисоби миёна ба беҳтарин ҳалли глобалӣ кашида шаванд, намунаҳои SGD бояд мустақил ва яксонтақсимшуда (IID) бошанд. Роҳи сода омехта кардан ҳангоми омӯзиш аст: интихоби тасодуфии ҳар намуна ё омехта кардани маҷмӯа дар оғози ҳар эпоха. Агар намунаҳо, масалан аз рӯйи барчасп, мураттаб бошанд, SGD аввал барои як барчасп, баъд барои дигаре беҳина мекунад ва наздики минимуми глобалӣ ором намегирад.

Дар Scikit-Learn SGDRegressor пешфарз MSE-ро беҳина мекунад. Рамзи зерин то 1 000 эпоха — max_iter — ё то вақте иҷро мешавад, ки дар 100 эпоха — n_iter_no_change — коҳиши талафот аз 10⁻⁵ — tol — камтар монад. Суръати аввал 0,01 — eta0 — ва ҷадвал пешфарз аст, ки аз ҷадвали мо фарқ мекунад. Мунтазамсозӣ истифода намешавад: penalty=None.

from sklearn.linear_model import SGDRegressor

sgd_reg = SGDRegressor(max_iter=1000, tol=1e-5, penalty=None, eta0=0.01,
                       n_iter_no_change=100, random_state=42)
sgd_reg.fit(X, y.ravel())  # y.ravel() because fit() expects 1D targets

Боз натиҷа ба муодилаи нормалӣ наздик аст:

>>> sgd_reg.intercept_, sgd_reg.coef_
(array([3.68899733]), array([3.33054574]))

Маслиҳат. Ҳамаи арзёбандаҳои Scikit-Learn fit() доранд, аммо баъзеҳо partial_fit() низ доранд, ки барои як ё чанд намуна як даври омӯзиш мекунад ва max_iter, tol ва монанди онҳоро нодида мегирад. Даъватҳои такрорӣ моделро тадриҷан меомӯзонанд ва назорати бештар медиҳанд. Моделҳои дигар warm_start доранд; баъзеҳо ҳар дуро. Бо warm_start=True, fit()-и модели омӯзонидашуда онро аз нав оғоз намекунад, балки бо риояи max_iter ва tol идома медиҳад. Аммо fit() ҳисобкунаки даврҳои ҷадвали суръатро аз сифр оғоз мекунад, partial_fit() не.

Фаромадани градиентии минидастаӣ

Навъи охирин GD-и минидастаӣ (mini-batch gradient descent) аст. Дар ҳар қадам ба ҷойи тамоми маҷмӯа ё як намуна, гурӯҳи хурди тасодуфии намунаҳо — минидаста — истифода мешавад. Бартарии асосӣ нисбат ба SGD суръат гирифтани амалиёти матритсавӣ аз сахтафзор, махсусан GPU, мебошад.

Ҳаракат дар фазои параметрҳо нисбат ба SGD камтар бетартиб аст, махсусан бо минидастаҳои калонтар. Аз ин рӯ, он дар гирди минимум наздиктар ҳаракат мекунад. Аммо баромадан аз минимумҳои маҳаллӣ шояд душвортар шавад, агар масъала чунин минимумҳо дошта бошад; регрессияи хаттӣ бо MSE чунин мушкил надорад.

Расми 4.11 роҳи ҳар се алгоритмро нишон медиҳад. Ҳама наздики минимум мерасанд, аммо GD-и дастаӣ дар он меистад ва SGD-ву минидастаӣ ҳаракатро идома медиҳанд. Бо вуҷуди ин, ҳар қадами дастаӣ вақти зиёд мегирад ва ду усули дигар ҳам бо ҷадвали хуб метавонанд ба минимум расанд.

Роҳҳои се навъи GD дар фазои параметрҳо

Расми 4.11. Роҳҳои алгоритмҳои GD дар фазои параметрҳо.

Ҷадвали 4.1 алгоритмҳои то ин ҷо дидашударо муқоиса мекунад. m шумораи намунаҳо ва n шумораи хусусиятҳост.

Ҷадвали 4.1. Муқоисаи алгоритмҳои регрессияи хаттӣ.

Алгоритмm-и калонКор берун аз хотираn-и калонГиперпараметрҳоМиқёсбандӣ лозим?Scikit-Learn
Муодилаи нормалӣТезНеСуст0Не—
SVDТезНеСуст0НеLinearRegression
GD-и дастаӣСустНеТез2Бале—
SGDТезБалеТез≥2БалеSGDRegressor
GD-и минидастаӣТезБалеТез≥2Бале—

Пас аз омӯзиш қариб фарқе нест: ҳамаи алгоритмҳо моделҳои хеле монанд медиҳанд ва айнан бо як роҳ пешгӯӣ мекунанд.

Регрессияи бисёрузвагӣ

Агар додаҳо аз хати рост мураккабтар бошанд, чӣ? Аҷиб аст, аммо модели хаттиро ба додаҳои ғайрихаттӣ мутобиқ кардан мумкин аст. Дараҷаҳои ҳар хусусиятро ҳамчун хусусиятҳои нав илова карда, баъд модели хаттиро бо маҷмӯи васеъшуда меомӯзонед. Ин регрессияи бисёрузвагӣ (polynomial regression) ном дорад.

Мисол: додаҳои ғайрихаттӣ аз муодилаи квадратии y = ax² + bx + c ва каме ғавғо месозем (расми 4.12):

rng = np.random.default_rng(seed=42)
m = 200  # number of instances
X = 6 * rng.random((m, 1)) - 3
y = 0.5 * X ** 2 + X + 2 + rng.standard_normal((m, 1))

Додаҳои ғайрихаттӣ

Расми 4.12. Додаҳои ғайрихаттӣ ва ғавғодори тавлидшуда.

Хати рост ин додаҳоро дуруст ифода карда наметавонад. Бо PolynomialFeatures квадрати ҳар хусусиятро ҳамчун хусусияти нав илова мекунем. Дар ин ҷо як хусусият ҳаст:

>>> from sklearn.preprocessing import PolynomialFeatures
>>> poly_features = PolynomialFeatures(degree=2, include_bias=False)
>>> X_poly = poly_features.fit_transform(X)
>>> X[0]
array([1.64373629])
>>> X_poly[0]
array([1.64373629, 2.701869  ])

X_poly акнун ҳам хусусияти аслии X ва ҳам квадрати онро дорад. Ба ин додаҳо модели LinearRegression-ро мутобиқ мекунем (расми 4.13):

>>> lin_reg = LinearRegression()
>>> lin_reg.fit(X_poly, y)
>>> lin_reg.intercept_, lin_reg.coef_
(array([2.00540719]), array([[1.11022126, 0.50526985]]))

Регрессияи бисёрузвагӣ

Расми 4.13. Пешгӯиҳои модели регрессияи бисёрузвагӣ.

Бад нест: модел тақрибан ŷ = 0,5053x₁² + 1,1102x₁ + 2,0054-ро тахмин мекунад, дар ҳоле ки функсияи аслӣ y = 0,5x₁² + x₁ + 2 + ғавғои гауссӣ буд.

Бо якчанд хусусият регрессияи бисёрузвагӣ робитаи байни онҳоро ҳам меёбад, ки регрессияи одии хаттӣ наметавонад. PolynomialFeatures ҳамаи таркибҳоро то дараҷаи додашуда илова мекунад. Масалан, барои a ва b бо degree=3 на танҳо a², a³, b², b³, балки ab, a²b ва ab² низ илова мешаванд.

Огоҳӣ. PolynomialFeatures(degree=d) массиви дорои n хусусиятро ба массиви дорои (n + d)! / (d!n!) хусусият табдил медиҳад. n! факториал аст: 1 × 2 × … × n. Аз афзоиши таркибии шумораи хусусиятҳо эҳтиёт шавед!

Каҷҳои омӯзиш

Регрессияи дараҷаи баланд эҳтимол ба додаҳои омӯзишӣ аз модели хаттӣ хеле беҳтар мутобиқ мешавад. Масалан, расми 4.14 модели дараҷаи 300-ро бо модели хаттӣ ва квадратӣ муқоиса мекунад. Модели дараҷаи 300 то ҳадди имкон ба ҳар нуқта наздик шуда, бисёр печутоб мехӯрад.

Бисёрузвагиҳои дараҷаи 1, 2 ва 300

Расми 4.14. Регрессияи бисёрузвагии дараҷаи баланд.

Модели дараҷаи баланд сахт аз ҳад мутобиқ ва модели хаттӣ каммутобиқ шудааст. Модели квадратӣ беҳтар умумият медиҳад, ки табиист: додаҳо бо модели квадратӣ сохта шуданд. Аммо одатан функсияи тавлидкунандаро намедонед. Мураккабии муносиб ва аз ҳад ё кам мутобиқ шудани моделро чӣ гуна мефаҳмед?

Дар боби 2 бо санҷиши салибӣ умумиятдиҳиро тахмин кардем. Агар модел дар омӯзиш хуб, аммо дар маҷмӯи тасдиқӣ бад бошад, аз ҳад мутобиқ шудааст. Агар дар ҳар ду бад бошад, каммутобиқ аст. Ин як роҳи муайян кардани сода ё мураккаб будани модел мебошад.

Роҳи дигар каҷҳои омӯзиш (learning curves) аст: графикҳои хатои омӯзишӣ ва тасдиқӣ нисбат ба даври омӯзиш. Ҳангоми омӯзиш мунтазам дар ҳар ду маҷмӯа арзёбӣ карда, натиҷаҳоро мекашед. Агар модел омӯзиши тадриҷиро бо partial_fit() ё warm_start дастгирӣ накунад, онро чанд бор дар зермаҷмӯаҳои торафт калонтар меомӯзонед.

learning_curve()-и Scikit-Learn бо санҷиши салибӣ моделро омӯзонидаву арзёбӣ мекунад. Пешфарз онро бо қисмҳои торафт калонтар аз нав меомӯзонад. Агар омӯзиши тадриҷӣ дастгирӣ шавад, exploit_incremental_learning=True гузоред, то ба ҷойи бозомӯзӣ омӯзиши тадриҷӣ кунад. Функсия андозаи маҷмӯаҳо ва баҳоҳои омӯзишу тасдиқиро барои ҳар андоза ва ҳар қисми салибӣ медиҳад. Каҷҳои модели одии хаттиро мебинем (расми 4.15):

from sklearn.model_selection import learning_curve

train_sizes, train_scores, valid_scores = learning_curve(
    LinearRegression(), X, y, train_sizes=np.linspace(0.01, 1.0, 40), cv=5,
    scoring="neg_root_mean_squared_error")
train_errors = -train_scores.mean(axis=1)
valid_errors = -valid_scores.mean(axis=1)

plt.plot(train_sizes, train_errors, "r-+", linewidth=2, label="train")
plt.plot(train_sizes, valid_errors, "b-", linewidth=3, label="valid")
[...]  # beautify the figure: add labels, axis, grid, and legend
plt.show()

Каҷҳои омӯзиши модели хаттӣ

Расми 4.15. Каҷҳои омӯзиш.

Ин модел каммутобиқ шудааст: барои додаҳо хеле сода аст. Аз куҷо медонем? Бо як ё ду намуна модел онҳоро комилан ифода мекунад, бинобар ин каҷи хатои омӯзишӣ аз сифр сар мешавад. Бо илова шудани намунаҳо мутобиқати комил дигар имконнопазир аст: ҳам ғавғо ҳаст ва ҳам додаҳо хаттӣ нестанд. Хатои омӯзиш боло рафта, ба сатҳи устувор мерасад; иловаи намунаҳо хатои миёнаро дигар чандон беҳтар ё бад намекунад.

Хатои тасдиқӣ дар аввал баланд аст, зеро модел бо намунаҳои хеле кам хуб умумият дода наметавонад. Бо гирифтани намунаҳои бештар меомӯзад ва хато тадриҷан кам мешавад. Аммо хати рост ин додаҳоро хуб моделсозӣ карда наметавонад, пас хато дар сатҳи устувор, наздики каҷи дигар, мемонад.

Ин каҷҳои маъмули каммутобиқшавианд: ҳар ду устувор, ба ҳам наздик ва нисбатан баланданд.

Маслиҳат. Барои модели каммутобиқ илова кардани додаҳои бештар ёрӣ намедиҳад. Модели беҳтар ё хусусиятҳои беҳтар лозим аст.

Акнун каҷҳои модели бисёрузвагии дараҷаи 10-ро дар ҳамон додаҳо мебинем (расми 4.16):

from sklearn.pipeline import make_pipeline

polynomial_regression = make_pipeline(
    PolynomialFeatures(degree=10, include_bias=False),
    LinearRegression())

train_sizes, train_scores, valid_scores = learning_curve(
    polynomial_regression, X, y, train_sizes=np.linspace(0.01, 1.0, 40), cv=5,
    scoring="neg_root_mean_squared_error")
[...]  # same as earlier

Каҷҳои омӯзиши дараҷаи 10

Расми 4.16. Каҷҳои омӯзиши модели бисёрузвагии дараҷаи 10.

Онҳо ба пешина монанданд, аммо ду фарқи муҳим доранд:

  • Хатои омӯзишӣ хеле пасттар аст.
  • Байни каҷҳо фосила ҳаст: модел дар маҷмӯи омӯзишӣ нисбат ба маҷмӯи тасдиқӣ беҳтар кор мекунад, ки нишонаи аз ҳад мутобиқшавист. Бо маҷмӯи хеле калонтар каҷҳо ба ҳам наздиктар мешуданд.

Созиши ғараз ва парокандагӣ

Яке аз натиҷаҳои муҳими назариявии омор ва омӯзиши мошинӣ ин аст, ки хатои умумиятдиҳиро ба се қисми хеле гуногун ҷудо кардан мумкин аст:

Ғараз (bias). Ин қисм аз фарзияҳои нодуруст меояд, масалан хаттӣ шуморидани додаҳои дар асл квадратӣ. Модели ғаразаш баланд одатан каммутобиқ мешавад.

Парокандагӣ (variance). Ин қисм аз ҳассосияти аз ҳад зиёди модел ба тағйироти хурди додаҳои омӯзишӣ меояд. Модели дорои дараҷаҳои озодии зиёд, мисли бисёрузвагии дараҷаи баланд, эҳтимол парокандагии баланд дошта, аз ҳад мутобиқ мешавад.

Хатои коҳишнопазир (irreducible error). Ин қисм аз ғавғои худи додаҳост. Барои кам кардан бояд додаҳоро тоза кунед: манбаъҳоро, масалан сенсорҳои вайронро, ислоҳ ё қиматҳои дурро ошкору хориҷ намоед.

Мураккабтар кардани модел одатан парокандагиро зиёд ва ғаразро кам мекунад. Сода кардан ё қавитар кардани мунтазамсозӣ баръакс ғаразро зиёд ва парокандагиро кам мекунад (расми 4.17). Аз ин рӯ онро созиш мегӯянд.

Созиши ғараз ва парокандагӣ

Расми 4.17. Созиши ғараз ва парокандагӣ.

Маслиҳат. Як роҳи беҳтар кардани модели аз ҳад мутобиқшуда додани маълумоти омӯзишии бештар аст, то хатои тасдиқӣ ба хатои омӯзиш ба қадри кофӣ наздик шавад.

Моделҳои хаттии мунтазамсозишуда

Дар бобҳои 1 ва 2 дидем, ки роҳи хуби кам кардани аз ҳад мутобиқшавӣ мунтазамсозӣ, яъне маҳдуд кардани модел аст. Дараҷаҳои озодӣ ҳар қадар кам бошанд, аз ҳад мутобиқ шудан душвортар мешавад. Барои модели бисёрузвагӣ роҳи сода кам кардани дараҷа аст.

Моделҳои хаттиро ҳам мунтазамсозӣ карда метавонем? Шояд пурсед: магар онҳо аллакай ба қадри кофӣ маҳдуд нестанд? Регрессияи хаттӣ чанд фарзия дорад: робитаи ҳақиқии вуруду баромад хаттӣ аст; ғавғо миёнаи сифр, парокандагии собит дошта, аз вурудҳо мустақил аст; матритсаи вуруд ранги пурра дорад, яъне вурудҳо ҳамхат нестанд ва шумораи намунаҳо аз параметрҳо камтар нест.

Дар амал баъзе фарзияҳо комилан иҷро намешаванд. Масалан, вурудҳо метавонанд қариб ҳамхат бошанд. Ин регрессияро аз ҷиҳати ададӣ ноустувор мекунад: тағйироти хеле хурди маҷмӯа метавонад ба модели омӯзонидашуда таъсири калон расонад. Мунтазамсозӣ моделҳои хаттиро устувору дақиқтар месозад.

Одатан вазнҳои моделро маҳдуд мекунанд. Се роҳи онро мебинем: Ridge, Lasso ва Elastic Net.

Регрессияи Ridge

Регрессияи Ridge, ки мунтазамсозии Тихонов низ ном дорад, версияи мунтазамсозишудаи регрессияи хаттист. Ба MSE узви ҷаримавии зерин илова мешавад:

(α / m) · Σᵢ₌₁ⁿ θᵢ².

Алгоритм бояд ҳам ба додаҳо мутобиқ шавад ва ҳам вазнҳоро то ҳадди имкон хурд нигоҳ дорад. Модел камтар чандир шуда, барои ифодаи ҳар нуқта аз ҳад «кашида» намешавад ва хавфи аз ҳад мутобиқшавӣ кам мегардад. Ҷарима танҳо ҳангоми омӯзиш илова мешавад. Барои арзёбии модели тайёр MSE ё RMSE-и бе мунтазамсозиро истифода мебаред.

Гиперпараметри α шиддати мунтазамсозиро идора мекунад. Агар α = 0 бошад, Ridge ҳамон регрессияи хаттӣ аст. Агар α хеле калон бошад, ҳамаи вазнҳо ба сифр наздик шуда, хати уфуқӣ аз миёнаи додаҳо мегузарад.

Муодилаи 4.9. Функсияи хароҷоти Ridge.

J(θ) = MSE(θ) + (α / m) · Σᵢ₌₁ⁿ θᵢ².

Узви озоди θ₀ мунтазамсозӣ намешавад: ҷамъ аз i = 1 оғоз мешавад. Агар w = (θ₁, …, θₙ) бошад, ҷарима α∥w∥₂²/m аст; ∥w∥₂ нормаи ℓ₂-и вазнҳост. Барои GD-и дастаӣ ба қисми градиенти MSE, ки ба вазнҳо дахл дорад, 2αw/m илова кунед. Ба градиенти узви озод чизе илова намешавад.

Огоҳӣ. Пеш аз Ridge додаҳоро, масалан бо StandardScaler, миқёсбандӣ кунед: он ба миқёси хусусиятҳо ҳассос аст. Ин барои аксари моделҳои мунтазамсозишуда дуруст мебошад.

Расми 4.18 чанд модели Ridge-ро бо α-ҳои гуногун дар додаҳои хаттии хеле ғавғодор нишон медиҳад. Дар тарафи чап моделҳои одии хаттӣ ҳастанд. Дар тарафи рост аввал PolynomialFeatures(degree=10), баъд StandardScaler ва ниҳоят Ridge татбиқ шудаанд: регрессияи бисёрузвагӣ бо мунтазамсозии Ridge. Бо зиёд шудани α пешгӯиҳо ҳамвортар, камтар ифротӣ ва оқилонатар мешаванд. Парокандагӣ кам ва ғараз зиёд мешавад.

Мунтазамсозии Ridge

Расми 4.18. Моделҳои хаттӣ дар чап ва бисёрузвагӣ дар рост бо дараҷаҳои гуногуни мунтазамсозии Ridge.

Мисли регрессияи хаттӣ Ridge-ро бо ҳалли мустақим ё GD омӯзонидан мумкин аст. Афзалияту камбудиҳо ҳамонанд. Дар формулаи зерин A матритсаи воҳидии (n + 1) × (n + 1) аст, аммо ҳуҷайраи болои чапи он барои узви озод 0 мебошад.

Муодилаи 4.10. Ҳалли мустақими Ridge.

θ̂ = (XᵀX + αA)⁻¹ Xᵀy.

Мисолҳои кодии Ridge, Lasso ва Elastic Net дар ҳамон маҷмӯи хурди хаттӣ ва ғавғодори расми 4.18 (m = 20) иҷро мешаванд:

rng = np.random.default_rng(seed=42)
m = 20  # number of instances
X = 3 * rng.random((m, 1))
y = 1 + 0.5 * X + rng.standard_normal((m, 1)) / 1.5
X_new = np.linspace(0, 3, 100).reshape(100, 1)

Дар Scikit-Learn ҳалли мустақимро чунин мегирем. Ин варианти муодила усули таҷзияи матритсавии Андре-Луи Холескиро истифода мебарад:

>>> from sklearn.linear_model import Ridge
>>> ridge_reg = Ridge(alpha=0.1, solver="cholesky")
>>> ridge_reg.fit(X, y)
>>> ridge_reg.predict([[1.5]])
array([1.84414523])

Ва бо SGD:

>>> sgd_reg = SGDRegressor(penalty="l2", alpha=0.1 / m, tol=None,
...                        max_iter=1000, eta0=0.01, random_state=42)
...
>>> sgd_reg.fit(X, y.ravel())  # y.ravel() because fit() expects 1D targets
>>> sgd_reg.predict([[1.5]])
array([1.83659707])

penalty навъи мунтазамсозиро муайян мекунад. "l2" маънои илова кардани alpha зарб ба квадрати нормаи ℓ₂-и вазнҳоро ба MSE дорад. Ба Ridge монанд аст, аммо дар ин ҷо тақсим ба m нест. Аз ҳамин сабаб alpha=0.1 / m додем, то ба Ridge(alpha=0.1) мувофиқ шавад.

Маслиҳат. RidgeCV Ridge-ро иҷро карда, гиперпараметрҳоро бо санҷиши салибӣ худкор танзим мекунад. Ба GridSearchCV монанд аст, аммо барои Ridge беҳина шуда, тезтар кор мекунад. Баъзе арзёбандаҳои дигар, асосан хаттӣ, низ версияҳои самараноки CV доранд, мисли LassoCV ва ElasticNetCV.

Регрессияи Lasso

Lasso, ихтисораи least absolute shrinkage and selection operator, навъи дигари регрессияи хаттии мунтазамсозишуда аст. Мисли Ridge ҷарима илова мекунад, аммо ба ҷойи квадрати нормаи ℓ₂ нормаи ℓ₁-и вазнҳоро истифода мебарад. Ин ҷо ℓ₁ ба 2α зарб мешавад, дар ҳоле ки квадрати ℓ₂-и Ridge ба α/m зарб мешуд. Ин коэффисиентҳо барои аз андозаи маҷмӯи омӯзишӣ мустақил мондани қимати беҳтарини α интихоб шудаанд: нормаҳои гуногун коэффисиентҳои гуногун медиҳанд. Барои тафсилот масъалаи №15657-и Scikit-Learn-ро бинед.

Муодилаи 4.11. Функсияи хароҷоти Lasso.

J(θ) = MSE(θ) + 2α · Σᵢ₌₁ⁿ |θᵢ|.

Расми 4.19 мисли 4.18 аст, аммо Ridge бо Lasso ва α-ҳо бо қиматҳои дигар иваз шудаанд.

Хусусияти муҳим: Lasso вазни хусусиятҳои камаҳаммиятро аксар вақт айнан сифр мекунад. Масалан, хати канда-кандаи рости расми 4.19 бо α = 0,01 тақрибан кубӣ менамояд: ҳамаи вазнҳои хусусиятҳои дараҷаҳои баланд сифранд. Яъне Lasso интихоби хусусиятҳо-ро худкор анҷом дода, модели тунук бо вазнҳои ғайрисифрии кам медиҳад. Аммо созиш ҳаст: α-и аз ҳад калон моделро хеле тунук мекунад, вале самаранокӣ сахт паст мешавад.

Мунтазамсозии Lasso

Расми 4.19. Моделҳои хаттӣ дар чап ва бисёрузвагӣ дар рост бо дараҷаҳои гуногуни Lasso.

Расми 4.20 мефаҳмонад, ки чаро ℓ₁ тунукӣ ба вуҷуд меорад. Меҳварҳо ду параметри моделанд ва хатҳои сатҳии пасманзар функсияҳои талафотро нишон медиҳанд. Дар болои чап талафоти ℓ₁ — |θ₁| + |θ₂| — бо наздикшавӣ ба ҳар меҳвар хаттӣ кам мешавад. Агар аз θ₁ = 2 ва θ₂ = 0,5 оғоз кунед, GD ҳар дуро баробар кам мекунад, чунон ки хати зарди канда-канда нишон медиҳад. θ₂ аввал ба сифр мерасад, зеро наздиктар буд. Баъд GD аз рӯйи ҷӯяк то θ₁ = 0 мефарояд, бо каме ҷаҳиш, зеро градиентҳои ℓ₁ ба сифр наздик намешаванд: барои ҳар параметр −1 ё 1 мебошанд.

Дар болои рост хатҳои сатҳӣ хароҷоти Lasso, яъне MSE + ℓ₁, мебошанд. Доираҳои сафед роҳи GD-ро аз тақрибан θ₁ = 0,25 ва θ₂ = −1 нишон медиҳанд. Боз роҳ зуд ба θ₂ = 0 расида, баъд аз рӯйи ҷӯяк меравад ва дар атрофи беҳтарин ҳалли глобалӣ — чоркунҷаи сурх — ҷаҳидан мегирад. Бо зиёд шудани α нуқтаи беҳтарин қад-қади хати зарди канда-канда ба чап ва бо кам шудани α ба рост меравад. Дар ин мисол беҳтарин параметрҳои MSE-и бе ҷарима θ₁ = 2 ва θ₂ = 0,5 мебошанд.

Ду графики поён ҳамон ҳолатро бо ҷаримаи ℓ₂ нишон медиҳанд. Дар поёни чап бо наздикшавӣ ба оғози координатаҳо талафот кам мешавад ва GD рост ба он меравад. Дар поёни рост хароҷоти Ridge, яъне MSE + ℓ₂, аст. Наздики беҳтарин ҳал градиентҳо хурд шуда, GD табиатан суст мешавад. Ҷаҳишҳо маҳдуд шуда, Ridge аз Lasso тезтар ҳамгаро мешавад. Бо зиёд шудани α параметрҳои беҳтарин, ки чоркунҷаи сурх нишон медиҳад, ба оғози координатаҳо наздик мешаванд, аммо пурра нест намешаванд.

Lasso ва Ridge дар фазои параметрҳо

Расми 4.20. Муқоисаи мунтазамсозии Lasso ва Ridge.

Маслиҳат. Барои кам кардани ҷаҳиши GD дар атрофи беҳтарин ҳалли Lasso суръатро тадриҷан паст кунед. Ҷаҳишҳо мемонанд, аммо қадамҳо хурдтар шуда, алгоритм ҳамгаро мешавад.

Хароҷоти Lasso дар θᵢ = 0, барои i = 1, …, n, ҳосила надорад. Аммо агар дар он нуқтаҳо ба ҷойи градиент вектори зерградиент (subgradient)-и g истифода баред, GD кор мекунад.

Муодилаи 4.12. Вектори зерградиенти Lasso.

                       ⎡    0     ⎤
                       ⎢ sign(θ₁) ⎥
g(θ) = ∇_θ MSE(θ) + 2α ⎢    ⋮     ⎥
                       ⎣ sign(θₙ) ⎦
          ⎧ −1   t < 0
sign(t) = ⎨  0   t = 0
          ⎩  1   t > 0.

Мисоли хурд бо Lasso:

>>> from sklearn.linear_model import Lasso
>>> lasso_reg = Lasso(alpha=0.1)
>>> lasso_reg.fit(X, y)
>>> lasso_reg.predict([[1.5]])
array([1.87550211])

Ба ҷойи он SGDRegressor(penalty="l1", alpha=0.1) ҳам истифода кардан мумкин аст.

Регрессияи Elastic Net

Elastic Net миёнаи Ridge ва Lasso аст. Ҷарима ҷамъи вазндори ҳар ду буда, нисбати омехтаи r-ро идора мекунед. Дар r = 0 ба Ridge (бо α-и Ridge = mα) ва дар r = 1 ба Lasso мувофиқ мешавад.

Муодилаи 4.13. Функсияи хароҷоти Elastic Net.

J(θ) = MSE(θ) + 2rα · Σᵢ₌₁ⁿ |θᵢ| + (1 − r)α · Σᵢ₌₁ⁿ θᵢ².

Эзоҳи тарҷумон. Дар манбаъ узви L2 бо тақсим ба m омадааст. Бо қоидаи MSE-и ҳамин боб ин ба ElasticNet-и Scikit-Learn мувофиқ нест; функсияи ҳадафи он ба шакли болоӣ, бе m, баробар аст.

Кадомашро кай истифода мебаред: Elastic Net, Ridge, Lasso ё регрессияи бе ҷарима? Қариб ҳамеша каме мунтазамсозӣ беҳтар аст, пас одатан аз регрессияи комилан бе ҷарима худдорӣ кунед. Ridge интихоби хуби пешфарз аст. Аммо агар гумон кунед танҳо чанд хусусият муфиданд, Lasso ё Elastic Net афзаланд: вазнҳои хусусиятҳои беҳударо ба сифр мебаранд. Умуман, Elastic Net аз Lasso беҳтар дониста мешавад, зеро Lasso ҳангоми бештар будани хусусиятҳо аз намунаҳо ё ҳамбастагии қавии чанд хусусият метавонад ноустувор рафтор кунад.

Мисоли ElasticNet; l1_ratio ҳамон r аст:

>>> from sklearn.linear_model import ElasticNet
>>> elastic_net = ElasticNet(alpha=0.1, l1_ratio=0.5)
>>> elastic_net.fit(X, y)
>>> elastic_net.predict([[1.5]])
array([1.8645014])

Қатъи барвақт

Роҳи дигари мунтазамсозии алгоритмҳои такроршаванда, мисли GD, қатъ кардани омӯзиш баробари ба минимум расидани хатои тасдиқӣ мебошад. Ин усули маъмул қатъи барвақт (early stopping) ном дорад.

Расми 4.21 модели мураккаби бисёрузвагии дараҷаи баландро дар ҳамон додаҳои квадратӣ бо GD-и дастаӣ нишон медиҳад. Бо гузашти эпохаҳо ҳам RMSE-и омӯзишӣ ва ҳам тасдиқӣ паст мешаванд. Аммо баъд хатои тасдиқӣ камшавиро бас карда, боло меравад: модел аз ҳад мутобиқ шудан гирифтааст. Дар early stopping баробари ба минимум расидан омӯзишро қатъ мекунед. Ин усул чунон сода ва самаранок аст, ки Ҷеффри Ҳинтон онро «хӯроки бепули зебо» номидааст. Аммо баъзан хатои тасдиқӣ баъд аз муддате боз паст мешавад: коҳиши дубора (double descent). Ин дар шабакаҳои бузурги нейронӣ нисбатан маъмул ва мавзуи таҳқиқоти фаъол аст.

Қатъи барвақт

Расми 4.21. Мунтазамсозӣ бо қатъи барвақт.

Маслиҳат. Барои SGD ва GD-и минидастаӣ каҷҳо ҳамвор нестанд ва фаҳмидани расидан ба минимум душвор аст. Як роҳ ин аст, ки танҳо баъди муддате аз беҳтарин қимат болотар мондани хатои тасдиқӣ, вақте ба беҳтар нашудани минбаъда бовар доред, қатъ кунед. Баъд параметрҳоро ба ҳолати дорои хатои камтарин баргардонед.

Татбиқи сода:

from copy import deepcopy
from sklearn.metrics import root_mean_squared_error
from sklearn.preprocessing import StandardScaler

rng = np.random.default_rng(seed=42)  # the same quadratic dataset as earlier
m = 200
X = 6 * rng.random((m, 1)) - 3
y = 0.5 * X ** 2 + X + 2 + rng.standard_normal((m, 1))
X_train, y_train = X[: m // 2], y[: m // 2, 0]
X_valid, y_valid = X[m // 2 :], y[m // 2 :, 0]

preprocessing = make_pipeline(PolynomialFeatures(degree=90, include_bias=False),
                              StandardScaler())
X_train_prep = preprocessing.fit_transform(X_train)
X_valid_prep = preprocessing.transform(X_valid)
sgd_reg = SGDRegressor(penalty=None, eta0=0.002, random_state=42)
n_epochs = 500
best_valid_rmse = float('inf')

for epoch in range(n_epochs):
    sgd_reg.partial_fit(X_train_prep, y_train)
    y_valid_predict = sgd_reg.predict(X_valid_prep)
    val_error = root_mean_squared_error(y_valid, y_valid_predict)
    if val_error < best_valid_rmse:
        best_valid_rmse = val_error
        best_model = deepcopy(sgd_reg)

Рамз аввал додаҳои квадратии пешинаро аз нав месозад ва нисфи онҳоро ба маҷмӯи омӯзишӣ, нисфи дигарро ба маҷмӯи тасдиқӣ ҷудо мекунад. Сипас хусусиятҳои бисёрузвагӣ илова карда шуда, вурудҳои ҳар ду маҷмӯа миқёсбандӣ мешаванд. Баъд SGDRegressor-и бе ҷарима бо суръати паст сохта мешавад. Дар ҳалқа ба ҷойи fit() аз partial_fit() барои омӯзиши тадриҷӣ истифода мебарад. Ҳар эпоха RMSE-и тасдиқиро чен мекунад. Агар аз беҳтарин натиҷаи пешина пасттар бошад, нусхаи моделро дар best_model нигоҳ медорад.

Ин татбиқ дар асл омӯзишро қатъ намекунад, аммо имкон медиҳад баъд ба беҳтарин модел баргардед. copy.deepcopy() ҳам гиперпараметрҳо ва ҳам параметрҳои омӯхташударо нусхабардорӣ мекунад. sklearn.base.clone() бошад, танҳо гиперпараметрҳоро мегирад.

Регрессияи логистикӣ

Дар боби 1 гуфтем, ки баъзе алгоритмҳои регрессия барои таснифбандӣ низ истифода мешаванд ва баръакс. Регрессияи логистикӣ, ки регрессияи logit низ ном дорад, одатан эҳтимоли мансубияти намуна ба синфи муайянро тахмин мекунад. Масалан, эҳтимоли спам будани ин нома чӣ қадар аст? Агар эҳтимол аз ҳадди додашуда, одатан 50 фоиз, баланд бошад, модел намунаи мазкурро ба синфи мусбат бо барчаспи 1 мансуб медонад. Вагарна ба синфи манфӣ бо барчаспи 0 нисбат медиҳад. Пас он таснифгари дуӣ аст.

Тахмини эҳтимолҳо

Модели логистикӣ мисли модели хаттӣ ҷамъи вазндори хусусиятҳо ва узви озодро ҳисоб мекунад. Аммо ба ҷойи бевосита баровардани натиҷа, функсияи логистикӣ-и онро мебарорад.

Муодилаи 4.14. Эҳтимоли тахминии модели логистикӣ дар шакли векторӣ.

p̂ = h_θ(x) = σ(θᵀx).

Функсияи логистикии σ(·) сигмоидӣ, яъне S-шакл, аст ва адади байни 0 ва 1 медиҳад.

Муодилаи 4.15. Функсияи логистикӣ.

σ(t) = 1 / (1 + exp(−t)).

Функсияи логистикӣ

Расми 4.22. Функсияи логистикӣ.

Пас аз тахмини эҳтимоли p̂ = h_θ(x)-и ба синфи мусбат мансуб будани x, пешгӯии ŷ осон аст.

Муодилаи 4.16. Пешгӯии модели логистикӣ бо ҳадди эҳтимоли 50-фоиза.

    ⎧ 0   p̂ < 0.5,
ŷ = ⎨
    ⎩ 1   p̂ ≥ 0.5.

Барои t < 0 дорем σ(t) < 0,5 ва барои t ≥ 0 дорем σ(t) ≥ 0,5. Пас бо ҳадди пешфарзи 50 фоиз модел барои θᵀx-и ғайриманфӣ 1 ва барои манфӣ 0 пешгӯӣ мекунад.

Эзоҳ. Баҳои t-ро аксар вақт logit мегӯянд, зеро функсияи logit(p) = log(p/(1 − p)) баръакси функсияи логистикӣ аст. Агар logit-и эҳтимоли тахминиро ҳисоб кунед, t мегиред. Он логарифми таносуби имконҳо (log-odds) низ ном дорад: логарифми таносуби эҳтимоли синфи мусбат ба эҳтимоли синфи манфӣ.

Омӯзиш ва функсияи хароҷот

Акнун медонед, ки модел эҳтимолро чӣ гуна тахмин ва пешгӯӣ мекунад. Аммо чӣ гуна меомӯзад? Ҳадаф муайян кардани θ аст, то барои намунаҳои мусбат — y = 1 — эҳтимоли баланд ва барои манфӣ — y = 0 — эҳтимоли паст диҳад. Хароҷоти як намуна ин андешаро ифода мекунад.

Муодилаи 4.17. Хароҷоти як намунаи омӯзишӣ.

       ⎧ −log(p̂)       y = 1,
c(θ) = ⎨
       ⎩ −log(1 − p̂)   y = 0.

Вақте t ба 0 наздик мешавад, −log(t) хеле калон мегардад. Пас агар модел барои намунаи мусбат эҳтимоли наздик ба 0 ё барои манфӣ эҳтимоли наздик ба 1 диҳад, хароҷот калон мешавад. Вақте t ба 1 наздик аст, −log(t) ба 0 наздик мешавад. Пас эҳтимоли паст барои манфӣ ва баланд барои мусбат хароҷоти наздик ба сифр медиҳад: маҳз ҳадафи мост.

Хароҷоти тамоми маҷмӯа миёнаи хароҷоти ҳамаи намунаҳост. Онро бо як ифода, талафоти логарифмӣ (log loss), менависем.

Муодилаи 4.18. Функсияи хароҷоти регрессияи логистикӣ.

J(θ) = −(1 / m) · Σᵢ₌₁ᵐ [y⁽ⁱ⁾ log p̂⁽ⁱ⁾ + (1 − y⁽ⁱ⁾) log(1 − p̂⁽ⁱ⁾)].

Огоҳӣ. Талафоти логарифмӣ худсарона интихоб нашудааст. Бо истинботи байесӣ нишон додан мумкин аст, ки агар намунаҳо дар атрофи миёнаи синфи худ тақсимоти гауссӣ дошта бошанд, кам кардани ин талафот модели эҳтимолияти ҳадди аксар медиҳад. Ҳангоми истифодаи он чунин фарзияи пинҳонӣ гузошта мешавад; ҳар қадар фарзия нодурусттар бошад, модел ғаразноктар мешавад. Ҳамин тавр, ҳангоми истифодаи MSE барои регрессияи хаттӣ фарз кардем, ки додаҳо хаттии холис бо ғавғои гауссӣ мебошанд. Агар додаҳо, масалан, квадратӣ бошанд ё ғавғо ғайригауссӣ бошад, масалан қиматҳои дур ба таври экспоненсиалӣ камёб набошанд, модел ғаразнок мешавад.

Хабари бад: барои θ-и камтаринкунандаи ин функсия ҳалли мустақими маълуми монанди муодилаи нормалӣ нест. Хабари хуб: функсия барҷаста аст, пас GD ё алгоритми дигари беҳинасозӣ бо суръати на аз ҳад баланд ва вақти кофӣ минимуми глобалиро меёбад. Ҳосилаи ҷузъӣ нисбат ба θⱼ чунин аст.

Муодилаи 4.19. Ҳосилаҳои ҷузъии хароҷоти логистикӣ.

∂J(θ) / ∂θⱼ = (1 / m) · Σᵢ₌₁ᵐ [σ(θᵀx⁽ⁱ⁾) − y⁽ⁱ⁾] · xⱼ⁽ⁱ⁾.

Ин ба муодилаи 4.6 монанд аст: барои ҳар намуна хато ҳисоб шуда, ба хусусияти j-ум зарб мешавад ва баъд миёна гирифта мешавад. Вектори ҳамаи ҳосилаҳоро дар GD-и дастаӣ истифода мебаред. Ҳамин: тарзи омӯзонидани регрессияи логистикиро медонед. Барои SGD як намуна ва барои GD-и минидастаӣ як минидаста мегиред.

Марзҳои қарор

Барои мисол маҷмӯи машҳури iris-ро истифода мебарем. Он дарозӣ ва паҳноии косабарг ва гулбарги 150 гули се намудро дорад: Iris setosa, Iris versicolor ва Iris virginica (расми 4.23).

Се намуди iris

Расми 4.23. Гулҳои се намуди iris. Аксҳо: Radomil (CC BY-SA 3.0), Danielle Langlois (CC BY-SA 3.0), Frank Mayfield (CC BY-SA 2.0), Wikimedia Commons.

Кӯшиш мекунем танҳо бо паҳноии гулбарг Iris virginica-ро ошкор кунем. Аввал додаҳоро бор карда, кӯтоҳ мебинем:

>>> from sklearn.datasets import load_iris
>>> iris = load_iris(as_frame=True)
>>> list(iris)
['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names',
 'filename', 'data_module']
>>> iris.data.head(3)
   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
0                5.1               3.5                1.4               0.2
1                4.9               3.0                1.4               0.2
2                4.7               3.2                1.3               0.2
>>> iris.target.head(3)  # note that the instances are not shuffled
0    0
1    0
2    0
Name: target, dtype: int64
>>> iris.target_names
array(['setosa', 'versicolor', 'virginica'], dtype='<U10')

Баъд додаҳоро тақсим карда, моделро бо маҷмӯи омӯзишӣ меомӯзонем:

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

X = iris.data[["petal width (cm)"]].values
y = iris.target_names[iris.target] == 'virginica'
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

log_reg = LogisticRegression(random_state=42)
log_reg.fit(X_train, y_train)

Эҳтимолҳои тахминиро барои паҳноии аз 0 то 3 сантиметр мебинем (расми 4.24):

X_new = np.linspace(0, 3, 1000).reshape(-1, 1)  # reshape to get a column vector
y_proba = log_reg.predict_proba(X_new)
decision_boundary = X_new[y_proba[:, 1] >= 0.5][0, 0]

plt.plot(X_new, y_proba[:, 0], "b--", linewidth=2,
         label="Not Iris virginica proba")
plt.plot(X_new, y_proba[:, 1], "g-", linewidth=2, label="Iris virginica proba")
plt.plot([decision_boundary, decision_boundary], [0, 1], "k:", linewidth=2,
         label="Decision boundary")
[...] # beautify the figure: add grid, labels, axis, legend, arrows, and samples
plt.show()

Эҳтимолҳо ва марзи қарор

Расми 4.24. Эҳтимолҳои тахминӣ ва марзи қарор.

Паҳноии гулбарги Iris virginica, ки секунҷаҳо нишон медиҳанд, аз 1,4 то 2,5 см аст. Намудҳои дигар, ки чоркунҷаҳо нишон медиҳанд, одатан аз 0,1 то 1,8 см доранд. Фосилаҳо каме ҳамдигарро мепӯшонанд. Аз тақрибан 2 см боло модел ба virginica будан боварии баланд дорад ва эҳтимоли баланд медиҳад. Аз 1 см поён ба ғайри-virginica будан бовар дорад. Дар миёна нобовар аст.

Аммо агар ба ҷойи predict_proba() аз predict() синф пурсед, синфи эҳтимолаш бештарро медиҳад. Аз ҳамин сабаб наздики 1,6 см марзи қарор ҳаст, ки дар он ҳар ду эҳтимол 50 фоизанд. Агар паҳноӣ аз марз зиёд бошад, virginica мегӯяд; вагарна ғайри-virginica, ҳатто бо боварии паст:

>>> decision_boundary
np.float64(1.6516516516516517)
>>> log_reg.predict([[1.7], [1.5]])
array([ True, False])

Расми 4.25 ҳамон додаҳоро бо ду хусусият — паҳноӣ ва дарозии гулбарг — нишон медиҳад. Модели омӯзонидашуда аз рӯйи ҳар ду эҳтимоли virginica будани гули навро тахмин мекунад. Хати канда-канда нуқтаҳои эҳтимолашон 50-фоизаро нишон медиҳад: марзи қарор аст. Он хаттӣ мебошад. Ҳар хати мувозӣ нуқтаҳои эҳтимоли муайянро аз 15 фоиз дар поёни чап то 90 фоиз дар болои рост нишон медиҳад. Аз хати болои рост болотар, аз назари модел, эҳтимоли virginica бештар аз 90 фоиз аст.

Марзи хаттии қарор

Расми 4.25. Марзи хаттии қарор.

Эзоҳ. Дар LogisticRegression шиддати мунтазамсозиро мисли моделҳои дигари хаттӣ alpha не, балки бузургии баръакси он — C — идора мекунад. C ҳар қадар калон бошад, мунтазамсозӣ камтар аст.

Мисли моделҳои дигари хаттӣ регрессияи логистикиро бо ҷаримаҳои ℓ₁ ё ℓ₂ мунтазамсозӣ кардан мумкин аст. Scikit-Learn пешфарз ℓ₂ илова мекунад.

Регрессияи Softmax

Регрессияи логистикиро метавон ба чанд синф мустақиман умумӣ кард, бе омӯзонидану якҷо кардани таснифгарҳои зиёди дуӣ, ки дар боби 3 дидем. Ин регрессияи softmax ё регрессияи логистикии чандномӣ (multinomial logistic regression) ном дорад.

Андеша сода аст: барои x модел аввал ба ҳар синфи k баҳои sₖ(x) медиҳад, баъд ба баҳоҳо функсияи softmax, ки экспонентаи нормализатсияшуда низ ном дорад, татбиқ карда, эҳтимоли ҳар синфро мегирад. Формулаи баҳо ба пешгӯии регрессияи хаттӣ монанд аст.

Муодилаи 4.20. Баҳои softmax барои синфи k.

sₖ(x) = (θ⁽ᵏ⁾)ᵀx.

Ҳар синф вектори махсуси θ⁽ᵏ⁾ дорад. Онҳоро одатан ҳамчун сатрҳои матритсаи параметрҳои Θ нигоҳ медоранд.

Баъди ҳисоб кардани ҳамаи баҳоҳо барои x, softmax эҳтимоли p̂ₖ-и мансубият ба синфи k-ро медиҳад. Аввал экспонентаи ҳар баҳо ҳисоб мешавад, баъд ба ҷамъи ҳамаи экспонентаҳо тақсим мегардад. Баҳоҳоро одатан logit ё log-odds мегӯянд, ҳарчанд дар ин ҷо логарифмҳои ҳанӯз нормализатсиянашудаанд.

Муодилаи 4.21. Функсияи softmax.

p̂ₖ = σ(s(x))ₖ = exp(sₖ(x)) / Σⱼ₌₁ᴷ exp(sⱼ(x)).

K шумораи синфҳо, s(x) вектори баҳои ҳамаи синфҳо ва σ(s(x))ₖ эҳтимоли тахминии синфи k аз рӯйи ин баҳоҳост.

Мисли таснифгари логистикӣ softmax пешфарз синфи дорои эҳтимоли баландтарин, яъне баҳои баландтаринро интихоб мекунад.

Муодилаи 4.22. Пешгӯии таснифгари softmax.

ŷ = argmaxₖ σ(s(x))ₖ = argmaxₖ sₖ(x) = argmaxₖ (θ⁽ᵏ⁾)ᵀx.

argmax қимати тағйирёбандаеро медиҳад, ки функсияро калонтарин мекунад. Дар ин ҷо он k-и дорои эҳтимоли бештарро бармегардонад.

Маслиҳат. Softmax ҳар бор танҳо як синф пешгӯӣ мекунад: чандсинфӣ аст, на чандбаромада. Пас танҳо барои синфҳои ҳамдигарро истиснокунанда, мисли намудҳои гуногуни растанӣ, истифода баред. Барои шинохтани якчанд нафар дар як акс мувофиқ нест.

Акнун омӯзишро мебинем. Ҳадаф эҳтимоли баланд барои синфи дуруст ва, дар натиҷа, паст барои дигарон аст. Кам кардани энтропияи салибӣ (cross entropy) ба ин мерасонад, зеро барои эҳтимоли пасти синфи дуруст моделро ҷазо медиҳад. Он аксар вақт мувофиқати эҳтимолҳои тахминиро бо синфҳои ҳадаф чен мекунад.

Муодилаи 4.23. Функсияи хароҷоти энтропияи салибӣ.

J(Θ) = −(1 / m) · Σᵢ₌₁ᵐ Σₖ₌₁ᴷ yₖ⁽ⁱ⁾ log p̂ₖ⁽ⁱ⁾.

yₖ⁽ⁱ⁾ эҳтимоли ҳадафии мансубияти намунаи i ба синфи k аст. Одатан 1 ё 0 мебошад, вобаста ба мансуб будан ё набудан.

Агар танҳо ду синф бошад, K = 2, ин функсия ба талафоти логарифмии регрессияи логистикӣ баробар мешавад (муодилаи 4.18).

Энтропияи салибӣ

Ин мафҳум аз назарияи иттилооти Клод Шеннон пайдо шудааст. Фарз кунед мехоҳед ҳар рӯз маълумоти обуҳаворо самаранок фиристед. Агар ҳашт ҳолат — офтобӣ, боронӣ ва ғайра — бошад, ҳар кадомро бо 3 бит рамзгузорӣ мекунед, зеро 2³ = 8. Аммо агар гумон кунед қариб ҳар рӯз офтобӣ аст, барои «офтобӣ» як бит — 0 — ва барои ҳафт ҳолати дигар чор бит, ки бо 1 оғоз мешаванд, самараноктар аст.

Энтропияи салибӣ шумораи миёнаи битҳоеро чен мекунад, ки воқеан барои ҳар ҳолат мефиристед. Агар фарзияи шумо комил бошад, он ба энтропияи худи обуҳаво, яъне пешгӯинашавандагии дарунии он, баробар мешавад. Агар фарзия нодуруст бошад, масалан борон бисёр борад, он ба андозаи дуршавии Куллбак–Лейблер (KL divergence) бештар мешавад.

Барои ду тақсимоти эҳтимолияти дискретии p ва q:

H(p, q) = −Σₓ p(x) log q(x).

Барои тафсилоти бештар видеои Орелиен Жерон «A Short Introduction to Entropy, Cross-Entropy and KL-Divergence»-ро бинед.

Вектори градиенти ин хароҷот нисбат ба θ⁽ᵏ⁾ чунин аст.

Муодилаи 4.24. Градиенти энтропияи салибӣ барои синфи k.

∇_(θ⁽ᵏ⁾) J(Θ) = (1 / m) · Σᵢ₌₁ᵐ (p̂ₖ⁽ⁱ⁾ − yₖ⁽ⁱ⁾) x⁽ⁱ⁾.

Акнун градиенти ҳар синфро ҳисоб карда, бо GD ё алгоритми дигар матритсаи Θ-и камтаринкунандаи хароҷотро меёбед.

Бо softmax гулҳои iris-ро ба ҳар се синф тасниф мекунем. LogisticRegression-и Scikit-Learn ҳангоми бештар аз ду синф ва истифодаи solver="lbfgs", ки пешфарз аст, худкор softmax мегирад. Ҳамчунин пешфарз ℓ₂ дорад, ки бо C идора мешавад: барои мунтазамсозии бештар C-ро кам кунед.

X = iris.data[["petal length (cm)", "petal width (cm)"]].values
y = iris["target"]
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

softmax_reg = LogisticRegression(C=30, random_state=42)
softmax_reg.fit(X_train, y_train)

Пас агар гулбарги гуле 5 см дарозӣ ва 2 см паҳноӣ дошта бошад, модел онро бо эҳтимоли 96 фоиз Iris virginica — синфи 2 ва бо 4 фоиз Iris versicolor мешуморад:

>>> softmax_reg.predict([[5, 2]])
array([2])
>>> softmax_reg.predict_proba([[5, 2]]).round(2)
array([[0.  , 0.04, 0.96]])

Расми 4.26 марзҳои қарорро бо рангҳои пасманзар нишон медиҳад. Марзи ҳар ду синф хаттӣ аст. Хатҳои каҷ эҳтимоли Iris versicolor-ро нишон медиҳанд: масалан, хати 0,30 марзи эҳтимоли 30-фоиза аст. Модел метавонад синферо интихоб кунад, ки эҳтимолаш аз 50 фоиз ҳам пасттар аст. Масалан, дар нуқтаи вохӯрии ҳамаи марзҳо эҳтимоли ҳар се синф баробар, тақрибан 33 фоиз, мебошад.

Марзҳои қарори softmax

Расми 4.26. Марзҳои қарори регрессияи softmax.

Дар ин боб роҳҳои гуногуни омӯзонидани моделҳои хаттиро барои регрессия ва таснифбандӣ омӯхтед. Барои регрессияи хаттӣ ҳам ҳалли мустақим ва ҳам GD-ро истифода бурдед ва фаҳмидед, ки чӣ гуна бо иловаи ҷаримаҳо ба функсияи хароҷот моделро мунтазамсозӣ мекунанд. Ҳамчунин кашидану таҳлил кардани каҷҳои омӯзиш ва татбиқи қатъи барвақтро омӯхтед. Ниҳоят, кори регрессияи логистикӣ ва softmax-ро фаҳмидед. Аввалин «қуттиҳои сиёҳ»-и омӯзиши мошиниро кушодем! Дар бобҳои оянда боз бисёри дигарро, аз дарахтҳои қарор сар карда, мекушоем.

пешина
аз 20
навбатӣ