Вікіпідручник ukwikibooks https://uk.wikibooks.org/wiki/%D0%93%D0%BE%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0_%D1%81%D1%82%D0%BE%D1%80%D1%96%D0%BD%D0%BA%D0%B0 MediaWiki 1.47.0-wmf.22 first-letter Медіа Спеціальна Обговорення Користувач Обговорення користувача Вікіпідручник Обговорення Вікіпідручника Файл Обговорення файлу MediaWiki Обговорення MediaWiki Шаблон Обговорення шаблону Довідка Обговорення довідки Категорія Обговорення категорії Полиця Обговорення полиці Рецепт Обговорення рецепта Субтитри Обговорення субтитрів Модуль Обговорення модуля Подія Обговорення події Вікіпідручник:Портал спільноти 4 1549 41497 41485 2026-10-01T12:42:59Z MediaWiki message delivery 3065 /* Wikidata Sitelink changes in Recent Changes and Watchlist */ нова тема 41497 wikitext text/x-wiki тут був турбо ішак '''Deadline:'''<br /> We are temporarily retaining the old data on [[:d:Property:P1846|P1846]] to allow for a smooth transition. However, to complete the data cleanup on Wikidata, the old [[:d:Property:P1846|P1846]] statements will be removed after '''May 1, 2026'''. Please update your modules and templates before this date to prevent any disruption to your wiki's election articles. Let us know if you have any questions or need assistance with the query logic. Thank you for your help! [[User:ZI Jony|ZI Jony]] using [[Користувач:MediaWiki message delivery|MediaWiki message delivery]] ([[Обговорення користувача:MediaWiki message delivery|обговорення]]) 17:11, 3 квітня 2026 (UTC) <!-- Повідомлення надіслано користувачем ZI Jony@metawiki з використанням списку розсилки на сторінці у https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=29941252 --> == Request for comment (global AI policy) == <bdi lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{int:Please-translate}} A [[:m:Requests for comment/Artificial intelligence policy|request for comment]] is currently being held to decide on a global AI policy. {{int:Feedback-thanks-title}} [[Користувач:MediaWiki message delivery|MediaWiki message delivery]] ([[Обговорення користувача:MediaWiki message delivery|обговорення]]) 00:57, 26 квітня 2026 (UTC) </bdi> <!-- Повідомлення надіслано користувачем Codename Noreste@metawiki з використанням списку розсилки на сторінці у https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30424282 --> == Час проголосувати на виборах 2026 року до U4C == <section begin="announcement-content" /> Виборців з правом голосу запрошують проголосувати на виборах 2026 до [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Координаційного комітету Універсального кодексу поведінки]] (U4C). Більше інформації, зокрема про критерії права голосу, процес голосування, інформацію про кандидатів та посилання на голосування, можна знайти на Мета-вікі на [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026|інформаційній сторінці виборів 2026]]. Голосування завершується 2 червня 2026 о [https://zonestamp.toolforge.org/1780358400 00:00 UTC]. Якщо маєте право голосу, проголосуйте, будь ласка. Результати оголосять 14 червня 2026. -- У співпраці з U4C,<section end="announcement-content" /> [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 17:14, 27 травня 2026 (UTC) <!-- Повідомлення надіслано користувачем Keegan (WMF)@metawiki з використанням списку розсилки на сторінці у https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 --> == RFC about AI-generated content in Wikimedia Commons == <bdi lang="en" dir="ltr">Apologies for writing in English, please help translate this message to your language. You are invited to participate in a [[c:Commons:Requests for comment/Policy update for AI content|request for comment on Wikimedia Commons about a policy update for AI content]]. This may affect files that are uploaded to Wikimedia Commons for use on this project. Thank you. [[m:User:Codename Noreste|Codename Noreste]] ([[m:User talk:Codename Noreste|обговорення]])</bdi> 17:11, 23 червня 2026 (UTC) <!-- Повідомлення надіслано користувачем Codename Noreste@metawiki з використанням списку розсилки на сторінці у https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 --> == <span lang="en" dir="ltr">Deployment of Legal and Safety Contacts Link in the Footer of Your Wiki</span> == <div lang="en" dir="ltr"> <section begin="Message"/> '''Legal & Safety Contacts''' Hello community, the Wikimedia Foundation has provided a [[wmf:Special:MyLanguage/Legal:Wikimedia Foundation Legal and Safety Contact Information|single legal and safety contact page]], to be linked in the footer of your wiki, to ensure access to accurate legal information. This is a regulatory requirement. We have already rolled out links to English, German, Italian, Spanish and other wikis and we will deploy to your wiki soon. [[m:Special:MyLanguage/Wikimedia_Foundation_Legal_and_Safety_Contacts_FAQ|Please read more on the project page]] and leave any comments in this thread or on the [[m:Special:MyLanguage/Talk:Wikimedia Foundation Legal and Safety Contacts FAQ|talk page]]. <section end="Message"/> </div> -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 13:30, 25 червня 2026 (UTC) <!-- Повідомлення надіслано користувачем Sannita (WMF)@metawiki з використанням списку розсилки на сторінці у https://meta.wikimedia.org/w/index.php?title=User:Sannita_(WMF)/Mass_sending_test&oldid=30731267 --> == Request for comment (the future of Abstract Wikipedia) == <bdi lang="en" dir="ltr" class="mw-content-ltr"> Apologies if this has not yet been translated into your wiki's language. {{int:Please-translate}} You are invited to voice your opinions in a [[:m:Requests for comment/The future of Abstract Wikipedia|request for comment about the future of Abstract Wikipedia]]. {{Int:Feedback-thanks-title}} [[:m:User:Kowal2701|Kowal2701]] ([[:m:User talk:Kowal2701|talk]]) 12:24, 24 липня 2026 (UTC) </bdi> <!-- Повідомлення надіслано користувачем DreamRimmer@metawiki з використанням списку розсилки на сторінці у https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 --> == Перемикання серверів: Ваша вікі скоро перейде в режим лише для читання == <section begin="server-switch"/><div class="plainlinks"> [[:m:Special:MyLanguage/Tech/Server switch|Читати це повідомлення іншою мовою]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}] [[foundation:|Фонд Вікімедіа]] перемкне трафік між своїми дата-центрами. Завдяки цьому навіть у випадку катастрофи Вікіпедія та інші вікі Вікімедіа залишаться онлайн. Весь трафік перемкнуть '''{{#time:j xg|2026-09-23|uk}}'''. Тест почнеться о '''[https://zonestamp.toolforge.org/{{#time:U|2026-09-23T14:00|en}} {{#time:H:i e|2026-09-23T14:00}}]'''. На жаль, через деякі обмеження у [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]], у цей час все редагування повинне зупинитись. Ми перепрошуємо за такі незручності та докладаємо всіх зусиль для їх мінімізації у майбутньому. За 30 хвилин до операції у всіх вікі показуватиметься банер. Цей банер буде видимим до завершення операції. Ви можете долучитися до [https://meta.wikimedia.org/w/index.php?title=Special%3ATranslate&group=Centralnotice-tgroup-read_only_banner&task=view&language=&filter=&action=translate перекладу або вичитки] цього тексту. '''Упродовж короткого часу ви зможете читати, але не редагувати, всі вікі.''' * Ви не зможете редагувати {{#time:j xg Y (l)|2026-09-23|uk}}, упродовж близько години. * При намаганні редагувати чи зберегти щось у ці проміжки часу, ви побачите повідомлення про помилку. Ми маємо надію, що у ці хвилини редагування не будуть втрачені, але гарантувати цього не можемо. Якщо ви побачите повідомлення про помилку, будь ласка почекайте, доки все відновиться. Після цього ви зможете зберегти своє редагування. Але про всяк випадок, ми рекомендуємо спочатку створити копію ваших змін. ''Інші ефекти'': * Фонові завдання виконуватимуться повільніше, а деякі можуть зупинитись. Червоні посилання можуть оновлюватися повільніше, ніж зазвичай. Якщо ви створите статтю, на яку вже веде звідкись червоне посилання, воно також залишиться червоним довше, ніж зазвичай. Деякі сценарії з тривалим часом виконання потрібно буде зупинити. * Ми очікуємо, що розгортання коду цього тижня відбудуться, як звичайно. Однак, залежно від ситуації, в той же час можуть відбутися заморожування коду, якщо буде така потреба. * [[mw:Special:MyLanguage/GitLab|GitLab]] буде недоступний на приблизно 90 хвилин. За необхідності, цей проект може бути відкладено. [[wikitech:Switch_Datacenter|З графіком можна ознайомитися на wikitech.wikimedia.org]]. Будь-які зміни будуть оголошені у розкладі. '''Будь ласка, поділіться інформацією про це з вашою спільнотою.'''</div><section end="server-switch"/> [[m:user:Trizek (WMF)|Trizek (WMF)]] 12:58, 15 вересня 2026 (UTC) <!-- Повідомлення надіслано користувачем Trizek (WMF)@metawiki з використанням списку розсилки на сторінці у https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=30513874 --> == Your feedback wanted: Remove ''(Language link added:) and similar'' edits from Special:RecentChanges == ''(Apologies for posting in English. You can help by translating it)'' Hello, I’m Danny from [[:en:w:Wikimedia_Deutschland|Wikimedia Deutschland’s]] [[m:Wikidata_For_Wikimedia_Projects|Wikidata For Wikimedia Projects]] team.<br/> We have been investigating and examining how Wikidata’s use in the [[Special:RecentChanges]] and [[Special:Watchlist]] pages can be made to be more useful, or less ‘noisy’ (fewer edits that have little value to the reader). We are currently exploring to make a change in the volume and the type of Wikidata edits that appear in these pages, and '''we need your feedback''' to help us ensure this is a positive change for the Wikis and won’t disrupt your workflows.<br/> Language links are also known as sitelinks or interlanguage links and describe when a Wikidata item is connected to a Wiki, adding it to the language dropdown tool for other connected Wikis. [[File:Types of Lang Link changes.png|x350px|frame|A variety of "Language Link" edits as seen in the Recent Changes feed]] The request for feedback is whether you support the removal of these language link edits from the Recent Changes and Watchlist feed, or would you oppose such a change and if so, why? Please share you thoughts on the dedicated '''[[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|metawiki Talk page]]'''. Further information about this change: [[m:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|m:Wikidata_For_Wikimedia_Projects/Hide_Language_Link_edits]] Thank you for any participation or feedback you give, -- [[m:User:Danny_Benjafield_(WMDE)|User:Danny Benjafield (WMDE)]] 11:46, 25 вересня 2026 (UTC) <!-- Повідомлення надіслано користувачем Danny Benjafield (WMDE)@metawiki з використанням списку розсилки на сторінці у https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_test_list&oldid=31080832 --> == Wikidata Sitelink changes in Recent Changes and Watchlist == ''(Apologies for cross-posting in English, translating it will help spread the message)'' Editors on group 1 wikis, including Wikiquote, Wikibooks, Wikiversity, Wikivoyage, and Wikisource, will no longer see notifications on [[Special:RecentChanges|Recent Changes]] and [[Special:Watchlist|Watchlist]] when a link to ''another'' language version of a page is added, removed, or changed in its Wikidata item. This change will begin on '''October 5 at 07:00 UTC''' as a two-week trial to reduce high-volume, low-value notifications and make higher-value changes easier to identify. Editors who rely on these notifications should be aware of the change and can share feedback or concerns on the [[m:Wikidata For Wikimedia Projects/Clearer Wikidata Edit Summaries/Hide Language Link edits|project]] or [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|talk page]].<br/>Please reach out if you have any questions, thank you! -- [[User:Danny_Benjafield_(WMDE)|Danny Benjafield (WMDE)]] ([[User_talk:Danny_Benjafield_(WMDE)|talk]]) sent via [[Користувач:MediaWiki message delivery|MediaWiki message delivery]] ([[Обговорення користувача:MediaWiki message delivery|обговорення]]) 12:42, 1 жовтня 2026 (UTC) <!-- Повідомлення надіслано користувачем Danny Benjafield (WMDE)@metawiki з використанням списку розсилки на сторінці у https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_test_list&oldid=31106967 --> 3m9svbrrarni2l3twif200m8yz6rjgr PenuX в R: Базовий посібник з машинного навчання в R 0 8666 41498 2026-10-02T08:35:30Z נתנאל שטרן 7808 Додано базовий посібник з машинного навчання в R 41498 wikitext text/x-wiki = PenuX в R: Базовий посібник з машинного навчання в R = Цей посібник знайомить з основними поняттями машинного навчання та крок за кроком показує, як застосовувати їх у R на невеликих прикладах із вбудованими наборами даних (<code>iris</code> і <code>mtcars</code>). Клінічні дані та поглиблені знання не потрібні: достатньо знати основи R. == Що таке машинне навчання == Машинне навчання — це сукупність методів, за допомогою яких програма вчиться на даних робити прогнози або знаходити закономірності, без того щоб правила прописували вручну. === Дві основні родини === * '''Навчання з учителем (supervised)''': у даних є правильна відповідь (мітка, або цільова змінна), і модель вчиться її передбачати. ** ''Класифікація'': відповідь — це категорія (наприклад, хворий / здоровий або вид квітки). ** ''Регресія'': відповідь — це число (наприклад, витрата пального). * '''Навчання без учителя (unsupervised)''': відомої відповіді немає; модель шукає групи чи закономірності (наприклад, ''кластеризація'' методом k-середніх). === Базовий словник === * '''Ознака (feature)''': стовпець, який використовують для прогнозу (вік, тиск, довжина пелюстки). * '''Цільова змінна (target)''': стовпець, який ми хочемо передбачити. * '''Навчальна вибірка (training set)''': дані, на яких модель вчиться. * '''Тестова вибірка (test set)''': дані, відкладені вбік, які модель не бачила; ними оцінюють модель. * '''Перенавчання (overfitting)''': модель запам'ятовує шум навчальної вибірки і погано працює на нових даних. == Робочий процес у шість кроків == # Визначити задачу та цільову змінну # Підготувати й перевірити дані (пропуски, типи, викиди) # Розділити дані на навчальну й тестову вибірки # Навчити одну або кілька моделей # Оцінити моделі на тестовій вибірці # Інтерпретувати, порівняти та (за потреби) покращити == Підготовка == <syntaxhighlight lang="r"> install.packages(c("caret", "randomForest", "rpart", "e1071")) library(caret) set.seed(42) # робить результати відтворюваними data(iris) str(iris) summary(iris) table(iris$Species) </syntaxhighlight> Набір <code>iris</code> містить 150 квіток трьох видів, описаних чотирма вимірами (довжина й ширина чашолистка та пелюстки). Цільова змінна — <code>Species</code>. == Крок 1: розділити дані == <syntaxhighlight lang="r"> idx <- createDataPartition(iris$Species, p = 0.70, list = FALSE) train <- iris[idx, ] test <- iris[-idx, ] nrow(train) # приблизно 105 nrow(test) # приблизно 45 table(train$Species) </syntaxhighlight> Функція <code>createDataPartition()</code> зберігає однакову частку класів в обох вибірках (''стратифікований'' поділ). == Крок 2: навчити першу модель == <syntaxhighlight lang="r"> ctrl <- trainControl(method = "cv", number = 5) # перехресна перевірка на 5 частинах tree_model <- train(Species ~ ., data = train, method = "rpart", trControl = ctrl) tree_model </syntaxhighlight> Функція <code>train()</code> з пакета caret пропонує однаковий інтерфейс для сотень алгоритмів: достатньо змінити аргумент <code>method</code>. == Крок 3: оцінити на тестовій вибірці == <syntaxhighlight lang="r"> predictions <- predict(tree_model, newdata = test) confusionMatrix(predictions, test$Species) </syntaxhighlight> ''Матриця помилок'' порівнює передбачені та справжні класи. З неї обчислюють: * '''Точність (accuracy)''': частка правильних прогнозів * '''Чутливість (sensitivity)''': серед позитивних випадків, скільки розпізнано * '''Специфічність (specificity)''': серед негативних випадків, скільки розпізнано Якщо класи дуже незбалансовані (наприклад, рідкісна хвороба), самої точності замало: завжди перевіряйте також чутливість і специфічність. == Крок 4: спробувати інші моделі та порівняти == <syntaxhighlight lang="r"> set.seed(42) rf_model <- train(Species ~ ., data = train, method = "rf", trControl = ctrl) set.seed(42) knn_model <- train(Species ~ ., data = train, method = "knn", trControl = ctrl, preProcess = c("center", "scale")) comparison <- resamples(list(Tree = tree_model, RandomForest = rf_model, kNN = knn_model)) summary(comparison) bwplot(comparison) </syntaxhighlight> Корисні зауваження: * '''kNN''' використовує відстані, тому потребує стандартизації (<code>center</code> і <code>scale</code>). * '''Дерева рішень''' і '''випадковий ліс (Random Forest)''' стандартизації не потребують. * Оберіть модель із найкращими результатами за перехресної перевірки, а потім перевірте її '''лише один раз''' на тестовій вибірці. == Крок 5: які змінні важливі? == <syntaxhighlight lang="r"> varImp(rf_model) plot(varImp(rf_model)) </syntaxhighlight> == Приклад регресії == Передбачимо витрату пального (<code>mpg</code>) автомобілів із набору <code>mtcars</code>. <syntaxhighlight lang="r"> data(mtcars) set.seed(42) idx <- createDataPartition(mtcars$mpg, p = 0.75, list = FALSE) train <- mtcars[idx, ] test <- mtcars[-idx, ] lm_model <- lm(mpg ~ wt + hp, data = train) summary(lm_model) pred <- predict(lm_model, newdata = test) # Середня помилка прогнозу rmse <- sqrt(mean((test$mpg - pred)^2)) mae <- mean(abs(test$mpg - pred)) c(RMSE = rmse, MAE = mae) </syntaxhighlight> У регресії використовують метрики помилки: '''RMSE''' (корінь із середньоквадратичної помилки, сильніше карає великі помилки) і '''MAE''' (середня абсолютна помилка). == Приклад навчання без учителя: k-середніх == <syntaxhighlight lang="r"> X <- scale(iris[, 1:4]) # лише виміри, без виду set.seed(42) km <- kmeans(X, centers = 3, nstart = 25) table(Cluster = km$cluster, Species = iris$Species) </syntaxhighlight> Модель не бачила видів, проте кластери значною мірою відтворюють їхній поділ. Так буває не завжди: кластери не обов'язково збігаються зі справжніми категоріями. == Типові помилки, яких слід уникати == * '''Оцінювання на навчальних даних''': завищує результати. * '''Витік інформації (data leakage)''': обчислення середніх, масштабування чи заповнення пропусків на всьому наборі до поділу. Обчислюйте їх лише на навчальній вибірці й застосовуйте до тестової. * '''Забути про seed''' (<code>set.seed()</code>): без нього результати змінюються за кожного запуску. * '''Використання лише точності''' за незбалансованих класів. * '''Змішування кореляції та причинності''': добра прогностична модель не пояснює, чому так. * '''Багаторазове використання тестової вибірки''' для вибору моделі: вона фактично стає другою навчальною вибіркою. == Міні-тест для самоперевірки == * У чому різниця між класифікацією та регресією? * Навіщо відкладати тестову вибірку? * Про що свідчить велика різниця між точністю на навчальній і тестовій вибірках? * Чому kNN потребує стандартизації, а випадковий ліс — ні? * Чому k-середніх — метод навчання без учителя? <div class="mw-collapsible mw-collapsed" data-expandtext="Показати відповіді" data-collapsetext="Сховати відповіді"> # Класифікація передбачає категорію, регресія — число. # Щоб оцінити якість на даних, яких модель не бачила. # Про перенавчання: модель запам'ятала навчальну вибірку. # kNN ґрунтується на відстанях, які залежать від масштабу змінних; дерева ділять за порогами й не залежать від масштабу. # Тому що він не використовує цільову змінну для утворення груп. </div> == Вправи == # Повторіть процес на наборі <code>iris</code> із <code>p = 0.8</code>. Чи змінилися результати? # Додайте до порівняння модель SVM (<code>method = "svmRadial"</code>). # На наборі <code>mtcars</code> додайте змінну <code>cyl</code> до лінійної моделі та порівняйте RMSE. # Спробуйте k-середніх із <code>centers = 2</code> і <code>centers = 4</code>: як змінюється таблиця відносно видів? # Повторіть вправу 1 із <code>set.seed(1)</code> і <code>set.seed(2)</code> та порівняйте мінливість результатів. == Застереження == Набори даних тут навчальні. Прогностична модель у сфері охорони здоров'я перед будь-яким реальним використанням потребує клінічної валідації, контролю якості даних і відповідності нормативним вимогам. == Проєкт PenuX == Репозиторій PenuX: https://github.com/netanelcyber/penux Сайт PenuX: https://penux.uk dge46zp6b83uyflfefs7fz1lotfox2q 41499 41498 2026-10-02T08:37:11Z נתנאל שטרן 7808 Interwiki link to Italian version 41499 wikitext text/x-wiki = PenuX в R: Базовий посібник з машинного навчання в R = Цей посібник знайомить з основними поняттями машинного навчання та крок за кроком показує, як застосовувати їх у R на невеликих прикладах із вбудованими наборами даних (<code>iris</code> і <code>mtcars</code>). Клінічні дані та поглиблені знання не потрібні: достатньо знати основи R. == Що таке машинне навчання == Машинне навчання — це сукупність методів, за допомогою яких програма вчиться на даних робити прогнози або знаходити закономірності, без того щоб правила прописували вручну. === Дві основні родини === * '''Навчання з учителем (supervised)''': у даних є правильна відповідь (мітка, або цільова змінна), і модель вчиться її передбачати. ** ''Класифікація'': відповідь — це категорія (наприклад, хворий / здоровий або вид квітки). ** ''Регресія'': відповідь — це число (наприклад, витрата пального). * '''Навчання без учителя (unsupervised)''': відомої відповіді немає; модель шукає групи чи закономірності (наприклад, ''кластеризація'' методом k-середніх). === Базовий словник === * '''Ознака (feature)''': стовпець, який використовують для прогнозу (вік, тиск, довжина пелюстки). * '''Цільова змінна (target)''': стовпець, який ми хочемо передбачити. * '''Навчальна вибірка (training set)''': дані, на яких модель вчиться. * '''Тестова вибірка (test set)''': дані, відкладені вбік, які модель не бачила; ними оцінюють модель. * '''Перенавчання (overfitting)''': модель запам'ятовує шум навчальної вибірки і погано працює на нових даних. == Робочий процес у шість кроків == # Визначити задачу та цільову змінну # Підготувати й перевірити дані (пропуски, типи, викиди) # Розділити дані на навчальну й тестову вибірки # Навчити одну або кілька моделей # Оцінити моделі на тестовій вибірці # Інтерпретувати, порівняти та (за потреби) покращити == Підготовка == <syntaxhighlight lang="r"> install.packages(c("caret", "randomForest", "rpart", "e1071")) library(caret) set.seed(42) # робить результати відтворюваними data(iris) str(iris) summary(iris) table(iris$Species) </syntaxhighlight> Набір <code>iris</code> містить 150 квіток трьох видів, описаних чотирма вимірами (довжина й ширина чашолистка та пелюстки). Цільова змінна — <code>Species</code>. == Крок 1: розділити дані == <syntaxhighlight lang="r"> idx <- createDataPartition(iris$Species, p = 0.70, list = FALSE) train <- iris[idx, ] test <- iris[-idx, ] nrow(train) # приблизно 105 nrow(test) # приблизно 45 table(train$Species) </syntaxhighlight> Функція <code>createDataPartition()</code> зберігає однакову частку класів в обох вибірках (''стратифікований'' поділ). == Крок 2: навчити першу модель == <syntaxhighlight lang="r"> ctrl <- trainControl(method = "cv", number = 5) # перехресна перевірка на 5 частинах tree_model <- train(Species ~ ., data = train, method = "rpart", trControl = ctrl) tree_model </syntaxhighlight> Функція <code>train()</code> з пакета caret пропонує однаковий інтерфейс для сотень алгоритмів: достатньо змінити аргумент <code>method</code>. == Крок 3: оцінити на тестовій вибірці == <syntaxhighlight lang="r"> predictions <- predict(tree_model, newdata = test) confusionMatrix(predictions, test$Species) </syntaxhighlight> ''Матриця помилок'' порівнює передбачені та справжні класи. З неї обчислюють: * '''Точність (accuracy)''': частка правильних прогнозів * '''Чутливість (sensitivity)''': серед позитивних випадків, скільки розпізнано * '''Специфічність (specificity)''': серед негативних випадків, скільки розпізнано Якщо класи дуже незбалансовані (наприклад, рідкісна хвороба), самої точності замало: завжди перевіряйте також чутливість і специфічність. == Крок 4: спробувати інші моделі та порівняти == <syntaxhighlight lang="r"> set.seed(42) rf_model <- train(Species ~ ., data = train, method = "rf", trControl = ctrl) set.seed(42) knn_model <- train(Species ~ ., data = train, method = "knn", trControl = ctrl, preProcess = c("center", "scale")) comparison <- resamples(list(Tree = tree_model, RandomForest = rf_model, kNN = knn_model)) summary(comparison) bwplot(comparison) </syntaxhighlight> Корисні зауваження: * '''kNN''' використовує відстані, тому потребує стандартизації (<code>center</code> і <code>scale</code>). * '''Дерева рішень''' і '''випадковий ліс (Random Forest)''' стандартизації не потребують. * Оберіть модель із найкращими результатами за перехресної перевірки, а потім перевірте її '''лише один раз''' на тестовій вибірці. == Крок 5: які змінні важливі? == <syntaxhighlight lang="r"> varImp(rf_model) plot(varImp(rf_model)) </syntaxhighlight> == Приклад регресії == Передбачимо витрату пального (<code>mpg</code>) автомобілів із набору <code>mtcars</code>. <syntaxhighlight lang="r"> data(mtcars) set.seed(42) idx <- createDataPartition(mtcars$mpg, p = 0.75, list = FALSE) train <- mtcars[idx, ] test <- mtcars[-idx, ] lm_model <- lm(mpg ~ wt + hp, data = train) summary(lm_model) pred <- predict(lm_model, newdata = test) # Середня помилка прогнозу rmse <- sqrt(mean((test$mpg - pred)^2)) mae <- mean(abs(test$mpg - pred)) c(RMSE = rmse, MAE = mae) </syntaxhighlight> У регресії використовують метрики помилки: '''RMSE''' (корінь із середньоквадратичної помилки, сильніше карає великі помилки) і '''MAE''' (середня абсолютна помилка). == Приклад навчання без учителя: k-середніх == <syntaxhighlight lang="r"> X <- scale(iris[, 1:4]) # лише виміри, без виду set.seed(42) km <- kmeans(X, centers = 3, nstart = 25) table(Cluster = km$cluster, Species = iris$Species) </syntaxhighlight> Модель не бачила видів, проте кластери значною мірою відтворюють їхній поділ. Так буває не завжди: кластери не обов'язково збігаються зі справжніми категоріями. == Типові помилки, яких слід уникати == * '''Оцінювання на навчальних даних''': завищує результати. * '''Витік інформації (data leakage)''': обчислення середніх, масштабування чи заповнення пропусків на всьому наборі до поділу. Обчислюйте їх лише на навчальній вибірці й застосовуйте до тестової. * '''Забути про seed''' (<code>set.seed()</code>): без нього результати змінюються за кожного запуску. * '''Використання лише точності''' за незбалансованих класів. * '''Змішування кореляції та причинності''': добра прогностична модель не пояснює, чому так. * '''Багаторазове використання тестової вибірки''' для вибору моделі: вона фактично стає другою навчальною вибіркою. == Міні-тест для самоперевірки == * У чому різниця між класифікацією та регресією? * Навіщо відкладати тестову вибірку? * Про що свідчить велика різниця між точністю на навчальній і тестовій вибірках? * Чому kNN потребує стандартизації, а випадковий ліс — ні? * Чому k-середніх — метод навчання без учителя? <div class="mw-collapsible mw-collapsed" data-expandtext="Показати відповіді" data-collapsetext="Сховати відповіді"> # Класифікація передбачає категорію, регресія — число. # Щоб оцінити якість на даних, яких модель не бачила. # Про перенавчання: модель запам'ятала навчальну вибірку. # kNN ґрунтується на відстанях, які залежать від масштабу змінних; дерева ділять за порогами й не залежать від масштабу. # Тому що він не використовує цільову змінну для утворення груп. </div> == Вправи == # Повторіть процес на наборі <code>iris</code> із <code>p = 0.8</code>. Чи змінилися результати? # Додайте до порівняння модель SVM (<code>method = "svmRadial"</code>). # На наборі <code>mtcars</code> додайте змінну <code>cyl</code> до лінійної моделі та порівняйте RMSE. # Спробуйте k-середніх із <code>centers = 2</code> і <code>centers = 4</code>: як змінюється таблиця відносно видів? # Повторіть вправу 1 із <code>set.seed(1)</code> і <code>set.seed(2)</code> та порівняйте мінливість результатів. == Застереження == Набори даних тут навчальні. Прогностична модель у сфері охорони здоров'я перед будь-яким реальним використанням потребує клінічної валідації, контролю якості даних і відповідності нормативним вимогам. == Проєкт PenuX == Репозиторій PenuX: https://github.com/netanelcyber/penux Сайт PenuX: https://penux.uk [[it:PenuX in R: Guida di base al Machine Learning in R]] f5n35vsujjjxmz5lv907tibfv0h1q61