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

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

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

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

Боби 8. Усулҳои омӯзиши беназорат

Ян Лекун, барандаи ҷоизаи Тюринг ва сармуҳаққиқи зеҳни сунъии Meta, дар суханронии машҳури худ гуфта буд:

«Агар зеҳнро торт тасаввур кунем, омӯзиши беназорат худи торт, омӯзиши назоратшаванда рӯйпӯши ширини он ва омӯзиши тақвиятӣ гелоси болои торт мебуд».
— NeurIPS, соли 2016

Ба ибораи дигар, омӯзиши беназорат имкониятҳои азиме дорад, ки мо ҳанӯз танҳо ба истифодаи онҳо оғоз кардаем. Дар ҳақиқат, қисми асосии додаҳои дастрас бебарчасп мебошанд: хусусиятҳои вурудии X-ро дорем, аммо барчаспҳои y-ро надорем.

Фарз кунед, ки мехоҳед системае созед, ки аз ҳар маҳсулот дар хати истеҳсолӣ чанд акс гирифта, маҳсулоти нуқсондорро муайян кунад. Сохтани системаи аксбардории худкор нисбатан осон аст ва он метавонад ҳар рӯз ҳазорон акс ҷамъ оварад. Ҳамин тавр, дар давоми чанд ҳафта маҷмӯи нисбатан калони додаҳо месозед.

Аммо як мушкил ҳаст: барчаспҳо вуҷуд надоранд!

Агар хоҳед таснифгари муқаррарии дусинфӣ омӯзонед, ки нуқсондор ё солим будани маҳсулотро пешгӯӣ кунад, бояд ба ҳар акс барчаспи «нуқсондор» ё «солим» диҳед. Одатан барои ин мутахассисон бояд ҳамаи аксҳоро як-як дастӣ аз назар гузаронанд.

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

Ғайр аз ин, ҳар боре ки ширкат ба маҳсулоти худ тағйирот ворид мекунад, тамоми равандро аз нав оғоз кардан лозим меояд.

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

Дар боби 7 вазифаи маъмултарини омӯзиши беназорат — коҳиши андозанокиро — баррасӣ кардем. Дар ин боб чанд вазифаи дигари беназоратро меомӯзем.

Кластербандӣ

Ҳадаф муттаҳид кардани намунаҳои монанд ба гурӯҳҳо ё кластерҳо мебошад. Кластербандӣ барои таҳлили додаҳо, гурӯҳбандии муштариён, системаҳои тавсиядиҳӣ, муҳаррикҳои ҷустуҷӯ, сегментатсияи тасвир, омӯзиши ниманазоратшаванда, коҳиши андозанокӣ ва бисёр вазифаҳои дигар воситаи хуб аст.

Муайян кардани аномалияҳо — ҳолатҳои ғайримуқаррарӣ

Ин вазифаро ҳамчунин ошкор кардани нуқтаҳои дурмонда (outlier detection) меноманд. Ҳадаф омӯхтани он аст, ки додаҳои «муқаррарӣ» чӣ гунаанд, то баъд намунаҳои ғайримуқаррариро муайян кунем.

Намунаҳои ғайримуқаррариро аномалияҳо ё нуқтаҳои дурмонда — outliers, намунаҳои муқаррариро бошад, нуқтаҳои дохилӣ — inliers меноманд.

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

Баҳогузории зичӣ

Ин вазифа аз баҳогузории функсияи зичии эҳтимолият — PDF (probability density function)-и раванди тасодуфие иборат аст, ки маҷмӯи додаҳоро тавлид кардааст.

Баҳогузории зичӣ аксаран барои ошкор кардани аномалияҳо истифода мешавад: намунаҳое, ки дар минтақаҳои хеле камзич ҷойгиранд, эҳтимол аномалия мебошанд. Ин равиш барои таҳлил ва тасвирсозии додаҳо низ муфид аст.

Барои чашидани торт омодаед? Аввал ду алгоритми кластербандӣ — k-means ва DBSCAN-ро меомӯзем. Сипас моделҳои омехтаи гауссиро баррасӣ карда, мебинем, ки онҳоро барои баҳогузории зичӣ, кластербандӣ ва ошкор кардани аномалияҳо чӣ гуна истифода бурдан мумкин аст.

Алгоритмҳои кластербандӣ: k-means ва DBSCAN

Ҳангоми сайругашт дар кӯҳҳо ногаҳон растаниеро мебинед, ки пештар надида будед. Ба атроф нигоҳ карда, боз чанд растании монанд пайдо мекунед.

Онҳо комилан якхела нестанд, аммо ба қадри кофӣ монанданд, то фаҳмед, ки эҳтимол ба як намуд ё ҳадди ақал ба як ҷинс тааллуқ доранд.

Барои муайян кардани номи намуд шояд ба гиёҳшинос ниёз дошта бошед, аммо барои шинохтани гурӯҳи ашёи зоҳиран монанд мутахассис лозим нест.

Ин кластербандӣ ном дорад: муайян кардани намунаҳои монанд ва ба кластерҳо, яъне гурӯҳҳои намунаҳои монанд, ҷудо кардани онҳо.

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

Расми 8.1-ро ба назар гиред. Дар тарафи чап маҷмӯи iris, ки дар боби 4 шинос шудем, нишон дода шудааст. Намуди ҳар гул, яъне синфи он, бо аломати гуногун ифода шудааст.

Ин маҷмӯи барчаспдор аст ва алгоритмҳои таснифбандӣ, масалан, регрессияи логистикӣ, SVM ё ҷангали тасодуфӣ, барои он мувофиқанд.

Дар тарафи рост ҳамон маҷмӯа, вале бе барчаспҳо нишон дода шудааст. Аз ин рӯ, дигар алгоритми таснифбандиро истифода бурда наметавонед.

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

Бо вуҷуди ин, маҷмӯа ду хусусияти иловагӣ — дарозӣ ва паҳнои косабарг — дорад, ки дар ин тасвир нишон дода нашудаанд. Алгоритмҳои кластербандӣ метавонанд аз ҳамаи хусусиятҳо истифода баранд ва дар амал се кластерро нисбатан хуб муайян мекунанд. Масалан, бо модели омехтаи гауссӣ аз 150 намуна танҳо 5-тояш ба кластери нодуруст нисбат дода мешавад.

Таснифбандӣ ва кластербандӣ

Расми 8.1. Таснифбандӣ дар чап ва кластербандӣ дар рост: дар кластербандӣ додаҳо бебарчаспанд ва алгоритм бояд гурӯҳҳоро бе роҳнамоӣ муайян кунад.

Кластербандӣ дар барномаҳои гуногун истифода мешавад.

Гурӯҳбандии муштариён

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

Масалан, дар системаи тавсиядиҳӣ метавонед ба корбар маводеро пешниҳод кунед, ки ба дигар корбарони ҳамон кластер писанд омадааст.

Таҳлили додаҳо

Ҳангоми таҳлили маҷмӯи нави додаҳо метавонад муфид бошад, ки аввал алгоритми кластербандиро иҷро карда, баъд ҳар кластерро алоҳида таҳлил кунед.

Коҳиши андозанокӣ

Пас аз кластербандӣ одатан метавон дараҷаи наздикии ҳар намунаро ба ҳар кластер чен кард. Наздикӣ ё affinity ҳар меъёрест, ки нишон медиҳад намуна то чӣ андоза ба кластер мувофиқ аст.

Сипас вектори хусусиятҳои x-и ҳар намунаро бо вектори наздикиҳои он ба кластерҳо иваз кардан мумкин аст.

Агар k кластер дошта бошем, ин вектор k-андоза мешавад. Вектори нав одатан аз вектори аслӣ хеле камандозатар аст, вале метавонад барои коркарди минбаъда маълумоти кофиро нигоҳ дорад.

Муҳандисии хусусиятҳо

Дараҷаҳои наздикӣ ба кластерҳо аксаран ҳамчун хусусиятҳои иловагӣ муфиданд.

Масалан, дар боби 2 аз k-means истифода бурдем, то ба маҷмӯи манзилҳои Калифорния хусусиятҳои наздикӣ ба кластерҳои ҷуғрофиро илова кунем. Онҳо самаранокии моделро беҳтар карданд.

Ошкор кардани аномалияҳо

Ҳар намунае, ки ба ҳамаи кластерҳо наздикии кам дорад, эҳтимол аномалия аст.

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

Омӯзиши ниманазоратшаванда

Агар танҳо чанд барчасп дошта бошед, метавонед кластербандӣ карда, барчаспҳоро ба ҳамаи намунаҳои ҳамон кластер паҳн кунед.

Ин равиш шумораи барчаспҳои дастрасро барои алгоритми минбаъдаи омӯзиши назоратшаванда хеле зиёд карда, самаранокии онро беҳтар карда метавонад.

Муҳаррикҳои ҷустуҷӯ

Баъзе муҳаррикҳои ҷустуҷӯ имкон медиҳанд тасвирҳои ба як тасвири намунавӣ монандро ҷустуҷӯ кунед.

Барои сохтани чунин система аввал ҳамаи тасвирҳои пойгоҳи додаҳоро кластербандӣ мекунед. Тасвирҳои монанд ба як кластер меафтанд.

Вақте корбар тасвири намунавӣ медиҳад, бо модели омӯзонидашуда кластери онро меёбед ва сипас ҳамаи тасвирҳои ҳамин кластерро бармегардонед.

Сегментатсияи тасвир

Пикселҳоро аз рӯйи ранг кластербандӣ карда, сипас ранги ҳар пикселро бо ранги миёнаи кластери он иваз кардан мумкин аст. Бо ин роҳ шумораи рангҳои гуногуни тасвир хеле кам мешавад.

Сегментатсияи тасвир дар бисёр системаҳои ошкоркунӣ ва пайгирии объектҳо истифода мешавад, зеро муайян кардани ҳудуди ҳар объектро осон мекунад.

Таърифи ягонаи универсалии кластер вуҷуд надорад. Он аз заминаи масъала вобаста аст ва алгоритмҳои гуногун навъҳои гуногуни кластерҳоро меёбанд.

Баъзе алгоритмҳо намунаҳоеро меҷӯянд, ки дар атрофи нуқтаи муайяне — сентроид, ё маркази кластер — ҷойгиранд.

Алгоритмҳои дигар минтақаҳои пайвастаи дорои зичии баланди намунаҳоро меҷӯянд. Чунин кластерҳо метавонанд ҳар гуна шакл дошта бошанд.

Баъзе алгоритмҳо иерархӣ буда, кластерҳои иборат аз кластерҳоро месозанд. Равишҳои дигар низ мавҷуданд.

Дар ин бахш ду алгоритми маъмул — k-means ва DBSCAN — ва баъзе истифодаҳои онҳо, аз ҷумла коҳиши ғайрихаттии андозанокӣ, омӯзиши ниманазоратшаванда ва ошкор кардани аномалияҳоро баррасӣ мекунем.

Кластербандӣ бо k-means

Маҷмӯи бебарчаспи расми 8.2-ро ба назар гиред: панҷ тӯдаи намунаҳоро равшан дидан мумкин аст.

Алгоритми k-means алгоритми содаест, ки чунин додаҳоро хеле зуд ва самаранок, аксаран танҳо дар чанд такрор, кластербандӣ мекунад.

Онро Стюарт Ллойд соли 1957 дар Bell Labs ҳамчун усули модулятсияи импулсӣ-кодӣ пешниҳод карда буд. Аммо алгоритм танҳо соли 1982 берун аз ширкат нашр шуд.

Соли 1965 Эдвард У. Форҷӣ алгоритми қариб якхеларо нашр карда буд. Аз ин рӯ, k-means-ро баъзан алгоритми Ллойд–Форҷӣ низ меноманд.

Маҷмӯи бебарчасп аз панҷ тӯдаи намунаҳо

Расми 8.2. Маҷмӯи бебарчасп аз панҷ тӯдаи намунаҳо.

Биёед модели кластербандии k-means-ро дар ин додаҳо омӯзонем. Он мекӯшад маркази ҳар тӯдаро ёфта, ҳар намунаро ба тӯдаи наздиктарин нисбат диҳад:

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

X, y = make_blobs([...])  # сохтани тӯдаҳо: y индексҳои кластерҳоро дорад,
                         # аммо онҳоро истифода намебарем;
                         # маҳз ҳаминҳоро мехоҳем пешгӯӣ кунем
k = 5
kmeans = KMeans(n_clusters=k, random_state=43)
y_pred = kmeans.fit_predict(X)

Аҳаммият диҳед, ки бояд шумораи кластерҳо k-ро, ки алгоритм бояд ёбад, пешакӣ муайян кунед.

Дар ин мисол аз рӯйи намуди додаҳо равшан аст, ки k=5 бояд бошад. Аммо дар ҳолати умумӣ ин қадар осон нест. Каме баъдтар ин масъаларо баррасӣ мекунем.

Ҳар намуна ба яке аз панҷ кластер нисбат дода мешавад.

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

Объекти KMeans барчаспҳои пешгӯишудаи намунаҳои омӯзиширо дар атрибути labels_ нигоҳ медорад:

>>> y_pred
array([4, 0, 1, ..., 2, 1, 0], dtype=int32)
>>> y_pred is kmeans.labels_
True

Ҳамчунин панҷ сентроиди ёфтаи алгоритмро дида метавонем:

>>> kmeans.cluster_centers_
array([[-2.80389616,  1.80117999],
       [ 0.20876306,  2.25551336],
       [-2.79290307,  2.79641063],
       [-1.46679593,  2.28585348],
       [-2.80037642,  1.30082566]])

Намунаҳои навро ба осонӣ ба кластере нисбат додан мумкин аст, ки сентроидаш аз ҳама наздиктар аст:

>>> import numpy as np
>>> X_new = np.array([[0, 2], [3, 2], [-3, 3], [-3, 2.5]])
>>> kmeans.predict(X_new)
array([1, 1, 2, 2], dtype=int32)

Агар сарҳадҳои қарори кластерҳоро тасвир кунед, тақсимоти Вороной ҳосил мешавад. Ба расми 8.3 нигаред, ки ҳар сентроид бо аломати ⓧ нишон дода шудааст.

Сарҳадҳои қарори k-means — тақсимоти Вороной

Расми 8.3. Сарҳадҳои қарори k-means — тақсимоти Вороной.

Қисми асосии намунаҳо ба кластерҳои мувофиқ нисбат дода шудаанд. Аммо эҳтимол чанд намуна нодуруст барчасп гирифтаанд, махсусан дар наздикии сарҳади кластери болоии чап ва кластери марказӣ.

Дар ҳақиқат, вақте диаметри тӯдаҳо хеле гуногун аст, k-means чандон хуб кор намекунад. Сабаб он аст, ки ҳангоми ба кластер нисбат додани намуна танҳо масофа то сентроидро ба назар мегирад.

Нисбат додани ҳар намуна ба як кластер кластербандии қатъӣ (hard clustering) ном дорад.

Ба ҷойи ин, баъзан муфид аст, ки барои ҳар намуна нисбат ба ҳар кластер баҳо диҳем. Ин кластербандии нарм (soft clustering) ном дорад.

Баҳо метавонад масофаи байни намуна ва сентроид ё нишондиҳандаи монандӣ бошад. Масалан, метавон аз функсияи асосии радиалии гауссӣ, ки дар боби 2 истифода кардем, истифода бурд.

Дар синфи KMeans методи transform() масофаи ҳар намунаро то ҳар сентроид чен мекунад:

>>> kmeans.transform(X_new).round(2)
array([[2.81, 0.33, 2.9 , 1.49, 2.89],
       [5.81, 2.8 , 5.85, 4.48, 5.84],
       [1.21, 3.29, 0.29, 1.69, 1.71],
       [0.73, 3.22, 0.36, 1.55, 1.22]])

Дар ин мисол намунаи якуми X_new аз сентроиди якум тақрибан 2.81, аз дуюм 0.33, аз сеюм 2.90, аз чорум 1.49 ва аз панҷум 2.89 воҳид дур аст.

Агар маҷмӯи баландандозаро ҳамин тавр табдил диҳед, маҷмӯи k-андоза мегиред. Ин табдил метавонад усули хеле самараноки коҳиши ғайрихаттии андозанокӣ бошад.

Роҳи дигар ин аст, ки ин масофаҳоро ҳамчун хусусиятҳои иловагӣ барои омӯзонидани модели дигар истифода баред, мисли боби 2.

Алгоритми k-means чӣ гуна кор мекунад?

Фарз кунед, ки сентроидҳо ба шумо дода шудаанд. Дар ин ҳолат ҳамаи намунаҳоро ба осонӣ барчаспгузорӣ мекунед: ҳар намунаро ба кластери дорои сентроиди наздиктарин нисбат медиҳед.

Баръакс, агар барчаспи ҳамаи намунаҳо маълум бошад, сентроиди ҳар кластерро ба осонӣ бо ҳисоб кардани миёнаи намунаҳои он кластер меёбед.

Аммо дар оғоз на барчаспҳо ва на сентроидҳо маълуманд. Пас чӣ бояд кард?

Аввал сентроидҳоро тасодуфан ҷойгир кунед. Масалан, аз маҷмӯи додаҳо k намунаро тасодуфан интихоб карда, мавқеи онҳоро ҳамчун сентроид истифода баред.

Сипас:

  1. Намунаҳоро барчаспгузорӣ кунед.
  2. Сентроидҳоро нав кунед.
  3. Намунаҳоро аз нав барчаспгузорӣ кунед.
  4. Сентроидҳоро боз нав кунед.
  5. То замоне идома диҳед, ки сентроидҳо дигар ҳаракат накунанд.

Кафолат дода мешавад, ки алгоритм дар шумораи маҳдуди қадамҳо, одатан шумораи нисбатан кам, ба ҳамгароӣ мерасад.

Сабаб он аст, ки миёнаи квадрати масофаи байни намунаҳо ва сентроидҳои наздиктарини онҳо дар ҳар қадам танҳо кам шуда метавонад. Азбаски ин қимат манфӣ шуда наметавонад, раванд ба ҳамгароӣ мерасад.

Дар расми 8.4 алгоритмро дар амал мебинед: сентроидҳо тасодуфан ибтидосозӣ мешаванд — боло аз чап; намунаҳо барчасп мегиранд — боло аз рост; сентроидҳо нав мешаванд — миёна аз чап; намунаҳо боз барчаспгузорӣ мешаванд — миёна аз рост; ва ғайра.

Мебинед, ки ҳамагӣ пас аз се такрор алгоритм ба кластербандие мерасад, ки ба натиҷаи оптималӣ наздик менамояд.

Эзоҳ. Мураккабии ҳисоббарории алгоритм одатан нисбат ба шумораи намунаҳо m, шумораи кластерҳо k ва шумораи андозаҳо n хаттӣ аст. Аммо ин танҳо вақте дуруст аст, ки додаҳо сохтори кластерӣ дошта бошанд. Агар чунин сохтор набошад, дар бадтарин ҳолат мураккабӣ метавонад бо шумораи намунаҳо ба таври экспоненсиалӣ зиёд шавад. Дар амал ин хеле кам рух медиҳад ва k-means одатан яке аз тезтарин алгоритмҳои кластербандӣ мебошад.

Алгоритми k-means

Расми 8.4. Алгоритми k-means.

Ҳарчанд ҳамгароии алгоритм кафолат дода мешавад, он ҳатман ба ҳалли дуруст намерасад. Яъне метавонад ба оптимуми маҳаллӣ ҳамгаро шавад. Ин аз ибтидосозии сентроидҳо вобаста аст.

Дар расми 8.5 ду ҳалли ғайриоптималӣ нишон дода шудаанд, ки алгоритм ҳангоми ибтидосозии тасодуфии номуваффақ метавонад ба онҳо расад.

Ҳалҳои ғайриоптималӣ дар натиҷаи ибтидосозии номуваффақи сентроидҳо

Расми 8.5. Ҳалҳои ғайриоптималӣ дар натиҷаи ибтидосозии номуваффақи сентроидҳо.

Биёед чанд роҳи кам кардани ин хавфро бо беҳтар кардани ибтидосозии сентроидҳо баррасӣ кунем.

Усулҳои ибтидосозии сентроидҳо

Агар тақрибан донед, ки сентроидҳо дар куҷо бояд бошанд, масалан, қаблан алгоритми дигари кластербандиро иҷро карда бошед, метавонед ба гиперпараметри init массиви NumPy-и дорои рӯйхати сентроидҳоро диҳед:

good_init = np.array([[-3, 3], [-3, 2], [-3, 1], [-1, 2], [0, 2]])
kmeans = KMeans(n_clusters=5, init=good_init, random_state=42)
kmeans.fit(X)

Роҳи дигар ин аст, ки алгоритмро бо ибтидосозиҳои тасодуфии гуногун чанд бор иҷро карда, беҳтарин натиҷаро нигоҳ доред.

Шумораи ибтидосозиҳои тасодуфиро гиперпараметри n_init муайян мекунад. Ҳангоми init="random" қимати пешфарзи он 10 аст. Яъне вақте fit()-ро даъват мекунед, тамоми алгоритми боло 10 бор иҷро мешавад ва Scikit-Learn беҳтарин натиҷаро нигоҳ медорад.

Аммо он чӣ гуна мефаҳмад, ки кадом натиҷа беҳтарин аст? Бо истифодаи меъёри самаранокӣ!

Ин меъёр инерсияи модел ном дорад ва дар муодилаи 8.1 таъриф шудааст.

Муодилаи 8.1. Инерсияи модел.

инерсия = Σᵢ₌₁ᵐ ‖x⁽ⁱ⁾ − c⁽ⁱ⁾‖²

Дар ин ҷо c⁽ⁱ⁾ сентроиди наздиктарин ба намунаи x⁽ⁱ⁾ аст, ки модел интихоб кардааст: инерсия ҷамъи квадратҳои масофаи ҳар намуна то он мебошад.

Инерсияи модели тарафи чапи расми 8.5 тақрибан 219.6, модели тарафи рост 600.4 ва модели расми 8.3 ҳамагӣ 211.6 аст.

Синфи KMeans алгоритмро n_init бор иҷро карда, модели дорои инерсияи камтаринро нигоҳ медорад.

Дар ин мисол модели расми 8.3 интихоб мешавад, магар ин ки дар ҳамаи ибтидосозиҳои пайдарпай бахт комилан наорад.

Инерсияи модел тавассути inertia_ дастрас аст:

>>> kmeans.inertia_
211.59853725816828

Методи score() қимати манфии инерсияро бармегардонад. Он манфӣ аст, зеро методи score() дар Scikit-Learn бояд ҳамеша қоидаи «қимати калонтар беҳтар аст»-ро риоя кунад:

>>> kmeans.score(X)
-211.59853725816828

Такмили муҳими k-means бо номи k-means++ дар мақолаи соли 2006-и Дэвид Артур ва Сергей Вассилвитский пешниҳод шуд.

Онҳо марҳалаи оқилонатари ибтидосозиро пешниҳод карданд, ки одатан сентроидҳои аз ҳам дурро интихоб мекунад.

Ин тағйир эҳтимоли ёфтани ҳамаи кластерҳои муҳимро зиёд ва эҳтимоли расидан ба ҳалли ғайриоптималиро кам мекунад. Мисли он ки пароканда кардани киштиҳои моҳигирӣ эҳтимоли ёфтани тӯдаҳои бештари моҳиро зиёд мекунад.

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

Алгоритми ибтидосозии k-means++ чунин кор мекунад:

  1. Як сентроиди c⁽¹⁾-ро аз маҷмӯи додаҳо бо эҳтимоли баробар тасодуфан интихоб кунед.
  2. Сентроиди навбатии c⁽ⁱ⁾-ро интихоб кунед: намунаи x⁽ⁱ⁾ бо эҳтимоли D(x⁽ⁱ⁾)² / Σⱼ₌₁ᵐ D(x⁽ʲ⁾)² интихоб мешавад, ки дар он D(x⁽ⁱ⁾) масофаи намунаи x⁽ⁱ⁾ то наздиктарин сентроиди аллакай интихобшуда аст. Ин тақсимоти эҳтимолӣ кафолат медиҳад, ки намунаҳои аз сентроидҳои интихобшуда дуртар эҳтимоли бештари интихоб шудан дошта бошанд.
  3. Қадами пешинаро то интихоби ҳамаи k сентроид такрор кунед.

Ҳангоми init="k-means++", ки қимати пешфарз аст, синфи KMeans дар асл варианти k-means++-и ҳарисона (greedy k-means++)-ро истифода мебарад.

Он ба ҷойи интихоби як номзади сентроид дар ҳар такрор чанд номзадро месанҷад ва беҳтаринашро мегирад. Ҳангоми истифодаи ин алгоритм қимати пешфарзи n_init ба 1 баробар аст.

k-means-и тезондашуда ва k-means бо бастаҳои хурд

Такмили дигари k-means дар мақолаи соли 2003-и Чарлз Элкан пешниҳод шуд.

Дар баъзе маҷмӯаҳои калон бо кластерҳои зиёд алгоритмро бо пешгирӣ кардани ҳисобҳои нолозими масофа тезондан мумкин аст.

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

Аммо алгоритми Элкан на ҳамеша омӯзишро метезонад. Баъзан ҳатто онро хеле суст мекунад — ҳама чиз аз додаҳо вобаста аст. Агар хоҳед онро санҷед, algorithm="elkan" гузоред.

Варианти муҳими дигари k-means дар мақолаи соли 2010-и Дэвид Скалли пешниҳод шуд.

Ба ҷойи истифодаи тамоми маҷмӯи додаҳо дар ҳар такрор, алгоритм метавонад аз бастаҳои хурд — mini-batches истифода барад ва сентроидҳоро дар ҳар такрор танҳо андаке ҷобаҷо кунад.

Ин алгоритмро метезонад ва имкони кластербандии маҷмӯаҳои азимеро медиҳад, ки дар хотира намеғунҷанд.

Scikit-Learn ин алгоритмро дар синфи MiniBatchKMeans татбиқ мекунад. Онро мисли KMeans истифода бурдан мумкин аст:

from sklearn.cluster import MiniBatchKMeans

minibatch_kmeans = MiniBatchKMeans(n_clusters=5, random_state=42)
minibatch_kmeans.fit(X)

Агар додаҳо дар хотира нағунҷанд, роҳи содатарин истифодаи memmap аст, ҳамон тавре ки барои PCA-и афзоянда дар боби 7 истифода кардем.

Роҳи дигар ин аст, ки ҳар бастаи хурдро алоҳида ба partial_fit() диҳед. Аммо ин кори бештар талаб мекунад, зеро бояд чанд ибтидосозиро худатон иҷро карда, беҳтаринашро интихоб кунед.

Ёфтани шумораи оптималии кластерҳо

То ин ҷо k=5 гузоштем, зеро аз намуди додаҳо равшан буд, ки шумораи дурусти кластерҳо ҳамин аст.

Аммо дар ҳолати умумӣ интихоби k ин қадар осон нест. Агар қимати нодуруст интихоб кунед, натиҷа метавонад бад шавад.

Тавре дар расми 8.6 мебинед, барои ин маҷмӯа гузоштани k=3 ё k=8 моделҳои нисбатан бад медиҳад.

Шояд фикр кунед, ки метавон танҳо модели дорои инерсияи камтаринро интихоб кард. Мутаассифона, масъала ин қадар сода нест.

Инерсия барои k=3 тақрибан 653.2 аст, ки аз инерсияи k=5, яъне 211.7, хеле баландтар мебошад. Аммо ҳангоми k=8 инерсия ҳамагӣ 127.1 мешавад.

Инерсия барои интихоби k меъёри хуб нест, зеро бо зиёд шудани k пайваста кам мешавад.

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

Биёед инерсияро ҳамчун функсияи k тасвир кунем. Дар чунин каҷхат аксаран нуқтаи хамише пайдо мешавад, ки онро оринҷ (elbow) меноманд. Ба расми 8.7 нигаред.

Интихоби нодурусти шумораи кластерҳо

Расми 8.6. Интихоби нодурусти шумораи кластерҳо: ҳангоми хурд будани k, кластерҳои ҷудогона якҷо мешаванд — чап; ҳангоми калон будани k, баъзе кластерҳо ба чанд қисм ҷудо мешаванд — рост.

Инерсия ҳамчун функсияи шумораи кластерҳо k

Расми 8.7. Инерсия ҳамчун функсияи шумораи кластерҳо k.

Мебинед, ки бо зиёд кардани k то 4 инерсия хеле зуд кам мешавад. Пас аз он, бо зиёд шудани k, коҳиши он хеле сусттар мегардад.

Каҷхат тақрибан шакли дастро дорад ва «оринҷ» дар k=4 ҷойгир аст.

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

Ин усули интихоби шумораи кластерҳо нисбатан тахминӣ аст.

Равиши дақиқтар, вале аз ҷиҳати ҳисоббарорӣ гаронтар, истифодаи баҳои силуэт (silhouette score) мебошад. Он миёнаи коэффисиенти силуэти ҳамаи намунаҳо аст.

Коэффисиенти силуэти як намуна чунин муайян мешавад:

s = (b − a) / max(a, b),

ки дар он:

  • a — масофаи миёна то намунаҳои дигари ҳамон кластер, яъне масофаи миёнаи дохиликластерӣ;
  • b — масофаи миёна то намунаҳои наздиктарин кластери дигар мебошад. Аз байни ҳамаи кластерҳои дигар он кластер интихоб мешавад, ки ин масофаи миёнаро камтарин мекунад.

Коэффисиенти силуэт аз -1 то +1 тағйир меёбад.

Қимати ба +1 наздик маънои онро дорад, ки намуна дар дохили кластери худ хуб ҷойгир буда, аз кластерҳои дигар дур аст.

Қимати ба 0 наздик нишон медиҳад, ки намуна дар наздикии сарҳади кластерҳо мебошад.

Қимати ба -1 наздик бошад, метавонад нишон диҳад, ки намуна ба кластери нодуруст нисбат дода шудааст.

Барои ҳисоб кардани баҳои силуэт аз функсияи silhouette_score()-и Scikit-Learn истифода баред. Ба он ҳамаи намунаҳо ва барчаспҳои кластерии онҳоро медиҳед:

>>> from sklearn.metrics import silhouette_score
>>> silhouette_score(X, kmeans.labels_)
np.float64(0.655517642572828)

Биёед баҳои силуэтро барои шумораҳои гуногуни кластерҳо муқоиса кунем. Ба расми 8.8 нигаред.

Интихоби шумораи кластерҳо k бо истифодаи баҳои силуэт

Расми 8.8. Интихоби шумораи кластерҳо k бо истифодаи баҳои силуэт.

Ин тасвир нисбат ба пешина маълумоти бештар медиҳад. Он тасдиқ мекунад, ки k=4 интихоби хеле хуб аст, аммо ҳамзамон нишон медиҳад, ки k=5 низ хуб буда, аз k=6 ё k=7 хеле беҳтар аст.

Ҳангоми муқоисаи инерсияҳо ин равшан набуд.

Барои гирифтани тасвири боз ҳам пурмаълумоттар, метавон коэффисиенти силуэти ҳар намунаро нишон дод ва намунаҳоро аз рӯйи кластер ва қимати коэффисиент ба тартиб даровард.

Ин диаграммаи силуэт ном дорад. Ба расми 8.9 нигаред.

Дар ҳар диаграмма барои ҳар кластер як шакли ба теғи корд монанд мавҷуд аст. Баландии шакл шумораи намунаҳои кластерро ва паҳнои он коэффисиентҳои ба тартиб овардашудаи намунаҳоро нишон медиҳад. Ҳар қадар паҳнтар бошад, ҳамон қадар беҳтар аст.

Хатҳои амудии хатчин баҳои миёнаи силуэтро барои ҳар шумораи кластерҳо нишон медиҳанд.

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

Дар ин ҷо мебинем, ки ҳангоми k=3 ё k=6 кластерҳои бад мегирем.

Аммо ҳангоми k=4 ё k=5 кластерҳо хуб менамоянд: аксари намунаҳо аз хати хатчин ба тарафи рост гузашта, ба 1.0 наздиктаранд.

Ҳангоми k=4, кластери индекси 0, ки дар поён аст, хеле калон мебошад.

Ҳангоми k=5 андозаи ҳамаи кластерҳо монанд аст.

Аз ин рӯ, ҳарчанд баҳои умумии силуэт барои k=4 андаке баландтар аст, истифодаи k=5 барои гирифтани кластерҳои ҳамандоза интихоби хуб менамояд.

Таҳлили диаграммаҳои силуэт барои қиматҳои гуногуни k

Расми 8.9. Таҳлили диаграммаҳои силуэт барои қиматҳои гуногуни k.

Маҳдудиятҳои k-means

Бо вуҷуди бартариҳои зиёд, махсусан суръат ва миқёспазирӣ, k-means комил нест.

Тавре дидем, барои пешгирии ҳалҳои ғайриоптималӣ алгоритмро чанд бор иҷро кардан лозим аст. Ҳамчунин бояд шумораи кластерҳоро муайян кунед, ки баъзан душвор мебошад.

Ғайр аз ин, k-means бо кластерҳои дорои андозаҳои гуногун, зичиҳои гуногун ё шаклҳои ғайрикуравӣ чандон хуб кор намекунад.

Масалан, расми 8.10 нишон медиҳад, ки k-means маҷмӯи иборат аз се кластери эллипсоидиро бо андозаҳо, зичиҳо ва самтҳои гуногун чӣ гуна ҷудо мекунад.

Ҳеҷ яке аз ин ду натиҷа хуб нест. Натиҷаи тарафи чап беҳтар аст, аммо он ҳам 25%-и кластери миёнаро ҷудо карда, ба кластери рост медиҳад.

Натиҷаи тарафи рост тамоман бад аст, ҳарчанд инерсияаш камтар мебошад.

Пас вобаста ба додаҳо алгоритмҳои дигари кластербандӣ метавонанд беҳтар бошанд. Барои чунин кластерҳои эллипсоидӣ моделҳои омехтаи гауссӣ хеле хуб кор мекунанд.

Маҳдудиятҳои k-means дар тӯдаҳои эллипсоидӣ

Расми 8.10. k-means ин тӯдаҳои эллипсоидиро дуруст кластербандӣ карда наметавонад.

Маслиҳат. Пеш аз иҷрои k-means хусусиятҳои вурудиро миқёсбандӣ кардан муҳим аст. Ба боби 2 нигаред. Дар акси ҳол, кластерҳо метавонанд хеле кашида шаванд ва алгоритм бад кор кунад. Миқёсбандӣ кафолат намедиҳад, ки ҳамаи кластерҳо шакли хуби куравӣ мегиранд, аммо одатан ба k-means кумак мекунад.

Акнун чанд роҳи истифодаи кластербандиро мебинем. Аз k-means истифода мекунем, вале метавонед алгоритмҳои дигарро низ санҷед.

Истифодаи кластербандӣ барои сегментатсияи тасвир

Сегментатсияи тасвир вазифаи ҷудо кардани тасвир ба якчанд сегмент мебошад. Он чанд навъ дорад:

  • Дар сегментатсияи рангӣ пикселҳои дорои рангҳои монанд ба як сегмент нисбат дода мешаванд. Барои бисёр барномаҳо ҳамин кофист. Масалан, агар хоҳед тасвирҳои моҳвораиро таҳлил карда, масоҳати умумии ҷангалро дар минтақа ҳисоб кунед, сегментатсияи рангӣ метавонад мувофиқ бошад.
  • Дар сегментатсияи маъноӣ ҳамаи пикселҳои ба як навъи объект тааллуқдошта ба як сегмент нисбат дода мешаванд. Масалан, дар системаи биниши мошини худрон ҳамаи пикселҳои пиёдагардон метавонанд ба сегменти «пиёдагард» дохил шаванд. Яъне як сегмент ҳамаи пиёдагардонро фаро мегирад.
  • Дар сегментатсияи объектҳои алоҳида ҳамаи пикселҳои як объекти мушаххас ба як сегмент дохил мешаванд. Дар ин ҳолат барои ҳар пиёдагард сегменти алоҳида вуҷуд дорад.

Натиҷаҳои пешрафтаи сегментатсияи маъноӣ ва объектҳои алоҳида бо меъмориҳои мураккаб дар асоси шабакаҳои нейронии конволютсионӣ — боби 12 — ё трансформерҳои биноӣ — боби 16 — ба даст меоянд.

Дар ин боб ба вазифаи хеле содатари сегментатсияи рангӣ бо k-means диққат медиҳем.

Аввал бастаи Pillow-ро, ки идомаи Python Imaging Library ё PIL аст, ворид мекунем. Сипас бо он тасвири ladybug.png-ро бор мекунем. Ба тасвири болоии чапи расми 8.11 нигаред. Фарз мекунем, ки роҳ ба файл дар filepath нигоҳ дошта шудааст:

>>> import PIL
>>> image = np.asarray(PIL.Image.open(filepath))
>>> image.shape
(533, 800, 3)

Тасвир ҳамчун массиви сеандоза ифода шудааст.

Андозаи якум баландӣ, дуюм паҳноӣ ва сеюм шумораи каналҳои рангро нишон медиҳад. Дар ин ҳолат каналҳо сурх, сабз ва кабуд — RGB — мебошанд.

Ба ибораи дигар, барои ҳар пиксел вектори сеандоза дорем, ки шиддати рангҳои сурх, сабз ва кабудро дар бар мегирад. Ин қиматҳо ададҳои бутуни 8-битаи беаломат аз 0 то 255 мебошанд.

Баъзе тасвирҳо каналҳои камтар доранд. Масалан, тасвирҳои хокистарӣ танҳо як канал доранд.

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

Коди зерин шакли массивро тағйир дода, рӯйхати дарози рангҳои RGB месозад. Сипас онҳоро бо k-means ба ҳашт кластер ҷудо мекунад.

Он массиви segmented_img-ро месозад, ки барои ҳар пиксел маркази наздиктарин кластер, яъне ранги миёнаи кластери он пикселро нигоҳ медорад. Дар охир массив боз ба шакли аслии тасвир баргардонда мешавад.

Сатри сеюм индексгузории пешрафтаи NumPy-ро истифода мебарад. Масалан, агар 10 барчаспи аввали kmeans.labels_ ба 1 баробар бошанд, 10 ранги аввали segmented_img ба kmeans.cluster_centers_[1] баробар мешаванд:

X = image.reshape(-1, 3)
kmeans = KMeans(n_clusters=8, random_state=42).fit(X)
segmented_img = kmeans.cluster_centers_[kmeans.labels_]
segmented_img = segmented_img.reshape(image.shape)

Натиҷа тасвири болоии рости расми 8.11 мебошад.

Метавонед шумораҳои гуногуни кластерҳоро санҷед, тавре дар расм нишон дода шудааст.

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

Сабаб он аст, ки k-means кластерҳои андозаашон монандро афзал медонад.

Кафшдӯзак нисбат ба қисми боқимондаи тасвир хеле хурд аст. Аз ин рӯ, ҳарчанд ранги он равшан мебошад, k-means барои он кластери алоҳида ҷудо намекунад.

Сегментатсияи тасвир бо k-means

Расми 8.11. Сегментатсияи тасвир бо k-means ва шумораҳои гуногуни кластерҳои рангӣ.

Ин чандон душвор набуд. Акнун истифодаи дигари кластербандиро мебинем.

Истифодаи кластербандӣ барои омӯзиши ниманазоратшаванда

Кластербандӣ дар омӯзиши ниманазоратшаванда низ истифода мешавад: вақте намунаҳои бебарчасп зиёд, вале намунаҳои барчаспдор хеле каманд.

Масалан, кластербандӣ метавонад барои интихоби намунаҳои иловагӣ барои барчаспгузорӣ кумак кунад — аз ҷумла намунаҳои наздики сентроидҳо.

Ҳамчунин метавон барчаспи маъмултарини ҳар кластерро ба намунаҳои бебарчаспи он паҳн кард.

Биёед ин ғояҳоро дар маҷмӯи digits санҷем. Ин маҷмӯи содаи монанд ба MNIST аст ва аз 1 797 тасвири хокистарии 8×8, ки рақамҳои аз 0 то 9-ро нишон медиҳанд, иборат мебошад.

Аввал додаҳоро бор карда, ҷудо мекунем. Онҳо аллакай омехта шудаанд:

from sklearn.datasets import load_digits

X_digits, y_digits = load_digits(return_X_y=True)
X_train, y_train = X_digits[:1400], y_digits[:1400]
X_test, y_test = X_digits[1400:], y_digits[1400:]

Фарз мекунем, ки танҳо барои 50 намуна барчасп дорем.

Барои гирифтани натиҷаи ибтидоии муқоиса, модели регрессияи логистикиро дар ҳамин 50 намуна меомӯзонем:

from sklearn.linear_model import LogisticRegression

n_labeled = 50
log_reg = LogisticRegression(max_iter=10_000)
log_reg.fit(X_train[:n_labeled], y_train[:n_labeled])

Баъд саҳеҳии моделро дар маҷмӯи санҷишӣ чен мекунем. Дар хотир доред, ки маҷмӯи санҷишӣ бояд барчаспдор бошад:

>>> log_reg.score(X_test, y_test)
0.7581863979848866

Саҳеҳии модел ҳамагӣ 75,8% аст. Ин чандон хуб нест.

Агар моделро дар тамоми маҷмӯи омӯзишӣ омӯзонед, мебинед, ки саҳеҳӣ тақрибан ба 90,9% мерасад.

Биёед натиҷаро беҳтар кунем.

Аввал маҷмӯи омӯзиширо ба 50 кластер ҷудо мекунем. Сипас барои ҳар кластер тасвири ба сентроид наздиктаринро меёбем. Онҳоро тасвирҳои намоянда меномем:

k = 50
kmeans = KMeans(n_clusters=k, random_state=42)
X_digits_dist = kmeans.fit_transform(X_train)
representative_digit_idx = X_digits_dist.argmin(axis=0)
X_representative_digits = X_train[representative_digit_idx]

Расми 8.12 ҳамин 50 тасвири намояндаро нишон медиҳад.

Панҷоҳ тасвири намояндаи рақамҳо

Расми 8.12. Панҷоҳ тасвири намояндаи рақамҳо — якто аз ҳар кластер.

Ҳар тасвирро дида, дастӣ барчасп мегузорем:

y_representative_digits = np.array([8, 0, 1, 3, 6, 7, 5, 4, 2, 8, ..., 6, 4])

Акнун боз ҳамагӣ 50 намунаи барчаспдор дорем, аммо онҳо тасодуфӣ нестанд: ҳар кадом намояндаи кластери худ мебошад.

Биёед бинем, ки натиҷа беҳтар мешавад ё не:

>>> log_reg = LogisticRegression(max_iter=10_000)
>>> log_reg.fit(X_representative_digits, y_representative_digits)
>>> log_reg.score(X_test, y_test)
0.8337531486146096

Саҳеҳӣ аз 75,8% ба 83,4% расид, ҳарчанд ҳанӯз моделро танҳо дар 50 намуна меомӯзонем!

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

Аммо метавонем боз як қадам пеш равем: агар барчаспҳоро ба ҳамаи намунаҳои дигари ҳамон кластер паҳн кунем, чӣ мешавад?

Ин паҳнкунии барчаспҳо (label propagation) ном дорад:

y_train_propagated = np.empty(len(X_train), dtype=np.int64)
for i in range(k):
    y_train_propagated[kmeans.labels_ == i] = y_representative_digits[i]

Акнун моделро аз нав омӯзонида, самаранокии онро мебинем:

>>> log_reg = LogisticRegression(max_iter=10_000)
>>> log_reg.fit(X_train, y_train_propagated)
>>> log_reg.score(X_test, y_test)
0.8690176322418136

Боз афзоиши назарраси саҳеҳӣ гирифтем!

Биёед санҷем, ки оё бо сарфи назар кардани 50%-и намунаҳои аз маркази кластери худ дуртарин натиҷаро боз беҳтар карда метавонем. Ин бояд баъзе нуқтаҳои дурмондаро хориҷ кунад.

Коди зерин аввал масофаи ҳар намунаро то наздиктарин маркази кластер ҳисоб мекунад. Сипас дар ҳар кластер 50%-и масофаҳои калонтаринро ба -1 баробар мегузорад. Дар охир маҷмӯаеро месозад, ки намунаҳои бо масофаи -1 ишорашуда дар он нестанд:

percentile_closest = 50

X_cluster_dist = X_digits_dist[np.arange(len(X_train)), kmeans.labels_]
for i in range(k):
    in_cluster = (kmeans.labels_ == i)
    cluster_dist = X_cluster_dist[in_cluster]
    cutoff_distance = np.percentile(cluster_dist, percentile_closest)
    above_cutoff = (X_cluster_dist > cutoff_distance)
    X_cluster_dist[in_cluster & above_cutoff] = -1

partially_propagated = (X_cluster_dist != -1)
X_train_partially_propagated = X_train[partially_propagated]
y_train_partially_propagated = y_train_propagated[partially_propagated]

Акнун моделро дар маҷмӯи дорои барчаспҳои қисман паҳншуда омӯзонида, саҳеҳиро мебинем:

>>> log_reg = LogisticRegression(max_iter=10_000)
>>> log_reg.fit(X_train_partially_propagated, y_train_partially_propagated)
>>> log_reg.score(X_test, y_test)
0.8841309823677582

Бо ҳамагӣ 50 намунаи дастӣ барчаспгузоришуда — ба ҳисоби миёна танҳо 5 намуна барои ҳар синф — саҳеҳии 88,4% гирифтем. Ин ба натиҷаи омӯзиш дар тамоми маҷмӯи барчаспдори digits хеле наздик аст.

Ин қисман ба хориҷ кардани баъзе нуқтаҳои дурмонда ва қисман ба хуб будани барчаспҳои паҳншуда вобаста аст. Саҳеҳии онҳо тақрибан 98,9% мебошад:

>>> (y_train_partially_propagated == y_train[partially_propagated]).mean()
np.float64(0.9887798036465638)

Маслиҳат. Scikit-Learn дар бастаи sklearn.semi_supervised ду синф барои паҳнкунии худкори барчаспҳо дорад: LabelSpreading ва LabelPropagation. Ҳар ду байни ҳамаи намунаҳо матритсаи монандӣ месозанд ва барчаспҳоро ба таври такрорӣ аз намунаҳои барчаспдор ба намунаҳои монанди бебарчасп паҳн мекунанд.

Дар ҳамин баста синфи дигари SelfTrainingClassifier низ мавҷуд аст. Ба он таснифгари асосӣ, масалан, RandomForestClassifier, медиҳед. Он таснифгарро дар намунаҳои барчаспдор меомӯзонад, сипас барои намунаҳои бебарчасп пешгӯӣ мекунад. Баъд маҷмӯи омӯзиширо бо барчаспҳое пурра мекунад, ки ба онҳо бештар эътимод дорад. Ин даври омӯзиш ва барчаспгузорӣ то замоне такрор мешавад, ки дигар барчаспи нав илова карда натавонад. Ин усулҳо ҳалли ҳама мушкилҳо нестанд, аммо баъзан метавонанд моделро андаке беҳтар кунанд.

Омӯзиши фаъол

Барои беҳтар кардани минбаъдаи модел ва маҷмӯи омӯзишӣ, қадами навбатӣ метавонад чанд даври омӯзиши фаъол (active learning) бошад.

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

Стратегияҳои гуногуни омӯзиши фаъол мавҷуданд. Яке аз маъмултаринашон намунагирӣ аз рӯйи номуайянӣ (uncertainty sampling) ном дорад:

  1. Модел дар ҳамаи намунаҳои барчаспдори то ин вақт ҷамъшуда омӯзонида мешавад. Сипас барои ҳамаи намунаҳои бебарчасп пешгӯӣ мекунад.
  2. Намунаҳое, ки модел нисбат ба онҳо камтарин эътимод дорад, барои барчаспгузорӣ ба мутахассис дода мешаванд.
  3. Раванд то замоне такрор мешавад, ки беҳбудии самаранокӣ дигар ба заҳмати барчаспгузорӣ наарзад.

Стратегияҳои дигар барчаспгузории чунин намунаҳоро дар бар мегиранд:

  • намунаҳое, ки боиси тағйири аз ҳама зиёди модел мешаванд;
  • намунаҳое, ки хатои моделро дар маҷмӯи тасдиқӣ бештар кам мекунанд;
  • намунаҳое, ки моделҳои гуногун, масалан, SVM ва ҷангали тасодуфӣ, дар бораи онҳо ихтилоф доранд.

Пеш аз гузаштан ба моделҳои омехтаи гауссӣ, DBSCAN-ро мебинем. Ин алгоритми дигари маъмули кластербандӣ равиши тамоман дигареро нишон медиҳад, ки ба баҳогузории зичии маҳаллӣ асос ёфтааст.

Ин равиш имкон медиҳад кластерҳои дорои шаклҳои дилхоҳ муайян шаванд.

DBSCAN

Номи DBSCAN аз density-based spatial clustering of applications with noise гирифта шудааст, яъне кластербандии фазоии ба зичӣ асосёфта барои додаҳои дорои ғавғо.

Алгоритм кластерҳоро ҳамчун минтақаҳои пайвастаи зичии баланд муайян мекунад. Он чунин кор мекунад:

  1. Барои ҳар намуна ҳисоб мекунад, ки дар масофаи хурди ε, ё эпсилон, аз он чанд намуна ҷойгир аст. Ин минтақа ҳамсоягии ε-ии намуна ном дорад.
  2. Агар дар ин ҳамсоягӣ ҳадди ақал min_samples намуна бошад, бо ҳисоб кардани худи намуна, он намунаи ядроӣ (core instance) ҳисоб мешавад. Ба ибораи дигар, намунаҳои ядроӣ дар минтақаҳои зич ҷойгиранд.
  3. Ҳамаи намунаҳои ҳамсоягии намунаи ядроӣ ба ҳамон кластер дохил мешаванд. Дар ин ҳамсоягӣ метавонанд намунаҳои дигари ядроӣ низ бошанд. Аз ин рӯ, занҷири дарози намунаҳои ядроии ҳамсоя як кластерро ташкил медиҳад.
  4. Намунаҳое, ки ядроӣ нестанд ва дар ҳамсоягии худ ягон намунаи ядроӣ надоранд, аномалия ҳисоб мешаванд.

Алгоритм вақте хуб кор мекунад, ки ҳамаи кластерҳо бо минтақаҳои камзич аз ҳам хуб ҷудо шудаанд.

Истифодаи синфи DBSCAN дар Scikit-Learn сода аст. Онро дар маҷмӯи moons, ки дар боби 5 шинос шудем, месанҷем:

from sklearn.cluster import DBSCAN
from sklearn.datasets import make_moons

X, y = make_moons(n_samples=1000, noise=0.05, random_state=42)
dbscan = DBSCAN(eps=0.05, min_samples=5)
dbscan.fit(X)

Барчаспҳои ҳамаи намунаҳо дар labels_ дастрасанд:

>>> dbscan.labels_
array([ 0,  2, -1, -1,  1,  0,  0,  0,  2,  5, [...], 3,  3,  4,  2,  6,  3])

Баъзе намунаҳо индекси кластери -1 доранд. Ин маънои онро дорад, ки алгоритм онҳоро аномалия ҳисоб кардааст.

Индексҳои намунаҳои ядроӣ дар core_sample_indices_ ва худи намунаҳои ядроӣ дар components_ дастрасанд:

>>> dbscan.core_sample_indices_
array([  0,   4,   5,   6,   7,   8,  10,  11, [...], 993, 995, 997, 998, 999])
>>> dbscan.components_
array([[-0.02137124,  0.40618608],
       [-0.84192557,  0.53058695],
       [...],
       [ 0.79419406,  0.60777171]])

Ин кластербандӣ дар тарафи чапи расми 8.13 нишон дода шудааст. Алгоритм аномалияҳои зиёд ва ҳафт кластери гуногунро муайян кардааст. Натиҷа чандон хуб нест.

Хушбахтона, агар бо зиёд кардани eps то 0.2 ҳамсоягии ҳар намунаро васеъ кунем, натиҷаи тарафи ростро мегирем, ки комил менамояд. Минбаъд аз ҳамин модел истифода мебарем.

Кластербандии DBSCAN бо ду радиуси гуногуни ҳамсоягӣ

Расми 8.13. Кластербандии DBSCAN бо ду радиуси гуногуни ҳамсоягӣ.

Ҷолиб аст, ки синфи DBSCAN методи predict() надорад, ҳарчанд fit_predict() дорад.

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

Сабаб он аст, ки барои вазифаҳои гуногун таснифгарҳои гуногун мувофиқтаранд. Аз ин рӯ, таҳиягарон интихоби онро ба корбар гузоштаанд.

Илова кардани чунин имконият низ душвор нест. Масалан, KNeighborsClassifier-ро меомӯзонем (аввал dbscan-ро бо eps=0.2 аз нав омӯзонида):

from sklearn.neighbors import KNeighborsClassifier

dbscan = DBSCAN(eps=0.2, min_samples=5)  # модели тарафи рости расми 8.13
dbscan.fit(X)

knn = KNeighborsClassifier(n_neighbors=50)
knn.fit(dbscan.components_, dbscan.labels_[dbscan.core_sample_indices_])

Акнун барои чанд намунаи нав пешгӯӣ карда метавонем, ки эҳтимол ба кадом кластерҳо тааллуқ доранд. Ҳатто эҳтимоли ҳар кластерро ҳисоб мекунем:

>>> X_new = np.array([[-0.5, 0], [0, 0.5], [1, -0.1], [2, 1]])
>>> knn.predict(X_new)
array([1, 0, 1, 0])
>>> knn.predict_proba(X_new)
array([[0.18, 0.82],
       [1.  , 0.  ],
       [0.12, 0.88],
       [1.  , 0.  ]])

Аҳаммият диҳед, ки таснифгарро танҳо дар намунаҳои ядроӣ омӯзонидем. Метавонистем онро дар ҳамаи намунаҳо ё дар ҳамаи намунаҳо ба истиснои аномалияҳо омӯзонем. Ин интихоб аз вазифаи ниҳоӣ вобаста аст.

Сарҳади қарор дар расми 8.14 нишон дода шудааст. Аломатҳои салиб чор намунаи X_new-ро ифода мекунанд.

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

Ҷорӣ кардани масофаи максималӣ осон аст. Дар ин ҳолат ду намунае, ки аз ҳар ду кластер дуранд, аномалия ҳисоб мешаванд.

Барои ин аз методи kneighbors()-и KNeighborsClassifier истифода мебарем. Он барои маҷмӯи додашуда масофаҳо ва индексҳои k ҳамсояи наздиктаринро дар маҷмӯи омӯзишӣ бармегардонад — ду матритса, ки ҳар кадом k сутун дорад:

>>> y_dist, y_pred_idx = knn.kneighbors(X_new, n_neighbors=1)
>>> y_pred = dbscan.labels_[dbscan.core_sample_indices_][y_pred_idx]
>>> y_pred[y_dist > 0.2] = -1
>>> y_pred.ravel()
array([-1,  0,  1, -1])

Сарҳади қарор байни ду кластер

Расми 8.14. Сарҳади қарор байни ду кластер.

Эзоҳи тарҷумон. Дар манбаъ сатрҳои аз нав омӯзонидани dbscan бо eps=0.2 нестанд (онҳо танҳо дар ноутбуки муаллиф ҳастанд); бе онҳо knn дар кластербандии eps=0.05 бо ҳафт кластер омӯзонида мешуд ва натиҷаҳои боло ба даст намеомаданд.

DBSCAN алгоритми хеле сода, вале пуриқтидор аст, ки шумораи дилхоҳи кластерҳои ҳаршакларо муайян карда метавонад.

Он ба нуқтаҳои дурмонда устувор аст ва танҳо ду гиперпараметр дорад: eps ва min_samples.

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

Ғайр аз ин, мураккабии ҳисоббарории он тақрибан O(m²n) аст. Аз ин рӯ, барои маҷмӯаҳои калон хуб миқёспазир намешавад.

Маслиҳат. Ҳамчунин метавонед DBSCAN-и иерархӣ — HDBSCAN-ро бо sklearn.cluster.HDBSCAN санҷед. Он аксаран кластерҳои зичиашон гуногунро нисбат ба DBSCAN беҳтар меёбад.

Алгоритмҳои дигари кластербандӣ

Scikit-Learn чанд алгоритми дигари кластербандиро низ татбиқ мекунад, ки хуб аст онҳоро баррасӣ кунед. Дар ин ҷо ҳамаи онҳоро муфассал фаро гирифта наметавонем, аммо шарҳи кӯтоҳ меорем.

Кластербандии агломеративӣ

Дар ин равиш иерархияи кластерҳо аз поён ба боло сохта мешавад.

Ҳубобчаҳои хурди рӯйи обро тасаввур кунед, ки тадриҷан ба ҳам мечаспанд, то як гурӯҳи калон ба вуҷуд ояд.

Ба ҳамин монанд, кластербандии агломеративӣ дар ҳар такрор ҷуфти наздиктарини кластерҳоро муттаҳид мекунад. Дар оғоз ҳар намуна кластери алоҳида аст.

Агар барои ҳар ҷуфти кластерҳои муттаҳидшуда шоха кашед, дарахти дуии кластерҳо ҳосил мешавад, ки баргҳои он намунаҳои алоҳида мебошанд.

Ин равиш кластерҳои шаклҳои гуногунро муайян карда метавонад. Ҳамчунин ба ҷойи маҷбур кардани шумо ба интихоби як миқёси муайяни кластербандӣ, дарахти чандир ва пурмаълумоти кластерҳоро медиҳад.

Онро бо ҳар гуна масофаи ҷуфтӣ истифода бурдан мумкин аст.

Агар матритсаи пайвастагӣ диҳед, алгоритм метавонад бо шумораи зиёди намунаҳо хуб кор кунад. Ин матритсаи тунуки m×m аст, ки нишон медиҳад кадом ҷуфти намунаҳо ҳамсояанд. Масалан, онро бо sklearn.neighbors.kneighbors_graph() гирифтан мумкин аст.

Бе матритсаи пайвастагӣ алгоритм барои маҷмӯаҳои калон хуб миқёспазир намешавад.

BIRCH

Номи BIRCH аз balanced iterative reducing and clustering using hierarchies гирифта шудааст, яъне коҳиш ва кластербандии мутавозини такрорӣ бо истифодаи иерархияҳо.

Ин алгоритм махсус барои маҷмӯаҳои хеле калон сохта шудааст.

Агар шумораи хусусиятҳо чандон зиёд набошад — камтар аз 20 — он метавонад аз k-means-и дастаӣ тезтар буда, натиҷаҳои монанд диҳад.

Ҳангоми омӯзиш сохтори дарахтие месозад, ки танҳо маълумоти кофиро барои зуд нисбат додани ҳар намунаи нав ба кластер нигоҳ медорад. Ба нигоҳ доштани ҳамаи намунаҳо дар дарахт ниёз нест.

Ин имкон медиҳад алгоритм бо хотираи маҳдуд маҷмӯаҳои азимро коркард кунад.

Mean-shift

Алгоритм аз ҷойгир кардани доирае дар атрофи ҳар намуна оғоз мекунад.

Барои ҳар доира миёнаи ҳамаи намунаҳои дохили он ҳисоб мешавад. Сипас доира тавре ҷобаҷо мегардад, ки марказаш ба ҳамин миёна рост ояд.

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

Mean-shift доираҳоро ба самти зичии баландтар ҳаракат медиҳад, то ҳар кадом ба максимуми маҳаллии зичӣ расад.

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

Mean-shift баъзе хусусиятҳои DBSCAN-ро дорад:

  • метавонад шумораи дилхоҳи кластерҳои ҳаршакларо ёбад;
  • гиперпараметрҳои хеле кам дорад — танҳо радиуси доираҳо, ки bandwidth номида мешавад;
  • ба баҳогузории зичии маҳаллӣ такя мекунад.

Аммо бар хилофи DBSCAN, агар дар дохили кластер зичӣ тағйир ёбад, mean-shift майл дорад онро ба чанд қисм ҷудо кунад.

Мураккабии ҳисоббарории он O(m²n) мебошад. Аз ин рӯ, барои маҷмӯаҳои калон мувофиқ нест.

Паҳнкунии наздикӣ — Affinity propagation

Дар ин алгоритм намунаҳо такроран байни ҳам паём мубодила мекунанд, то ҳар намуна намунаи дигар ё худашро ҳамчун намоянда интихоб кунад.

Намунаҳои интихобшуда намунаҳои намоянда — exemplars ном доранд. Ҳар намоянда ва ҳамаи намунаҳое, ки онро интихоб кардаанд, як кластерро ташкил медиҳанд.

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

Affinity propagation ба ҳамин тарз кор мекунад ва одатан намояндаҳои наздики маркази кластерҳоро интихоб менамояд, мисли k-means.

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

Ғайр аз ин, алгоритм бо кластерҳои андозаашон гуногун хуб кор мекунад.

Мутаассифона, мураккабии ҳисоббарории он O(m²) аст. Аз ин рӯ, барои маҷмӯаҳои калон мувофиқ нест.

Кластербандии спектралӣ

Алгоритм матритсаи монандии байни намунаҳоро гирифта, аз он намоиши камандоза месозад, яъне андозанокии матритсаро кам мекунад.

Сипас дар ин фазои камандоза алгоритми дигари кластербандиро иҷро менамояд. Татбиқи Scikit-Learn аз k-means истифода мебарад.

Кластербандии спектралӣ сохторҳои мураккаби кластериро муайян карда метавонад. Ҳамчунин онро барои буридани графҳо истифода мебаранд, масалан, барои ёфтани гурӯҳҳои дӯстон дар шабакаи иҷтимоӣ.

Он барои шумораи зиёди намунаҳо хуб миқёспазир намешавад ва ҳангоми хеле гуногун будани андозаи кластерҳо хуб кор намекунад.

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

Омехтаҳои гауссӣ

Модели омехтаи гауссӣ — GMM (Gaussian mixture model) модели эҳтимолиест, ки фарз мекунад намунаҳо аз омехтаи якчанд тақсимоти гауссии дорои параметрҳои номаълум тавлид шудаанд.

Ҳамаи намунаҳое, ки аз як тақсимоти гауссӣ тавлид шудаанд, кластереро ташкил медиҳанд, ки одатан шакли эллипсоид дорад.

Ҳар кластер метавонад шакли эллипсоидӣ, андоза, зичӣ ва самти гуногун дошта бошад, мисли расми 8.10.

Ҳангоми мушоҳида кардани намуна медонед, ки он аз яке аз тақсимоти гауссӣ тавлид шудааст. Аммо намедонед, ки аз кадомаш ва параметрҳои ин тақсимот чӣ гунаанд.

Дақиқтар гӯем, фарз мешавад, ки маҷмӯи X аз раванди эҳтимолии зерин тавлид шудааст:

  1. Барои ҳар намуна аз байни k кластер як кластер тасодуфан интихоб мешавад. Эҳтимоли интихоби кластери j-ум ба вазни он, ϕ⁽ʲ⁾, баробар аст. Индекси кластери барои намунаи i-ум интихобшуда бо z⁽ⁱ⁾ ишора мешавад.
  2. Агар намунаи i-ум ба кластери j-ум нисбат дода шуда бошад, яъне z⁽ⁱ⁾=j, мавқеи x⁽ⁱ⁾-и он аз тақсимоти гауссии дорои миёнаи μ⁽ʲ⁾ ва матритсаи ковариатсияи Σ⁽ʲ⁾ тасодуфан интихоб мешавад:

x⁽ⁱ⁾ ∼ 𝒩(μ⁽ʲ⁾, Σ⁽ʲ⁾).

Якчанд варианти GMM вуҷуд дорад.

Дар варианти содатарин, ки дар синфи GaussianMixture татбиқ шудааст, фарз мешавад, ки шумораи тақсимоти гауссӣ k-ро пешакӣ медонем.

Биёед GaussianMixture сохта, онро ба маҷмӯи X-и расми 8.10 мутобиқ кунем.

Ин додаҳо бо make_blobs() тавлид шуда, сипас барои каҷ кардани ду тӯда ба онҳо табдили хаттӣ татбиқ шудааст. Барои тафсилот ба дафтари коди ҳамроҳи китоб нигаред:

from sklearn.mixture import GaussianMixture

gm = GaussianMixture(n_components=3, n_init=10, random_state=42)
gm.fit(X)

Алгоритм вазнҳои ϕ ва ҳамаи параметрҳои тақсимотро — аз μ⁽¹⁾ то μ⁽³⁾ ва аз Σ⁽¹⁾ то Σ⁽³⁾ — баҳогузорӣ кардааст:

>>> gm.weights_
array([0.40005972, 0.20961444, 0.39032584])
>>> gm.means_
array([[-1.40764129,  1.42712848],
       [ 3.39947665,  1.05931088],
       [ 0.05145113,  0.07534576]])
>>> gm.covariances_
array([[[ 0.63478217,  0.72970097],
        [ 0.72970097,  1.16094925]],

       [[ 1.14740131, -0.03271106],
        [-0.03271106,  0.95498333]],

       [[ 0.68825143,  0.79617956],
        [ 0.79617956,  1.21242183]]])

Алгоритм хуб кор кард!

Дар ҳақиқат, ду кластер ҳар кадом 500 намуна ва кластери сеюм танҳо 250 намуна доранд.

Пас вазнҳои воқеии кластерҳо мутаносибан 0.4, 0.4 ва 0.2 мебошанд. Алгоритм ҳам тақрибан ҳамин қиматҳоро, вале бо тартиби дигар, ёфтааст.

Миёнаҳо ва матритсаҳои воқеии ковариатсия низ ба натиҷаҳои алгоритм хеле наздиканд.

Аммо ин чӣ гуна анҷом мешавад?

Ин синф ба алгоритми интизорӣ–максимализатсия — EM (expectation-maximization) такя мекунад. Он ба k-means монандиҳои зиёд дорад:

  • параметрҳои кластерҳоро тасодуфан ибтидосозӣ мекунад;
  • то расидан ба ҳамгароӣ ду қадамро такрор менамояд;
  • аввал намунаҳоро ба кластерҳо нисбат медиҳад — қадами интизорӣ;
  • сипас кластерҳоро нав мекунад — қадами максимализатсия.

Дар заминаи кластербандӣ метавон EM-ро умумисозии k-means донист.

Он на танҳо марказҳои кластерҳо — аз μ⁽¹⁾ то μ⁽ᵏ⁾ — балки андоза, шакл ва самти онҳоро — аз Σ⁽¹⁾ то Σ⁽ᵏ⁾ — ва вазнҳои нисбии онҳоро — аз ϕ⁽¹⁾ то ϕ⁽ᵏ⁾ — низ меёбад.

Аммо бар хилофи k-means, EM аз нисбатдиҳии нарм истифода мебарад.

Дар қадами интизорӣ алгоритм барои ҳар намуна, бо такя ба параметрҳои ҷории кластерҳо, эҳтимоли мансубияти онро ба ҳар кластер баҳогузорӣ мекунад.

Дар қадами максимализатсия ҳар кластер бо истифодаи ҳамаи намунаҳо нав мешавад. Аммо саҳми ҳар намуна мувофиқи эҳтимоли мансубияти он ба ҳамин кластер вазнгузорӣ мегардад.

Ин эҳтимолҳо масъулияти кластерҳо барои намунаҳо (responsibilities) ном доранд.

Ҳангоми максимализатсия ба навсозии ҳар кластер бештар ҳамон намунаҳое таъсир мерасонанд, ки кластер барои онҳо масъулияти бештар дорад.

Огоҳӣ. Мисли k-means, EM низ метавонад ба ҳалли бад ҳамгаро шавад. Аз ин рӯ, онро бояд чанд бор иҷро карда, танҳо беҳтарин натиҷаро нигоҳ дошт. Барои ҳамин n_init=10 гузоштем. Эҳтиёт кунед: қимати пешфарзи n_init ба 1 баробар аст.

Метавонед санҷед, ки алгоритм ба ҳамгароӣ расидааст ё не ва чанд такрор лозим шудааст:

>>> gm.converged_
True
>>> gm.n_iter_
4

Акнун, ки мавқеъ, андоза, шакл, самт ва вазни нисбии ҳар кластер баҳогузорӣ шудааст, модел метавонад ҳар намунаро ба эҳтимолитарин кластер нисбат диҳад — кластербандии қатъӣ — ё эҳтимоли мансубияти онро ба ҳар кластер ҳисоб кунад — кластербандии нарм.

Барои якум аз predict() ва барои дуюм аз predict_proba() истифода баред:

>>> gm.predict(X)
array([2, 2, 0, ..., 1, 1, 1])
>>> gm.predict_proba(X).round(3)
array([[0.   , 0.023, 0.977],
       [0.001, 0.016, 0.983],
       [1.   , 0.   , 0.   ],
       ...,
       [0.   , 1.   , 0.   ],
       [0.   , 1.   , 0.   ],
       [0.   , 1.   , 0.   ]])

Модели омехтаи гауссӣ модели тавлидӣ аст. Яъне метавонед аз он намунаҳои нав гиред. Аҳаммият диҳед, ки онҳо аз рӯйи индекси кластер тартиб дода шудаанд:

>>> X_new, y_new = gm.sample(6)
>>> X_new
array([[-2.32491052,  1.04752548],
       [-1.16654983,  1.62795173],
       [ 1.84860618,  2.07374016],
       [ 3.98304484,  1.49869936],
       [ 3.8163406 ,  0.53038367],
       [ 0.38079484, -0.56239369]])
>>> y_new
array([0, 0, 1, 1, 1, 2])

Ҳамчунин зичии моделро дар ҳар мавқеи муайян баҳогузорӣ кардан мумкин аст.

Барои ин аз score_samples() истифода мешавад. Он барои ҳар намуна логарифми функсияи зичии эҳтимолиятро дар ҳамон мавқеъ ҳисоб мекунад.

Ҳар қадар баҳо калонтар бошад, зичӣ ҳамон қадар баландтар аст:

>>> gm.score_samples(X).round(2)
array([-2.61, -3.57, -3.33, ..., -3.51, -4.4 , -3.81])

Агар экспонентаи ин баҳоро ҳисоб кунед, қимати PDF-ро дар мавқеи намунаҳои додашуда мегиред.

Инҳо эҳтимолият нестанд, балки зичии эҳтимолиятанд. Онҳо метавонанд ҳар қимати мусбат дошта бошанд ва ҳатман байни 0 ва 1 нестанд.

Барои баҳогузории эҳтимоли ба минтақаи муайян афтодани намуна, бояд PDF-ро дар он минтақа интеграл гиред.

Агар дар тамоми фазои мавқеъҳои имконпазир интеграл гиред, натиҷа 1 мешавад.

Расми 8.15 миёнаҳои кластерҳо, сарҳадҳои қарор бо хатҳои хатчин ва хатҳои ҳамзичии моделро нишон медиҳад.

Модели омӯзонидашудаи омехтаи гауссӣ

Расми 8.15. Миёнаҳои кластерҳо, сарҳадҳои қарор ва хатҳои ҳамзичии модели омӯзонидашудаи омехтаи гауссӣ.

Алгоритм ҳалли хеле хуб ёфтааст.

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

Ҳамчунин ба алгоритм шумораи дурусти кластерҳоро додем.

Агар андозаҳо ё кластерҳо зиёд бошанд ё намунаҳо кам бошанд, EM метавонад барои расидан ба ҳалли оптималӣ душворӣ кашад.

Шояд лозим шавад шумораи параметрҳои омӯхташавандаро маҳдуд карда, вазифаро сода кунед.

Як роҳ маҳдуд кардани шаклҳо ва самтҳои имконпазири кластерҳо мебошад. Барои ин ба матритсаҳои ковариатсия маҳдудият мегузорем.

Гиперпараметри covariance_type-ро ба яке аз қиматҳои зерин гузоред:

ҚиматМаҳдудият
"spherical"Ҳамаи кластерҳо бояд куравӣ бошанд, аммо метавонанд диаметрҳо, яъне дисперсияҳои гуногун дошта бошанд.
"diag"Кластерҳо метавонанд ҳар гуна шакл ва андозаи эллипсоидӣ дошта бошанд, аммо меҳварҳои онҳо бояд ба меҳварҳои координатӣ параллел бошанд. Яъне матритсаҳои ковариатсия диагоналӣ мешаванд.
"tied"Ҳамаи кластерҳо бояд шакл, андоза ва самти якхелаи эллипсоидӣ дошта бошанд. Яъне ҳама як матритсаи ковариатсияро истифода мебаранд.
"full"Қимати пешфарз: ҳар кластер метавонад шакл, андоза ва самти дилхоҳ дошта бошад. Ҳар кадом матритсаи ковариатсияи бе маҳдудияти худро дорад.

Расми 8.16 ҳалли ёфтаи EM-ро ҳангоми "tied" ё "spherical" будани covariance_type нишон медиҳад.

Омехтаҳои гауссӣ бо маҳдудиятҳои ковариатсия

Расми 8.16. Омехтаҳои гауссӣ барои кластерҳои дорои ковариатсияи муштарак дар чап ва кластерҳои куравӣ дар рост.

Эзоҳ. Мураккабии омӯзиши GaussianMixture ба шумораи намунаҳо m, андозаҳо n, кластерҳо k ва маҳдудиятҳои матритсаҳои ковариатсия вобаста аст. Агар covariance_type ба "spherical" ё "diag" баробар бошад ва додаҳо сохтори кластерӣ дошта бошанд, мураккабӣ O(kmn) аст. Ҳангоми "tied" ё "full" он ба O(kmn²+kn³) баробар мешавад. Аз ин рӯ, чунин вариантҳо барои шумораи зиёди хусусиятҳо хуб миқёспазир намешаванд.

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

Истифодаи омехтаҳои гауссӣ барои ошкор кардани аномалияҳо

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

Шумо бояд муайян кунед, ки кадом ҳадди зичӣ-ро истифода мебаред.

Масалан, дар ширкати истеҳсолие, ки мехоҳад маҳсулоти нуқсондорро пайдо кунад, ҳиссаи чунин маҳсулот одатан маълум аст. Фарз мекунем он 2% мебошад.

Дар ин ҳолат ҳадди зичиро тавре интихоб мекунед, ки 2%-и намунаҳо дар минтақаҳои аз он камзичтар ҷойгир шаванд.

Агар бинед, ки мусбатҳои бардурӯғ зиёданд, яъне маҳсулоти комилан солим нуқсондор эълон мешаванд, метавонед ҳадро паст кунед.

Баръакс, агар манфиҳои бардурӯғ зиёд бошанд, яъне система маҳсулоти нуқсондорро ошкор накунад, метавонед ҳадро баландтар кунед.

Ин ҳамон тавозуни маъмули precision/recall, яъне дақиқии ошкоркунӣ ва фарогирӣ мебошад. Ба боби 3 нигаред.

Коди зерин персентили дуюми зичиро ҳамчун ҳад истифода мебарад. Яъне тақрибан 2%-и намунаҳо аномалия ҳисоб мешаванд:

densities = gm.score_samples(X)
density_threshold = np.percentile(densities, 2)
anomalies = X[densities < density_threshold]

Дар расми 8.17 ин аномалияҳо бо ситораҳо нишон дода шудаанд.

Ошкор кардани аномалияҳо бо модели омехтаи гауссӣ

Расми 8.17. Ошкор кардани аномалияҳо бо модели омехтаи гауссӣ.

Вазифаи наздики дигар ошкор кардани навгониҳо (novelty detection) аст.

Фарқи он аз ошкор кардани аномалияҳо дар он мебошад, ки фарз мешавад алгоритм дар маҷмӯи «тоза»-и бе нуқтаҳои дурмонда омӯзонида шудааст.

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

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

Мисли k-means, алгоритми GaussianMixture низ талаб мекунад, ки шумораи кластерҳоро муайян кунед. Ин шумораро чӣ гуна ёфтан мумкин аст?

Интихоби шумораи кластерҳо

Барои k-means метавонед аз инерсия ё баҳои силуэт истифода баред.

Аммо барои омехтаҳои гауссӣ ин меъёрҳо мувофиқ нестанд, зеро ҳангоми ғайрикуравӣ ё андозаашон гуногун будани кластерҳо боэътимод нестанд.

Ба ҷойи онҳо метавонед моделеро ҷустуҷӯ кунед, ки яке аз меъёрҳои назариявии иттилоотиро камтарин мекунад, масалан:

  • меъёри иттилоотии байесӣ — BIC (Bayesian information criterion);
  • меъёри иттилоотии Акаике — AIC (Akaike information criterion).

Онҳо дар муодилаи 8.2 муайян шудаанд.

Муодилаи 8.2. Меъёри иттилоотии байесӣ — BIC — ва меъёри иттилоотии Акаике — AIC.

BIC = log(m) p − 2 log(L̂),

AIC = 2p − 2 log(L̂).

Дар ин муодилаҳо:

  • m — мисли ҳамеша, шумораи намунаҳо;
  • p — шумораи параметрҳои омӯхтаи модел;
  • L̂ — қимати максималии функсияи ростнамоии модел.

Ҳам BIC ва ҳам AIC моделҳои дорои параметрҳои бештар, масалан, кластерҳои бештарро, ҷарима мекунанд ва ба моделҳое, ки ба додаҳо хуб мутобиқ мешаванд, бартарӣ медиҳанд.

Онҳо аксаран ҳамон як моделро интихоб мекунанд.

Вақте натиҷаҳо фарқ мекунанд, модели интихобкардаи BIC одатан содатар ва дорои параметрҳои камтар аст, аммо ба додаҳо андаке сусттар мутобиқ мешавад. Ин махсусан барои маҷмӯаҳои калон дуруст аст.

Функсияи ростнамоӣ — Likelihood

Калимаҳои эҳтимолият (probability) ва ростнамоӣ (likelihood) дар забони рӯзмарра баъзан ба ҷойи ҳам истифода мешаванд, аммо дар омор маъноҳои хеле гуногун доранд.

Агар модели оморӣ бо параметрҳои θ дошта бошем:

  • эҳтимолият нишон медиҳад, ки натиҷаи ояндаи x, ҳангоми маълум будани параметрҳои θ, то чӣ андоза имконпазир аст;
  • ростнамоӣ нишон медиҳад, ки маҷмӯи муайяни параметрҳои θ, пас аз мушоҳида шудани натиҷаи x, то чӣ андоза ба он мувофиқ аст.

Модели якандозаи омехтаи ду тақсимоти гауссиро ба назар гиред, ки марказҳояшон дар -4 ва +1 ҷойгиранд.

Барои содагӣ, модел танҳо як параметри θ дорад, ки инҳирофи стандартии ҳар ду тақсимотро идора мекунад.

Намудори хатҳои ҳамқимат дар боло аз чапи расми 8.18 тамоми модели f(x;θ)-ро ҳамчун функсияи ҳам x ва ҳам θ нишон медиҳад.

Барои баҳогузории тақсимоти эҳтимолии натиҷаи ояндаи x, бояд параметри θ-ро муайян кунед.

Масалан, агар θ=1.3 гузоред — хати уфуқӣ — функсияи зичии эҳтимолияти f(x;θ=1.3)-ро мегиред, ки дар намудори поёнии чап нишон дода шудааст.

Фарз кунед, ки мехоҳед эҳтимоли байни -2 ва +2 афтодани x-ро ҳисоб кунед. Барои ин бояд PDF-ро дар ҳамин фосила интеграл гиред, яъне масоҳати минтақаи соядорро ҳисоб намоед.

Аммо агар θ-ро надонед ва ба ҷойи он як намунаи x=2.5-ро мушоҳида карда бошед, чӣ мешавад? Инро хати амудии намудори болоии чап нишон медиҳад.

Дар ин ҳолат функсияи ростнамоиро мегиред:

ℒ(θ | x = 2.5) = f(x = 2.5; θ).

Он дар намудори болоии рост тасвир шудааст.

Функсияи параметрии модел, PDF ва ростнамоӣ

Расми 8.18. Функсияи параметрии модел дар боло аз чап ва функсияҳои аз он гирифташуда: PDF дар поён аз чап, функсияи ростнамоӣ дар боло аз рост ва логарифми ростнамоӣ дар поён аз рост.

Пас PDF функсияи x аст, вақте θ собит мебошад. Функсияи ростнамоӣ бошад, функсияи θ аст, вақте x собит мебошад.

Муҳим аст фаҳмем, ки функсияи ростнамоӣ тақсимоти эҳтимолият нест.

Агар тақсимоти эҳтимолиятро аз рӯйи ҳамаи қиматҳои имконпазири x интеграл гиред, ҳамеша 1 мегиред.

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

Барои маҷмӯи додаҳои X, вазифаи маъмул баҳогузории мувофиқтарин қиматҳои параметрҳои модел мебошад.

Барои ин бояд қиматҳоеро ёбед, ки функсияи ростнамоиро барои X максималӣ мекунанд.

Дар ин мисол, агар танҳо як намунаи x=2.5-ро мушоҳида карда бошед, баҳогузории максималии ростнамоӣ — MLE (maximum likelihood estimation) барои θ тақрибан чунин аст:

θ̂ ≈ 1.66.

Агар барои θ тақсимоти пешакии g вуҷуд дошта бошад, онро метавон бо максималӣ кардани

ℒ(θ | x) g(θ)

ба ҷойи танҳо ℒ(θ|x) ба назар гирифт.

Ин баҳогузории максималии пасин — MAP (maximum a-posteriori estimation) ном дорад.

Азбаски MAP қиматҳои параметрҳоро маҳдуд мекунад, онро метавон версияи мунтазамсохтаи MLE донист.

Аҳаммият диҳед, ки максималӣ кардани функсияи ростнамоӣ ба максималӣ кардани логарифми он ҳамарзиш аст. Логарифми ростнамоӣ дар поён аз рости расми 8.18 нишон дода шудааст.

Сабаб он аст, ки логарифм функсияи қатъиян афзоянда мебошад. Пас агар θ логарифми ростнамоиро максималӣ кунад, худи ростнамоиро низ максималӣ мекунад.

Одатан максималӣ кардани логарифми ростнамоӣ осонтар аст.

Масалан, агар чанд намунаи мустақили аз x⁽¹⁾ то x⁽ᵐ⁾-ро мушоҳида карда бошед, бояд θ-еро ёбед, ки ҳосили зарби функсияҳои ростнамоии алоҳидаро максималӣ мекунад.

Аммо ба он ҳамарзиш ва хеле содатар аст, ки ҷамъи логарифмҳои ростнамоиро максималӣ кунед. Логарифм зарбро ба ҷамъ табдил медиҳад:

log(ab) = log(a) + log(b).

Пас аз ёфтани θ̂, яъне қимати параметре, ки ростнамоиро максималӣ мекунад, метавонед қимати максималии ростнамоиро барои ҳисоб кардани AIC ва BIC истифода баред.

Ин қиматро метавон ченаки то чӣ андоза хуб ба додаҳо мутобиқ шудани модел донист.

Барои ҳисоб кардани BIC ва AIC методҳои bic() ва aic()-ро даъват кунед:

>>> gm.bic(X)
np.float64(8189.733705221636)
>>> gm.aic(X)
np.float64(8102.508425106598)

Расми 8.19 ин меъёрҳоро барои шумораҳои гуногуни кластерҳо k нишон медиҳад.

Ҳам BIC ва ҳам AIC ҳангоми k=3 камтаринанд. Аз ин рӯ, эҳтимол ҳамин интихоби беҳтарин бошад.

AIC ва BIC барои шумораҳои гуногуни кластерҳо k

Расми 8.19. AIC ва BIC барои шумораҳои гуногуни кластерҳо k.

Моделҳои байесии омехтаи гауссӣ

Ба ҷойи ҷустуҷӯи дастии шумораи оптималии кластерҳо, метавонед аз синфи BayesianGaussianMixture истифода баред.

Он метавонад ба кластерҳои нолозим вазни баробар ё наздик ба сифр диҳад.

Ба n_components қимате диҳед, ки бо асоси кофӣ онро аз шумораи оптималии кластерҳо калонтар медонед. Ин ҳадди ақал дониши муайянеро дар бораи масъала талаб мекунад.

Алгоритм кластерҳои нолозимро ба таври худкор канор мегузорад.

Масалан, шумораи кластерҳоро 10 мегузорем ва мебинем чӣ мешавад:

>>> from sklearn.mixture import BayesianGaussianMixture
>>> bgm = BayesianGaussianMixture(n_components=10, n_init=10, max_iter=500,
...                               random_state=42)
...
>>> bgm.fit(X)
>>> bgm.weights_.round(2)
array([0.4 , 0.21, 0.39, 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  ])

Алгоритм худкор муайян кард, ки танҳо се кластер лозим аст. Кластерҳои ҳосилшуда қариб бо кластерҳои расми 8.15 яксонанд.

Як нуктаи охирин дар бораи моделҳои омехтаи гауссӣ: ҳарчанд онҳо бо кластерҳои эллипсоидӣ хеле хуб кор мекунанд, барои кластерҳои шаклашон тамоман дигар чандон мувофиқ нестанд.

Масалан, агар модели байесии омехтаи гауссиро барои кластербандии маҷмӯи moons истифода барем, чӣ мешавад? Ба расми 8.20 нигаред.

Алгоритм пайваста эллипсоидҳоро ҷустуҷӯ карда, ба ҷойи ду кластер ҳашт кластер ёфт.

Баҳогузории зичӣ чандон бад нест. Аз ин рӯ, шояд ин моделро барои ошкор кардани аномалияҳо истифода бурдан мумкин бошад. Аммо он ду ҳилолро ҳамчун ду кластер муайян карда натавонист.

Барои анҷом додани боб чанд алгоритми дигарро кӯтоҳ баррасӣ мекунем.

Мутобиқ кардани омехтаи гауссӣ ба кластерҳои ғайриэллипсоидӣ

Расми 8.20. Мутобиқ кардани омехтаи гауссӣ ба кластерҳои ғайриэллипсоидӣ.

Алгоритмҳои дигари ошкор кардани аномалияҳо ва навгониҳо

Scikit-Learn алгоритмҳои дигари махсуси ошкор кардани аномалияҳо ё навгониҳоро низ татбиқ мекунад.

Fast-MCD — детерминанти ҳадди ақали ковариатсия

Ин алгоритм дар синфи EllipticEnvelope татбиқ шудааст.

Он барои ошкор кардани нуқтаҳои дурмонда, махсусан барои тоза кардани маҷмӯи додаҳо, муфид аст.

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

Ҳамчунин фарз мекунад, ки дар маҷмӯа нуқтаҳои дурмондае ҳастанд, ки аз ин тақсимоти гауссӣ тавлид нашудаанд.

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

Ин равиш лифофаи эллипсоидиро беҳтар баҳогузорӣ мекунад ва дар натиҷа нуқтаҳои дурмондаро беҳтар муайян менамояд.

Ҷангали ҷудокунанда — Isolation forest

Ин алгоритми самараноки ошкор кардани нуқтаҳои дурмонда мебошад, махсусан барои маҷмӯаҳои баландандоза.

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

Дар ҳар гиреҳ:

  1. Як хусусият тасодуфан интихоб мешавад.
  2. Аз байни қиматҳои камтарин ва калонтарини он хусусият як ҳадди тасодуфӣ интихоб мешавад.
  3. Маҷмӯи додаҳо ба ду қисм ҷудо мешавад.

Додаҳо тадриҷан ба қисмҳо бурида мешаванд, то ҳамаи намунаҳо аз ҳам ҷудо гарданд.

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

Омили маҳаллии дурмондагӣ — LOF

Local outlier factor — LOF низ алгоритми хуби ошкор кардани нуқтаҳои дурмонда аст.

Он зичии намунаҳо дар атрофи як намунаи муайянро бо зичии атрофи ҳамсояҳои он муқоиса мекунад.

Аномалия аксаран нисбат ба k ҳамсояи наздиктарини худ ҷудотар ҷойгир шудааст.

SVM-и яксинфӣ — One-class SVM

Ин алгоритм бештар барои ошкор кардани навгониҳо мувофиқ аст.

Ба хотир оред, ки таснифгари SVM-и ядродор аввал ҳамаи намунаҳоро ба таври ғайримустақим ба фазои баландандоза мегузаронад. Баъд дар ин фазо ду синфро бо таснифгари хаттии SVM ҷудо мекунад.

Ба боби онлайнии SVM дар homl.info нигаред.

Азбаски дар ин ҷо танҳо як синфи намунаҳо дорем, алгоритми SVM-и яксинфӣ мекӯшад намунаҳоро дар фазои баландандоза аз ибтидои координатаҳо ҷудо кунад.

Дар фазои аслӣ ин ба ёфтани минтақаи хурде мувофиқ меояд, ки ҳамаи намунаҳоро фаро мегирад.

Агар намунаи нав ба ин минтақа дохил нашавад, аномалия ҳисоб мешавад.

Чанд гиперпараметрро танзим кардан лозим аст: параметрҳои маъмули SVM-и ядродор ва параметри иловагии маржа, ки ба эҳтимоли иштибоҳан нав ҳисоб шудани намунаи воқеан муқаррарӣ вобаста мебошад.

Алгоритм махсусан барои маҷмӯаҳои баландандоза хуб кор мекунад. Аммо мисли дигар SVM-ҳо барои маҷмӯаҳои калон хуб миқёспазир намешавад.

PCA ва усулҳои дигари коҳиши андозанокӣ бо inverse_transform()

Агар хатои бозсозии намунаи муқаррариро бо хатои бозсозии аномалия муқоиса кунед, одатан хатои аномалия хеле калонтар мешавад.

Ин равиши сода ва аксаран хеле самараноки ошкор кардани аномалияҳо мебошад.

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