[{"data":1,"prerenderedAt":16949},["ShallowReactive",2],{"navigation_docs":3,"-ai-python-logistic-regression-classification-classification-basics":5180,"-ai-python-logistic-regression-classification-classification-basics-surround":16944},[4,1707,2084,2556,2737,2863,3070,3192,3242,3299,3333,3459,3536,3550,3689,3983,4060,4793,4968,5061,5114,5176],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"C#","i-devicon-csharp","\u002Fcsharp","01.csharp",[10,13,60,90,120,202,219,253,379,404,457,650,1364,1654,1703],{"title":11,"path":7,"stem":12},"C# та .NET","01.csharp\u002Findex",{"title":14,"icon":15,"path":16,"stem":17,"children":18,"page":59},"Fundamentals","i-lucide-book-open","\u002Fcsharp\u002Ffundamentals","01.csharp\u002F01.fundamentals",[19,23,27,31,35,39,43,47,51,55],{"title":20,"path":21,"stem":22},"Вступ до екосистеми .NET","\u002Fcsharp\u002Ffundamentals\u002Fintroduction-to-ecosystem","01.csharp\u002F01.fundamentals\u002F01.introduction-to-ecosystem",{"title":24,"path":25,"stem":26},"Структура програми на C#","\u002Fcsharp\u002Ffundamentals\u002Fprogram-structure","01.csharp\u002F01.fundamentals\u002F02.program-structure",{"title":28,"path":29,"stem":30},"Змінні та Типи Даних","\u002Fcsharp\u002Ffundamentals\u002Fvariables-data-types","01.csharp\u002F01.fundamentals\u002F03.variables-data-types",{"title":32,"path":33,"stem":34},"Масиви","\u002Fcsharp\u002Ffundamentals\u002Farrays","01.csharp\u002F01.fundamentals\u002F04.arrays",{"title":36,"path":37,"stem":38},"Strings & Text Handling","\u002Fcsharp\u002Ffundamentals\u002Fstrings-text-handling","01.csharp\u002F01.fundamentals\u002F05.strings-text-handling",{"title":40,"path":41,"stem":42},"Дати і Час","\u002Fcsharp\u002Ffundamentals\u002Fdates-time-handling","01.csharp\u002F01.fundamentals\u002F06.dates-time-handling",{"title":44,"path":45,"stem":46},"Потік Керування","\u002Fcsharp\u002Ffundamentals\u002Fcontrol-flow","01.csharp\u002F01.fundamentals\u002F07.control-flow",{"title":48,"path":49,"stem":50},"Методи","\u002Fcsharp\u002Ffundamentals\u002Fmethods","01.csharp\u002F01.fundamentals\u002F08.methods",{"title":52,"path":53,"stem":54},"Основи Відлагодження","\u002Fcsharp\u002Ffundamentals\u002Fdebugging-basics","01.csharp\u002F01.fundamentals\u002F09.debugging-basics",{"title":56,"path":57,"stem":58},"Інтерактивна Консоль (Classic)","\u002Fcsharp\u002Ffundamentals\u002Finteractive-console","01.csharp\u002F01.fundamentals\u002F10.interactive-console",false,{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":59},"OOP","i-lucide-box","\u002Fcsharp\u002Foop","01.csharp\u002F02.oop",[66,70,74,78,82,86],{"title":67,"path":68,"stem":69},"Package Management (Управління Пакетами)","\u002Fcsharp\u002Foop\u002Fpackage-management","01.csharp\u002F02.oop\u002F01.package-management",{"title":71,"path":72,"stem":73},"Класи та Об'єкти","\u002Fcsharp\u002Foop\u002Fclasses-objects","01.csharp\u002F02.oop\u002F02.classes-objects",{"title":75,"path":76,"stem":77},"Властивості та Поля","\u002Fcsharp\u002Foop\u002Fproperties-fields","01.csharp\u002F02.oop\u002F03.properties-fields",{"title":79,"path":80,"stem":81},"Стовпи ООП","\u002Fcsharp\u002Foop\u002Foop-pillars","01.csharp\u002F02.oop\u002F04.oop-pillars",{"title":83,"path":84,"stem":85},"Advanced Types","\u002Fcsharp\u002Foop\u002Fadvanced-types","01.csharp\u002F02.oop\u002F05.advanced-types",{"title":87,"path":88,"stem":89},"Namespaces (Простори Імен)","\u002Fcsharp\u002Foop\u002Fnamespaces","01.csharp\u002F02.oop\u002F06.namespaces",{"title":91,"icon":92,"path":93,"stem":94,"children":95,"page":59},"Advanced Core","i-lucide-zap","\u002Fcsharp\u002Fadvanced-core","01.csharp\u002F03.advanced-core",[96,100,104,108,112,116],{"title":97,"path":98,"stem":99},"Generics (Узагальнення)","\u002Fcsharp\u002Fadvanced-core\u002Fgenerics","01.csharp\u002F03.advanced-core\u002F01.generics",{"title":101,"path":102,"stem":103},"Делегати, Події та Лямбда-вирази","\u002Fcsharp\u002Fadvanced-core\u002Fdelegates-events-lambdas","01.csharp\u002F03.advanced-core\u002F02.delegates-events-lambdas",{"title":105,"path":106,"stem":107},"Interfaces Deep Dive (Інтерфейси: Поглиблений Розгляд)","\u002Fcsharp\u002Fadvanced-core\u002Finterfaces-deep-dive","01.csharp\u002F03.advanced-core\u002F03.interfaces-deep-dive",{"title":109,"path":110,"stem":111},"Обробка Винятків","\u002Fcsharp\u002Fadvanced-core\u002Fexception-handling","01.csharp\u002F03.advanced-core\u002F04.exception-handling",{"title":113,"path":114,"stem":115},"Pattern Matching","\u002Fcsharp\u002Fadvanced-core\u002Fpattern-matching","01.csharp\u002F03.advanced-core\u002F05.pattern-matching",{"title":117,"path":118,"stem":119},"Додаткові Можливості C#","\u002Fcsharp\u002Fadvanced-core\u002Fadditional-features","01.csharp\u002F03.advanced-core\u002F06.additional-features",{"title":121,"icon":122,"path":123,"stem":124,"children":125,"page":59},"Architecture Best Practices","i-lucide-building-2","\u002Fcsharp\u002Farchitecture-best-practices","01.csharp\u002F04.architecture-best-practices",[126,130,149,153,157,161,165,169],{"title":127,"path":128,"stem":129},"Software Design Principles (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fsoftware-design-principles","01.csharp\u002F04.architecture-best-practices\u002F01.software-design-principles",{"title":131,"icon":132,"path":133,"stem":134,"children":135,"page":59},"Design Patterns","i-lucide-folder","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns",[136],{"title":137,"icon":132,"path":138,"stem":139,"children":140,"page":59},"Creational","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational",[141,145],{"title":142,"path":143,"stem":144},"Singleton (Одинак)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fsingleton","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F01.singleton",{"title":146,"path":147,"stem":148},"Builder (Будівельник)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fbuilder","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F02.builder",{"title":150,"path":151,"stem":152},"Building Professional CLIs","\u002Fcsharp\u002Farchitecture-best-practices\u002Fbuilding-professional-clis","01.csharp\u002F04.architecture-best-practices\u002F03.building-professional-clis",{"title":154,"path":155,"stem":156},"Validation & Flow Control","\u002Fcsharp\u002Farchitecture-best-practices\u002Fvalidation-flow-control","01.csharp\u002F04.architecture-best-practices\u002F04.validation-flow-control",{"title":158,"path":159,"stem":160},"The Modern .NET Host (Microsoft.Extensions)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fmodern-dotnet-host","01.csharp\u002F04.architecture-best-practices\u002F05.modern-dotnet-host",{"title":162,"path":163,"stem":164},"Data Mapper: Repository та DAO патерни (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part1","01.csharp\u002F04.architecture-best-practices\u002F06.data-mapper-part1",{"title":166,"path":167,"stem":168},"Data Mapper: Repository та DAO патерни (Частина 2)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part2","01.csharp\u002F04.architecture-best-practices\u002F07.data-mapper-part2",{"title":170,"icon":132,"path":171,"stem":172,"children":173,"page":59},"Di Ioc","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc",[174,178,182,186,190,194,198],{"title":175,"path":176,"stem":177},"Проблема залежностей та Інверсія Контролю","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fthe-dependency-problem","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F01.the-dependency-problem",{"title":179,"path":180,"stem":181},"Будуємо власний Service Container","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fbuild-your-own-container","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F02.build-your-own-container",{"title":183,"path":184,"stem":185},"Service Locator: Паттерн та Анти-паттерн","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-locator-pattern","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F03.service-locator-pattern",{"title":187,"path":188,"stem":189},"Паттерни Dependency Injection","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdependency-injection-patterns","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F04.dependency-injection-patterns",{"title":191,"path":192,"stem":193},"Microsoft DI: IServiceCollection та IServiceProvider","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fmicrosoft-di-deep-dive","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F05.microsoft-di-deep-dive",{"title":195,"path":196,"stem":197},"Service Lifetimes та Scopes","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-lifetimes-and-scopes","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F06.service-lifetimes-and-scopes",{"title":199,"path":200,"stem":201},"DI Анти-паттерни та Найкращі Практики","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdi-anti-patterns-and-best-practices","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F07.di-anti-patterns-and-best-practices",{"title":203,"icon":132,"path":204,"stem":205,"children":206,"page":59},"Standard Library","\u002Fcsharp\u002Fstandard-library","01.csharp\u002F05.standard-library",[207,211,215],{"title":208,"path":209,"stem":210},"Collections (Колекції)","\u002Fcsharp\u002Fstandard-library\u002Fcollections","01.csharp\u002F05.standard-library\u002F01.collections",{"title":212,"path":213,"stem":214},"High Performance Types (Високопродуктивні Типи)","\u002Fcsharp\u002Fstandard-library\u002Fhigh-performance-types","01.csharp\u002F05.standard-library\u002F02.high-performance-types",{"title":216,"path":217,"stem":218},"LINQ (Language Integrated Query)","\u002Fcsharp\u002Fstandard-library\u002Flinq","01.csharp\u002F05.standard-library\u002F03.linq",{"title":220,"icon":221,"path":222,"stem":223,"children":224,"page":59},"System Internals Concurrency","i-lucide-server","\u002Fcsharp\u002Fsystem-internals-concurrency","01.csharp\u002F06.system-internals-concurrency",[225,229,233,237,241,245,249],{"title":226,"path":227,"stem":228},"Memory Management","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmemory-management","01.csharp\u002F06.system-internals-concurrency\u002F01.memory-management",{"title":230,"path":231,"stem":232},"Reflection API: System.Type та Метадані","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Freflection-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F02.reflection-fundamentals",{"title":234,"path":235,"stem":236},"Attributes та Dynamic Language Runtime","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fattributes-dynamic","01.csharp\u002F06.system-internals-concurrency\u002F03.attributes-dynamic",{"title":238,"path":239,"stem":240},"Expression Trees: Швидка Альтернатива Рефлексії","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fexpression-trees-compiled","01.csharp\u002F06.system-internals-concurrency\u002F04.expression-trees-compiled",{"title":242,"path":243,"stem":244},"Source Generators: Compile-Time Code Generation","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsource-generators","01.csharp\u002F06.system-internals-concurrency\u002F05.source-generators",{"title":246,"path":247,"stem":248},"Multithreading Fundamentals","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmultithreading-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F06.multithreading-fundamentals",{"title":250,"path":251,"stem":252},"Synchronization Primitives","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsynchronization-primitives","01.csharp\u002F06.system-internals-concurrency\u002F07.synchronization-primitives",{"title":254,"icon":255,"path":256,"stem":257,"children":258,"page":59},"System Programming Windows","i-lucide-cpu","\u002Fcsharp\u002Fsystem-programming-windows","01.csharp\u002F07.system-programming-windows",[259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343,347,351,355,359,363,367,371,375],{"title":260,"path":261,"stem":262},"Як Працює Операційна Система","\u002Fcsharp\u002Fsystem-programming-windows\u002Fhow-os-works","01.csharp\u002F07.system-programming-windows\u002F01.how-os-works",{"title":264,"path":265,"stem":266},"Процеси в .NET — API та Запуск","\u002Fcsharp\u002Fsystem-programming-windows\u002Fprocesses-in-dotnet","01.csharp\u002F07.system-programming-windows\u002F02.processes-in-dotnet",{"title":268,"path":269,"stem":270},"Процеси в .NET — IPC та Міжпроцесна Комунікація","\u002Fcsharp\u002Fsystem-programming-windows\u002F02a.processes-ipc","01.csharp\u002F07.system-programming-windows\u002F02a.processes-ipc",{"title":272,"path":273,"stem":274},"Application Domains та Збірки — AppDomain і AssemblyLoadContext","\u002Fcsharp\u002Fsystem-programming-windows\u002Fappdomains-assemblies","01.csharp\u002F07.system-programming-windows\u002F03.appdomains-assemblies",{"title":276,"path":277,"stem":278},"Application Domains та Збірки — Plug-in Система з Hot-Reload","\u002Fcsharp\u002Fsystem-programming-windows\u002F03a.appdomains-plugin-system","01.csharp\u002F07.system-programming-windows\u002F03a.appdomains-plugin-system",{"title":280,"path":281,"stem":282},"Потоки — Основи та API Thread","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-fundamentals","01.csharp\u002F07.system-programming-windows\u002F04.thread-fundamentals",{"title":284,"path":285,"stem":286},"Потоки — Lifecycle, Пріоритети та Безпечне Завершення","\u002Fcsharp\u002Fsystem-programming-windows\u002F04a.thread-lifecycle-priorities","01.csharp\u002F07.system-programming-windows\u002F04a.thread-lifecycle-priorities",{"title":288,"path":289,"stem":290},"Проблеми Спільного Стану — Race Condition та Data Race","\u002Fcsharp\u002Fsystem-programming-windows\u002Fshared-state-problems","01.csharp\u002F07.system-programming-windows\u002F05.shared-state-problems",{"title":292,"path":293,"stem":294},"Проблеми Спільного Стану — Memory Model та volatile","\u002Fcsharp\u002Fsystem-programming-windows\u002F05a.shared-state-memory-model","01.csharp\u002F07.system-programming-windows\u002F05a.shared-state-memory-model",{"title":296,"path":297,"stem":298},"Синхронізація — Monitor, lock та еволюція примітивів","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-fundamentals","01.csharp\u002F07.system-programming-windows\u002F06.synchronization-fundamentals",{"title":300,"path":301,"stem":302},"Синхронізація — Наскрізний Приклад та Deadlock Detection","\u002Fcsharp\u002Fsystem-programming-windows\u002F06a.synchronization-walkthrough","01.csharp\u002F07.system-programming-windows\u002F06a.synchronization-walkthrough",{"title":304,"path":305,"stem":306},"Синхронізація — Mutex, Semaphore та Event-Based Primitives","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-advanced","01.csharp\u002F07.system-programming-windows\u002F07.synchronization-advanced",{"title":308,"path":309,"stem":310},"Синхронізація — Interlocked, Volatile та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002F07a.synchronization-advanced-walkthrough","01.csharp\u002F07.system-programming-windows\u002F07a.synchronization-advanced-walkthrough",{"title":312,"path":313,"stem":314},"Interlocked, CAS та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002Finterlocked-cas-lockfree","01.csharp\u002F07.system-programming-windows\u002F08.interlocked-cas-lockfree",{"title":316,"path":317,"stem":318},"Volatile, Memory Model та Spinning","\u002Fcsharp\u002Fsystem-programming-windows\u002F08a.volatile-memory-model","01.csharp\u002F07.system-programming-windows\u002F08a.volatile-memory-model",{"title":320,"path":321,"stem":322},"ThreadPool — Пул Потоків для Ефективного Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-pool","01.csharp\u002F07.system-programming-windows\u002F09.thread-pool",{"title":324,"path":325,"stem":326},"ThreadPool — Просунуті Сценарії та Внутрішня Будова","\u002Fcsharp\u002Fsystem-programming-windows\u002F09a.thread-pool-advanced","01.csharp\u002F07.system-programming-windows\u002F09a.thread-pool-advanced",{"title":328,"path":329,"stem":330},"Concurrent та Immutable Collections","\u002Fcsharp\u002Fsystem-programming-windows\u002Fconcurrent-collections","01.csharp\u002F07.system-programming-windows\u002F10.concurrent-collections",{"title":332,"path":333,"stem":334},"TPL, Task та Композиція — Від Thread до Task","\u002Fcsharp\u002Fsystem-programming-windows\u002Ftpl-parallel-plinq","01.csharp\u002F07.system-programming-windows\u002F11.tpl-parallel-plinq",{"title":336,"path":337,"stem":338},"Parallel Class та PLINQ — Data Parallelism","\u002Fcsharp\u002Fsystem-programming-windows\u002F11a.tpl-parallel-plinq-advanced","01.csharp\u002F07.system-programming-windows\u002F11a.tpl-parallel-plinq-advanced",{"title":340,"path":341,"stem":342},"Async\u002FAwait — Фундамент Асинхронного Програмування","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-fundamentals","01.csharp\u002F07.system-programming-windows\u002F12.async-fundamentals",{"title":344,"path":345,"stem":346},"SynchronizationContext та ConfigureAwait — Контекст Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-context-configureawait","01.csharp\u002F07.system-programming-windows\u002F13.async-context-configureawait",{"title":348,"path":349,"stem":350},"Async — Просунуті Паттерни","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-advanced","01.csharp\u002F07.system-programming-windows\u002F14.async-advanced",{"title":352,"path":353,"stem":354},"System.Threading.Channels — Async Producer-Consumer","\u002Fcsharp\u002Fsystem-programming-windows\u002Fchannels","01.csharp\u002F07.system-programming-windows\u002F15.channels",{"title":356,"path":357,"stem":358},"Асинхронна Синхронізація","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-synchronization","01.csharp\u002F07.system-programming-windows\u002F16.async-synchronization",{"title":360,"path":361,"stem":362},"Unsafe Code та Вказівники","\u002Fcsharp\u002Fsystem-programming-windows\u002Funsafe-code","01.csharp\u002F07.system-programming-windows\u002F17.unsafe-code",{"title":364,"path":365,"stem":366},"P\u002FInvoke та Windows API — Міст між .NET та Native Code","\u002Fcsharp\u002Fsystem-programming-windows\u002Fpinvoke-winapi","01.csharp\u002F07.system-programming-windows\u002F18.pinvoke-winapi",{"title":368,"path":369,"stem":370},"Реєстр Windows — Центральна База Конфігурації Системи","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-registry","01.csharp\u002F07.system-programming-windows\u002F19.windows-registry",{"title":372,"path":373,"stem":374},"Windows Hooks, Hotkeys та Services — Глибока Інтеграція з ОС","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-hooks-services","01.csharp\u002F07.system-programming-windows\u002F20.windows-hooks-services",{"title":376,"path":377,"stem":378},"Системне Програмування C# (Windows) — 07.system-programming-windows","\u002Fcsharp\u002Fsystem-programming-windows\u002Fimplementation_plan","01.csharp\u002F07.system-programming-windows\u002Fimplementation_plan",{"title":380,"icon":132,"path":381,"stem":382,"children":383,"page":59},"Io","\u002Fcsharp\u002Fio","01.csharp\u002F08.io",[384,388,392,396,400],{"title":385,"path":386,"stem":387},"8.1.1. Основи роботи з файловою системою","\u002Fcsharp\u002Fio\u002Ffile-system-basics","01.csharp\u002F08.io\u002F01.file-system-basics",{"title":389,"path":390,"stem":391},"8.1.2. Потоки (Streams) та Серіалізація Даних","\u002Fcsharp\u002Fio\u002Fstreams-serialization","01.csharp\u002F08.io\u002F02.streams-serialization",{"title":393,"path":394,"stem":395},"8.2.1. JSON Serialization з System.Text.Json","\u002Fcsharp\u002Fio\u002Fjson-serialization","01.csharp\u002F08.io\u002F03.json-serialization",{"title":397,"path":398,"stem":399},"8.2.2. XML Serialization та LINQ to XML","\u002Fcsharp\u002Fio\u002Fxml-serialization","01.csharp\u002F08.io\u002F04.xml-serialization",{"title":401,"path":402,"stem":403},"8.2.3. Binary Serialization: MessagePack та Protocol Buffers","\u002Fcsharp\u002Fio\u002Fbinary-serialization","01.csharp\u002F08.io\u002F05.binary-serialization",{"title":405,"icon":132,"path":406,"stem":407,"children":408,"page":59},"Ado Net","\u002Fcsharp\u002Fado-net","01.csharp\u002F09.ado-net",[409,413,417,421,425,429,433,437,441,445,449,453],{"title":410,"path":411,"stem":412},"9.1. Введення в ADO.NET","\u002Fcsharp\u002Fado-net\u002Fintroduction-to-adonet","01.csharp\u002F09.ado-net\u002F01.introduction-to-adonet",{"title":414,"path":415,"stem":416},"9.2. Клас DbConnection — з'єднання з базою даних","\u002Fcsharp\u002Fado-net\u002Fconnection","01.csharp\u002F09.ado-net\u002F02.connection",{"title":418,"path":419,"stem":420},"9.3. Клас DbCommand — виконання SQL-запитів","\u002Fcsharp\u002Fado-net\u002Fcommand-and-queries","01.csharp\u002F09.ado-net\u002F03.command-and-queries",{"title":422,"path":423,"stem":424},"9.4. Клас DbDataReader — ефективне читання даних","\u002Fcsharp\u002Fado-net\u002Fdatareader","01.csharp\u002F09.ado-net\u002F04.datareader",{"title":426,"path":427,"stem":428},"9.5. Параметризовані запити та захист від SQL Injection","\u002Fcsharp\u002Fado-net\u002Fparameters-and-sql-injection","01.csharp\u002F09.ado-net\u002F05.parameters-and-sql-injection",{"title":430,"path":431,"stem":432},"9.6. Транзакції в ADO.NET","\u002Fcsharp\u002Fado-net\u002Ftransactions","01.csharp\u002F09.ado-net\u002F06.transactions",{"title":434,"path":435,"stem":436},"9.7. DbProviderFactory — провайдер-незалежний код","\u002Fcsharp\u002Fado-net\u002Fprovider-factory","01.csharp\u002F09.ado-net\u002F07.provider-factory",{"title":438,"path":439,"stem":440},"9.8. Асинхронний доступ до даних","\u002Fcsharp\u002Fado-net\u002Fasync-data-access","01.csharp\u002F09.ado-net\u002F08.async-data-access",{"title":442,"path":443,"stem":444},"9.9. Від'єднаний режим: DataSet, DataTable, DataRow","\u002Fcsharp\u002Fado-net\u002Fdisconnected-mode-dataset","01.csharp\u002F09.ado-net\u002F09.disconnected-mode-dataset",{"title":446,"path":447,"stem":448},"9.10. DataAdapter — міст між DataSet та базою даних","\u002Fcsharp\u002Fado-net\u002Fdata-adapter","01.csharp\u002F09.ado-net\u002F10.data-adapter",{"title":450,"path":451,"stem":452},"9.11. Data Mapper та Repository: Архітектура доступу до даних","\u002Fcsharp\u002Fado-net\u002Fdata-mapper-repository","01.csharp\u002F09.ado-net\u002F11.data-mapper-repository",{"title":454,"path":455,"stem":456},"9.12. Identity Map, Unit of Work та Specification Pattern","\u002Fcsharp\u002Fado-net\u002Fadvanced-patterns","01.csharp\u002F09.ado-net\u002F12.advanced-patterns",{"title":458,"icon":255,"path":459,"stem":460,"children":461,"page":59},"Ef Core","\u002Fcsharp\u002Fef-core","01.csharp\u002F10.ef-core",[462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,532,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610,614,618,622,626,630,634,638,642,646],{"title":463,"path":464,"stem":465},"Що таке ORM? Від SQL до об'єктів","\u002Fcsharp\u002Fef-core\u002Fwhat-is-orm","01.csharp\u002F10.ef-core\u002F01.what-is-orm",{"title":467,"path":468,"stem":469},"Перший проєкт — від нуля до CRUD","\u002Fcsharp\u002Fef-core\u002Ffirst-project","01.csharp\u002F10.ef-core\u002F02.first-project",{"title":471,"path":472,"stem":473},"DbContext — Серце EF Core","\u002Fcsharp\u002Fef-core\u002Fdbcontext-deep-dive","01.csharp\u002F10.ef-core\u002F03.dbcontext-deep-dive",{"title":475,"path":476,"stem":477},"Провайдери баз даних — Архітектура та Вибір СУБД","\u002Fcsharp\u002Fef-core\u002Fdatabase-providers","01.csharp\u002F10.ef-core\u002F04.database-providers",{"title":479,"path":480,"stem":481},"Конвенції EF Core — Магія без конфігурації","\u002Fcsharp\u002Fef-core\u002Fconventions","01.csharp\u002F10.ef-core\u002F05.conventions",{"title":483,"path":484,"stem":485},"Fluent API та Data Annotations — Явна конфігурація моделі","\u002Fcsharp\u002Fef-core\u002Ffluent-api-vs-annotations","01.csharp\u002F10.ef-core\u002F06.fluent-api-vs-annotations",{"title":487,"path":488,"stem":489},"Зв'язки — One-to-One та One-to-Many","\u002Fcsharp\u002Fef-core\u002Frelationships-basics","01.csharp\u002F10.ef-core\u002F07.relationships-basics",{"title":491,"path":492,"stem":493},"Зв'язки Advanced — Many-to-Many та Складні Сценарії","\u002Fcsharp\u002Fef-core\u002Frelationships-advanced","01.csharp\u002F10.ef-core\u002F08.relationships-advanced",{"title":495,"path":496,"stem":497},"Властивості — Типи, Конвертери, Компаратори (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part1","01.csharp\u002F10.ef-core\u002F09.property-configuration-part1",{"title":499,"path":500,"stem":501},"Властивості — Value Comparers, Generators, Shadow Properties (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part2","01.csharp\u002F10.ef-core\u002F09.property-configuration-part2",{"title":503,"path":504,"stem":505},"Складні типи — Owned Types та Complex Types (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part1","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part1",{"title":507,"path":508,"stem":509},"Складні типи — Complex Types, Keyless Entities, Порівняння (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part2","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part2",{"title":511,"path":512,"stem":513},"JSON Columns — Складні дані у JSON (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part1","01.csharp\u002F10.ef-core\u002F11.json-columns-part1",{"title":515,"path":516,"stem":517},"JSON Columns — Value Comparers, Індекси, Провайдери (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part2","01.csharp\u002F10.ef-core\u002F11.json-columns-part2",{"title":519,"path":520,"stem":521},"Успадкування — Абстрактні класи та TPH (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finheritance-part1","01.csharp\u002F10.ef-core\u002F12.inheritance-part1",{"title":523,"path":524,"stem":525},"Успадкування — TPT, TPC та Порівняння Стратегій (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finheritance-part2","01.csharp\u002F10.ef-core\u002F12.inheritance-part2",{"title":527,"path":528,"stem":529,"children":530},"Індекси, Обмеження та Схема (Частина 1)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part1","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part1",[531],{"title":527,"path":528,"stem":529},{"title":533,"path":534,"stem":535,"children":536},"Індекси, Обмеження та Схема (Частина 2)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part2","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part2",[537],{"title":533,"path":534,"stem":535},{"title":539,"path":540,"stem":541},"Seed Data — Початкові Дані (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fseeding-part1","01.csharp\u002F10.ef-core\u002F14.seeding-part1",{"title":543,"path":544,"stem":545},"Seed Data — SQL-скрипти, Bogus та Стратегії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fseeding-part2","01.csharp\u002F10.ef-core\u002F14.seeding-part2",{"title":547,"path":548,"stem":549},"Global Query Filters — Глобальні Фільтри (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part1","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part1",{"title":551,"path":552,"stem":553},"Global Query Filters — Підводні камені та Інтеграція (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part2","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part2",{"title":555,"path":556,"stem":557},"LINQ-запити в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part1","01.csharp\u002F10.ef-core\u002F16.linq-queries-part1",{"title":559,"path":560,"stem":561},"LINQ-запити в EF Core (Частина 2)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part2","01.csharp\u002F10.ef-core\u002F16.linq-queries-part2",{"title":563,"path":564,"stem":565},"Завантаження Пов'язаних Даних (Частина 1)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part1","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part1",{"title":567,"path":568,"stem":569},"Завантаження Пов'язаних Даних (Частина 2)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part2","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part2",{"title":571,"path":572,"stem":573},"Raw SQL, Views та Stored Procedures (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part1","01.csharp\u002F10.ef-core\u002F18.raw-sql-part1",{"title":575,"path":576,"stem":577},"Raw SQL — Stored Procedures, DbFunction та Bulk Operations (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part2","01.csharp\u002F10.ef-core\u002F18.raw-sql-part2",{"title":579,"path":580,"stem":581},"Продвинуті Запити — Compiled Queries, Bulk та Оптимізація (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part1","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part1",{"title":583,"path":584,"stem":585},"Продвинуті Запити — Query Tags, Bulk та Interceptors (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part2","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part2",{"title":587,"path":588,"stem":589},"Change Tracker — Відстеження Змін (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part1","01.csharp\u002F10.ef-core\u002F20.change-tracking-part1",{"title":591,"path":592,"stem":593},"Change Tracker — Графи Об'єктів та Disconnected (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part2","01.csharp\u002F10.ef-core\u002F20.change-tracking-part2",{"title":595,"path":596,"stem":597},"Збереження Даних та Транзакції (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part1","01.csharp\u002F10.ef-core\u002F21.saving-data-part1",{"title":599,"path":600,"stem":601},"Збереження Даних — Concurrency та Outbox (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part2","01.csharp\u002F10.ef-core\u002F21.saving-data-part2",{"title":603,"path":604,"stem":605},"Конкурентність та Блокування (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part1","01.csharp\u002F10.ef-core\u002F22.concurrency-part1",{"title":607,"path":608,"stem":609},"Конкурентність — Дедлоки та Queue Processing (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part2","01.csharp\u002F10.ef-core\u002F22.concurrency-part2",{"title":611,"path":612,"stem":613},"Міграції в EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part1","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part1",{"title":615,"path":616,"stem":617},"Міграції в EF Core — Основи (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part2","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part2",{"title":619,"path":620,"stem":621},"Міграції — Просунуті Сценарії (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part1","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part1",{"title":623,"path":624,"stem":625},"Міграції — Просунуті Сценарії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part2","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part2",{"title":627,"path":628,"stem":629},"Управління Схемою та Database-First (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part1","01.csharp\u002F10.ef-core\u002F25.schema-management-part1",{"title":631,"path":632,"stem":633},"Управління Схемою та Database-First (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part2","01.csharp\u002F10.ef-core\u002F25.schema-management-part2",{"title":635,"path":636,"stem":637},"Продуктивність EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fperformance-fundamentals-part1","01.csharp\u002F10.ef-core\u002F26.performance-fundamentals-part1",{"title":639,"path":640,"stem":641},"Interceptors в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part1","01.csharp\u002F10.ef-core\u002F29.interceptors-part1",{"title":643,"path":644,"stem":645},"Interceptors в EF Core — Connection, Transaction та Materialization (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part2","01.csharp\u002F10.ef-core\u002F29.interceptors-part2",{"title":647,"path":648,"stem":649},"План вивчення Entity Framework Core — Повний курс","\u002Fcsharp\u002Fef-core\u002Fimplementation_plan","01.csharp\u002F10.ef-core\u002Fimplementation_plan",{"title":651,"icon":652,"path":653,"stem":654,"children":655,"page":59},"ASP.NET","i-devicon-dotnetcore","\u002Fcsharp\u002Faspnet","01.csharp\u002F11.aspnet",[656,730,791,869,927,941,967,1057,1111,1182,1212,1289,1346],{"title":657,"icon":658,"path":659,"stem":660,"children":661,"page":59},"Minimal API","i-lucide-network","\u002Fcsharp\u002Faspnet\u002Fminimal-api","01.csharp\u002F11.aspnet\u002F01.minimal-api",[662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726],{"title":663,"path":664,"stem":665},"Вступ до ASP.NET та еволюція фреймворку","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fintroduction","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F01.introduction",{"title":667,"path":668,"stem":669},"Перший додаток на ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Ffirst-application","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F02.first-application",{"title":671,"path":672,"stem":673},"WebApplication, Builder та Dependency Injection","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fwebapplication-builder","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F03.webapplication-builder",{"title":675,"path":676,"stem":677},"Конвеєр запитів та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frequest-pipeline-middleware","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F04.request-pipeline-middleware",{"title":679,"path":680,"stem":681},"Маршрутизація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F05.routing-basics",{"title":683,"path":684,"stem":685},"Маршрутизація в ASP.NET Core: Розширені можливості","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F06.routing-advanced",{"title":687,"path":688,"stem":689},"Статичні файли в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-files","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F07.static-files",{"title":691,"path":692,"stem":693},"Статичні Активи: MapStaticAssets (ASP.NET Core 9.0)","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-assets","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F08.static-assets",{"title":695,"path":696,"stem":697},"Конфігурація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-fundamentals","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F09.configuration-fundamentals",{"title":699,"path":700,"stem":701},"Конфігурація: Паттерн Options","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-options","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F10.configuration-options",{"title":703,"path":704,"stem":705},"Логування в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F11.logging-basics",{"title":707,"path":708,"stem":709},"Логування: Serilog та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F12.logging-advanced",{"title":711,"path":712,"stem":713},"Управління станом: HttpContext.Items та Cookies","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstate-management","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F13.state-management",{"title":715,"path":716,"stem":717},"Стан сесії: Sessions","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fsession-state","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F14.session-state",{"title":719,"path":720,"stem":721},"Структура проєкту: від хаосу до архітектури","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fproject-structure","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F15.project-structure",{"title":723,"path":724,"stem":725},"Scalar у Minimal API: повний проєкт і Fluent OpenAPI","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fscalar-openapi-fluent","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F16.scalar-openapi-fluent",{"title":727,"path":728,"stem":729},"Swagger \u002F Swashbuckle у Minimal API: окремий класичний шлях","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fswagger-swashbuckle","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F17.swagger-swashbuckle",{"title":731,"icon":658,"path":732,"stem":733,"children":734,"page":59},"API","\u002Fcsharp\u002Faspnet\u002Fapi","01.csharp\u002F11.aspnet\u002F02.api",[735,739,743,747,751,755,759,763,767,771,775,779,783,787],{"title":736,"path":737,"stem":738},"Що таке API. Клієнт-серверна архітектура","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fwhat-is-api","01.csharp\u002F11.aspnet\u002F02.api\u002F01.what-is-api",{"title":740,"path":741,"stem":742},"Формати даних: JSON, XML, TOML та бінарні формати","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fdata-formats","01.csharp\u002F11.aspnet\u002F02.api\u002F02.data-formats",{"title":744,"path":745,"stem":746},"Парадигми API та концепція REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-paradigms-rest","01.csharp\u002F11.aspnet\u002F02.api\u002F03.api-paradigms-rest",{"title":748,"path":749,"stem":750},"HTTP-методи, статус-коди та заголовки","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fhttp-methods-status-codes","01.csharp\u002F11.aspnet\u002F02.api\u002F04.http-methods-status-codes",{"title":752,"path":753,"stem":754},"Організація HTTP API за принципами REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Frest-organizing","01.csharp\u002F11.aspnet\u002F02.api\u002F05.rest-organizing",{"title":756,"path":757,"stem":758},"Номенклатура URL та CRUD-операції","\u002Fcsharp\u002Faspnet\u002Fapi\u002Furl-nomenclature-crud","01.csharp\u002F11.aspnet\u002F02.api\u002F06.url-nomenclature-crud",{"title":760,"path":761,"stem":762},"Правила дизайну: іменування та стандарти","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-naming","01.csharp\u002F11.aspnet\u002F02.api\u002F07.api-design-naming",{"title":764,"path":765,"stem":766},"Валідація, ліміти та обробка помилок","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-validation","01.csharp\u002F11.aspnet\u002F02.api\u002F08.api-design-validation",{"title":768,"path":769,"stem":770},"Обробка помилок у Minimal API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Ferror-handling-http","01.csharp\u002F11.aspnet\u002F02.api\u002F09.error-handling-http",{"title":772,"path":773,"stem":774},"Ідемпотентність та синхронізація стану","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fidempotency-sync","01.csharp\u002F11.aspnet\u002F02.api\u002F10.idempotency-sync",{"title":776,"path":777,"stem":778},"Пагінація та організація списків","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fpagination-lists","01.csharp\u002F11.aspnet\u002F02.api\u002F11.pagination-lists",{"title":780,"path":781,"stem":782},"Безпека API, кешування та інтернаціоналізація","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fsecurity-auth","01.csharp\u002F11.aspnet\u002F02.api\u002F12.security-auth",{"title":784,"path":785,"stem":786},"Процес проєктування API та документування","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-process","01.csharp\u002F11.aspnet\u002F02.api\u002F13.api-design-process",{"title":788,"path":789,"stem":790},"OpenAPI: контракт, специфікація та документація API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fopenapi","01.csharp\u002F11.aspnet\u002F02.api\u002F14.openapi",{"title":792,"icon":793,"path":794,"stem":795,"children":796,"page":59},"Auth","i-lucide-shield-check","\u002Fcsharp\u002Faspnet\u002Fauth","01.csharp\u002F11.aspnet\u002F03.auth",[797,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865],{"title":798,"path":799,"stem":800},"Основи аутентифікації та авторизації","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauth-fundamentals","01.csharp\u002F11.aspnet\u002F03.auth\u002F01.auth-fundamentals",{"title":802,"path":803,"stem":804},"JWT-аутентифікація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fjwt-authentication","01.csharp\u002F11.aspnet\u002F03.auth\u002F02.jwt-authentication",{"title":806,"path":807,"stem":808},"Авторизація: ролі, політики та resource-based доступ","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauthorization-policies","01.csharp\u002F11.aspnet\u002F03.auth\u002F03.authorization-policies",{"title":810,"path":811,"stem":812},"Cookie-аутентифікація та ASP.NET Core Identity","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcookie-auth-identity","01.csharp\u002F11.aspnet\u002F03.auth\u002F04.cookie-auth-identity",{"title":814,"path":815,"stem":816},"JWT + Refresh Tokens (HttpOnly Cookie)","\u002Fcsharp\u002Faspnet\u002Fauth\u002F04b.identity-auth-jwt","01.csharp\u002F11.aspnet\u002F03.auth\u002F04b.identity-auth-jwt",{"title":818,"path":819,"stem":820},"Identity: Підтвердження Email та Скидання Пароля","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-email-confirmation","01.csharp\u002F11.aspnet\u002F03.auth\u002F05.identity-email-confirmation",{"title":822,"path":823,"stem":824},"Identity: Двофакторна Аутентифікація (2FA)","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-two-factor","01.csharp\u002F11.aspnet\u002F03.auth\u002F06.identity-two-factor",{"title":826,"path":827,"stem":828},"Identity: Внутрішня Архітектура та Кастомізація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-internals","01.csharp\u002F11.aspnet\u002F03.auth\u002F07.identity-internals",{"title":830,"path":831,"stem":832},"OAuth 2.0 та зовнішні провайдери","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-external-providers","01.csharp\u002F11.aspnet\u002F03.auth\u002F08.oauth-external-providers",{"title":834,"path":835,"stem":836},"Безпека на практиці: CORS, HTTPS та захист від атак","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fsecurity-hardening","01.csharp\u002F11.aspnet\u002F03.auth\u002F09.security-hardening",{"title":838,"path":839,"stem":840},"Теорія OAuth 2.0: Поняття, Аналогії та Флоу","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-theory","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oauth-theory",{"title":842,"path":843,"stem":844},"OIDC, OAuth 2.0 та Keycloak в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foidc-keycloak","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oidc-keycloak",{"title":846,"path":847,"stem":848},"API Keys аутентифікація в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fapi-keys","01.csharp\u002F11.aspnet\u002F03.auth\u002F11.api-keys",{"title":850,"path":851,"stem":852},"Rate Limiting та Throttling в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frate-limiting","01.csharp\u002F11.aspnet\u002F03.auth\u002F12.rate-limiting",{"title":854,"path":855,"stem":856},"Refresh Token Rotation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frefresh-token-rotation","01.csharp\u002F11.aspnet\u002F03.auth\u002F13.refresh-token-rotation",{"title":858,"path":859,"stem":860},"Certificate Authentication та mTLS в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcertificate-auth","01.csharp\u002F11.aspnet\u002F03.auth\u002F14.certificate-auth",{"title":862,"path":863,"stem":864},"RBAC, ABAC та ReBAC в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frbac-abac-rebac","01.csharp\u002F11.aspnet\u002F03.auth\u002F15.rbac-abac-rebac",{"title":866,"path":867,"stem":868},"Multi-tenancy та ізоляція даних в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fmulti-tenancy","01.csharp\u002F11.aspnet\u002F03.auth\u002F16.multi-tenancy",{"title":870,"icon":871,"path":872,"stem":873,"children":874,"page":59},"Нотифікації","i-lucide-bell","\u002Fcsharp\u002Faspnet\u002Fnotifications","01.csharp\u002F11.aspnet\u002F04.notifications",[875,879,883,887,891,895,899,903,907,911,915,919,923],{"title":876,"path":877,"stem":878},"In-App нотифікації через базу даних","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fin-app-database-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F01.in-app-database-notifications",{"title":880,"path":881,"stem":882},"Polling: Регулярний запит оновлень","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fpolling","01.csharp\u002F11.aspnet\u002F04.notifications\u002F02.polling",{"title":884,"path":885,"stem":886},"Server-Sent Events: Однострімовий push від сервера","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fserver-sent-events","01.csharp\u002F11.aspnet\u002F04.notifications\u002F03.server-sent-events",{"title":888,"path":889,"stem":890},"WebSockets: Двостороннє з'єднання в реальному часі","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fwebsockets","01.csharp\u002F11.aspnet\u002F04.notifications\u002F04.websockets",{"title":892,"path":893,"stem":894},"SignalR: Абстракція над транспортами реального часу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fsignalr","01.csharp\u002F11.aspnet\u002F04.notifications\u002F05.signalr",{"title":896,"path":897,"stem":898},"Background Services: Фонові задачі в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fbackground-services","01.csharp\u002F11.aspnet\u002F04.notifications\u002F06.background-services",{"title":900,"path":901,"stem":902},"Web Push нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fweb-push","01.csharp\u002F11.aspnet\u002F04.notifications\u002F07.web-push",{"title":904,"path":905,"stem":906},"Email нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Femail-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F08.email-notifications",{"title":908,"path":909,"stem":910},"Порівняння підходів: Як вибрати правильну технологію нотифікацій","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fchoosing-the-right-approach","01.csharp\u002F11.aspnet\u002F04.notifications\u002F09.choosing-the-right-approach",{"title":912,"path":913,"stem":914},"Hangfire: Надійне планування фонових задач","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire","01.csharp\u002F11.aspnet\u002F04.notifications\u002F10.hangfire",{"title":916,"path":917,"stem":918},"Практика: Конвертація зображень у WebP через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-image-webp","01.csharp\u002F11.aspnet\u002F04.notifications\u002F11.hangfire-image-webp",{"title":920,"path":921,"stem":922},"Практика: Підготовка відео до HLS-стрімінгу через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-video-hls","01.csharp\u002F11.aspnet\u002F04.notifications\u002F12.hangfire-video-hls",{"title":924,"path":925,"stem":926},"Telegram-нотифікації: від одного повідомлення до масових розсилок і мульти-канального підходу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Ftelegram-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F13.telegram-notifications",{"title":928,"icon":929,"path":930,"stem":931,"children":932,"page":59},"Інтернаціоналізація","i-lucide-languages","\u002Fcsharp\u002Faspnet\u002Fi18n","01.csharp\u002F11.aspnet\u002F05.i18n",[933,937],{"title":934,"path":935,"stem":936},"Інтернаціоналізація (i18n) у Minimal API: від A до Я","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Finternationalization","01.csharp\u002F11.aspnet\u002F05.i18n\u002F01.internationalization",{"title":938,"path":939,"stem":940},"Humanizer: людиномовні рядки у .NET","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Fhumanizer","01.csharp\u002F11.aspnet\u002F05.i18n\u002F02.humanizer",{"title":942,"icon":943,"path":944,"stem":945,"children":946,"page":59},"Кешування","i-lucide-layers","\u002Fcsharp\u002Faspnet\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching",[947,951,955,959,963],{"title":948,"path":949,"stem":950},"Огляд кешування: чотири рівні і коли що обирати","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching\u002F01.caching",{"title":952,"path":953,"stem":954},"IMemoryCache: кеш в оперативній пам'яті","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fmemory-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F02.memory-cache",{"title":956,"path":957,"stem":958},"IDistributedCache і Redis: розподілений кеш","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fdistributed-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F03.distributed-cache",{"title":960,"path":961,"stem":962},"Response Cache: HTTP-кешування через Cache-Control","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fresponse-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F04.response-cache",{"title":964,"path":965,"stem":966},"Output Cache: серверний кеш HTTP-відповідей (.NET 7+)","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Foutput-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F05.output-cache",{"title":968,"icon":969,"path":970,"stem":971,"children":972,"page":59},"Тестування","i-lucide-test-tube","\u002Fcsharp\u002Faspnet\u002Ftesting","01.csharp\u002F11.aspnet\u002F07.testing",[973,977,981,985,989,993,997,1001,1005,1009,1013,1017,1021,1025,1029,1033,1037,1041,1045,1049,1053],{"title":974,"path":975,"stem":976},"Що таке тестування? Від інтуїції до науки","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-is-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F01.what-is-testing",{"title":978,"path":979,"stem":980},"Піраміда тестування — Стратегія, а не Догма","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-pyramid","01.csharp\u002F11.aspnet\u002F07.testing\u002F02.testing-pyramid",{"title":982,"path":983,"stem":984},"Дві Школи Тестування — Лондон проти Детройту","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-schools","01.csharp\u002F11.aspnet\u002F07.testing\u002F03.testing-schools",{"title":986,"path":987,"stem":988},"TDD та BDD — Тести як Дизайн-інструмент","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftdd-and-bdd","01.csharp\u002F11.aspnet\u002F07.testing\u002F04.tdd-and-bdd",{"title":990,"path":991,"stem":992},"Що саме тестувати — Техніки аналізу та Циклomatична складність","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-to-test","01.csharp\u002F11.aspnet\u002F07.testing\u002F05.what-to-test",{"title":994,"path":995,"stem":996},"Тестові Фреймворки — Навіщо вони і що всередині","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftest-frameworks","01.csharp\u002F11.aspnet\u002F07.testing\u002F06.test-frameworks",{"title":998,"path":999,"stem":1000},"xUnit — Факти, Теорії та Lifecycle тестів","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-basics","01.csharp\u002F11.aspnet\u002F07.testing\u002F07.xunit-basics",{"title":1002,"path":1003,"stem":1004},"xUnit Advanced — Fixtures, Кастомізація та Розширення","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F08.xunit-advanced",{"title":1006,"path":1007,"stem":1008},"Moq — Глибоке занурення в мокування","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fmocking-with-moq","01.csharp\u002F11.aspnet\u002F07.testing\u002F09.mocking-with-moq",{"title":1010,"path":1011,"stem":1012},"Тестування Баз Даних — EF Core, SQLite та Testcontainers","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fdatabase-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F10.database-testing",{"title":1014,"path":1015,"stem":1016},"Integration Testing — Частина 1 [Теорія та WebApplicationFactory]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F11.integration-testing",{"title":1018,"path":1019,"stem":1020},"Інтеграційне тестування — Практика","\u002Fcsharp\u002Faspnet\u002Ftesting\u002F11a.integration-testing-practice","01.csharp\u002F11.aspnet\u002F07.testing\u002F11a.integration-testing-practice",{"title":1022,"path":1023,"stem":1024},"Integration Testing — Частина 2 [Просунуті Сценарії та Testcontainers]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F12.integration-testing-advanced",{"title":1026,"path":1027,"stem":1028},"Професійний Postman: Колекції, Змінні та GitHub Інтеграція","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fpostman-professional","01.csharp\u002F11.aspnet\u002F07.testing\u002F13.postman-professional",{"title":1030,"path":1031,"stem":1032},"HttpClient у Тестах Частина 1: Архітектура та MockHttpMessageHandler","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fhttpclient-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F14.httpclient-testing",{"title":1034,"path":1035,"stem":1036},"HttpClient у Тестах Частина 2: WireMock.Net та Resilience","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwiremock-net","01.csharp\u002F11.aspnet\u002F07.testing\u002F15.wiremock-net",{"title":1038,"path":1039,"stem":1040},"Патерни та Анти-патерни Тестування: Test Smells","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-patterns","01.csharp\u002F11.aspnet\u002F07.testing\u002F16.testing-patterns",{"title":1042,"path":1043,"stem":1044},"Просунуті інструменти: Time, Snapshots та Властивості","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fadvanced-testing-tools","01.csharp\u002F11.aspnet\u002F07.testing\u002F17.advanced-testing-tools",{"title":1046,"path":1047,"stem":1048},"Тестування Архітектури з NetArchTest","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Farchitecture-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F18.architecture-testing",{"title":1050,"path":1051,"stem":1052},"Тестування Продуктивності: BenchmarkDotNet, NBomber та k6","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fperformance-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F19.performance-testing",{"title":1054,"path":1055,"stem":1056},"Залишок плану для курсу \"Тестування ASP.NET Minimal API\"","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fremaining_plan","01.csharp\u002F11.aspnet\u002F07.testing\u002Fremaining_plan",{"title":1058,"icon":1059,"path":1060,"stem":1061,"children":1062,"page":59},"Платежі","i-lucide-credit-card","\u002Fcsharp\u002Faspnet\u002Fpayments","01.csharp\u002F11.aspnet\u002F08.payments",[1063,1067,1071,1075,1079,1083,1087,1091,1095,1099,1103,1107],{"title":1064,"path":1065,"stem":1066},"Основи платіжної інфраструктури","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-fundamentals","01.csharp\u002F11.aspnet\u002F08.payments\u002F01.payment-fundamentals",{"title":1068,"path":1069,"stem":1070},"Методи оплати в Україні","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-methods-ukraine","01.csharp\u002F11.aspnet\u002F08.payments\u002F02.payment-methods-ukraine",{"title":1072,"path":1073,"stem":1074},"PCI DSS та безпека платежів","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpci-dss-security","01.csharp\u002F11.aspnet\u002F08.payments\u002F03.pci-dss-security",{"title":1076,"path":1077,"stem":1078},"Архітектура платіжної підсистеми","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-architecture","01.csharp\u002F11.aspnet\u002F08.payments\u002F04.payment-architecture",{"title":1080,"path":1081,"stem":1082},"Інтеграція LiqPay (ПриватБанк)","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fliqpay-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F05.liqpay-integration",{"title":1084,"path":1085,"stem":1086},"Інтеграція Monobank Acquiring API","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fmonobank-acquiring","01.csharp\u002F11.aspnet\u002F08.payments\u002F06.monobank-acquiring",{"title":1088,"path":1089,"stem":1090},"Інтеграція Stripe","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fstripe-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F07.stripe-integration",{"title":1092,"path":1093,"stem":1094},"Webhooks — глибоке занурення","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fwebhooks-deep-dive","01.csharp\u002F11.aspnet\u002F08.payments\u002F08.webhooks-deep-dive",{"title":1096,"path":1097,"stem":1098},"Підписки та рекурентні платежі","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fsubscriptions-recurring","01.csharp\u002F11.aspnet\u002F08.payments\u002F09.subscriptions-recurring",{"title":1100,"path":1101,"stem":1102},"Повернення коштів та диспути","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Frefunds-disputes","01.csharp\u002F11.aspnet\u002F08.payments\u002F10.refunds-disputes",{"title":1104,"path":1105,"stem":1106},"Тестування платіжних інтеграцій","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Ftesting-payments","01.csharp\u002F11.aspnet\u002F08.payments\u002F11.testing-payments",{"title":1108,"path":1109,"stem":1110},"Чекліст виходу в Production","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fproduction-checklist","01.csharp\u002F11.aspnet\u002F08.payments\u002F12.production-checklist",{"title":1112,"icon":1113,"items":1114,"path":1127,"stem":1128,"children":1129,"page":59},"Популярні бібліотеки","lucide:box",[1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126],"01.fluent-validation","02.mapster","03.erroror-result-pattern","04.serilog","05.mediatr","06.polly","07.health-checks","08.feature-management","09.fluent-email","10.quest-pdf","11.bogus","12.humanizer-guard","\u002Fcsharp\u002Faspnet\u002Flibraries","01.csharp\u002F11.aspnet\u002F09.libraries",[1130,1134,1138,1142,1146,1150,1154,1158,1162,1166,1170,1174,1178],{"title":1131,"path":1132,"stem":1133},"Валідація з FluentValidation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-validation","01.csharp\u002F11.aspnet\u002F09.libraries\u002F01.fluent-validation",{"title":1135,"path":1136,"stem":1137},"Маппінг об","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmapster","01.csharp\u002F11.aspnet\u002F09.libraries\u002F02.mapster",{"title":1139,"path":1140,"stem":1141},"Обробка помилок з ErrorOr та Result Pattern в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ferroror-result-pattern","01.csharp\u002F11.aspnet\u002F09.libraries\u002F03.erroror-result-pattern",{"title":1143,"path":1144,"stem":1145},"Структуроване логування з Serilog в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fserilog","01.csharp\u002F11.aspnet\u002F09.libraries\u002F04.serilog",{"title":1147,"path":1148,"stem":1149},"CQRS та Mediator з MediatR в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmediatr","01.csharp\u002F11.aspnet\u002F09.libraries\u002F05.mediatr",{"title":1151,"path":1152,"stem":1153},"Відмовостійкість з Polly в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fpolly","01.csharp\u002F11.aspnet\u002F09.libraries\u002F06.polly",{"title":1155,"path":1156,"stem":1157},"Health Checks в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F09.libraries\u002F07.health-checks",{"title":1159,"path":1160,"stem":1161},"Feature Management та Feature Flags в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffeature-management","01.csharp\u002F11.aspnet\u002F09.libraries\u002F08.feature-management",{"title":1163,"path":1164,"stem":1165},"Відправка Email з FluentEmail в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-email","01.csharp\u002F11.aspnet\u002F09.libraries\u002F09.fluent-email",{"title":1167,"path":1168,"stem":1169},"Генерація PDF з QuestPDF в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fquest-pdf","01.csharp\u002F11.aspnet\u002F09.libraries\u002F10.quest-pdf",{"title":1171,"path":1172,"stem":1173},"Генерація тестових даних з Bogus в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fbogus","01.csharp\u002F11.aspnet\u002F09.libraries\u002F11.bogus",{"title":1175,"path":1176,"stem":1177},"Humanizer та Guard Clauses в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhumanizer-guard","01.csharp\u002F11.aspnet\u002F09.libraries\u002F12.humanizer-guard",{"title":1179,"path":1180,"stem":1181},"План модуля 10.libraries — Популярні бібліотеки ASP.NET","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fplan","01.csharp\u002F11.aspnet\u002F09.libraries\u002Fplan",{"title":1183,"icon":1184,"path":1185,"stem":1186,"children":1187,"page":59},"Razor Pages","i-lucide-layout-template","\u002Fcsharp\u002Faspnet\u002Frazor-pages","01.csharp\u002F11.aspnet\u002F10.razor-pages",[1188,1192,1196,1200,1204,1208],{"title":1189,"path":1190,"stem":1191},"Від Minimal API до Razor Pages: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ffrom-minimal-api","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F01.from-minimal-api",{"title":1193,"path":1194,"stem":1195},"PageModel: логіка сторінки Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fpage-model","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F02.page-model",{"title":1197,"path":1198,"stem":1199},"Razor синтаксис: шаблонізатор у .cshtml","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Frazor-syntax","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F03.razor-syntax",{"title":1201,"path":1202,"stem":1203},"Tag Helpers: типізований HTML","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ftag-helpers","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F04.tag-helpers",{"title":1205,"path":1206,"stem":1207},"Форми і валідація: повний цикл обробки даних","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fforms-validation","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F05.forms-validation",{"title":1209,"path":1210,"stem":1211},"Практичний проєкт: TaskManager на Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fproject-task-manager","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F06.project-task-manager",{"title":1213,"path":1214,"stem":1215,"children":1216,"page":59},"ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc","01.csharp\u002F11.aspnet\u002F11.mvc",[1217,1221,1225,1229,1233,1237,1241,1245,1249,1253,1257,1261,1265,1269,1273,1277,1281,1285],{"title":1218,"path":1219,"stem":1220},"Патерн MVC: архітектура, що змінила веб","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-pattern","01.csharp\u002F11.aspnet\u002F11.mvc\u002F01.mvc-pattern",{"title":1222,"path":1223,"stem":1224},"Від Razor Pages до MVC: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffrom-razor-pages","01.csharp\u002F11.aspnet\u002F11.mvc\u002F02.from-razor-pages",{"title":1226,"path":1227,"stem":1228},"Controllers та Actions: серце MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fcontrollers-actions","01.csharp\u002F11.aspnet\u002F11.mvc\u002F03.controllers-actions",{"title":1230,"path":1231,"stem":1232},"Маршрутизація в MVC: Convention vs Attribute Routing","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Frouting-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F04.routing-mvc",{"title":1234,"path":1235,"stem":1236},"Model Binding: від HTTP до C#","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmodel-binding","01.csharp\u002F11.aspnet\u002F11.mvc\u002F05.model-binding",{"title":1238,"path":1239,"stem":1240},"Views, ViewData, ViewBag, TempData і ViewModel","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fviews-viewdata-tempdata","01.csharp\u002F11.aspnet\u002F11.mvc\u002F06.views-viewdata-tempdata",{"title":1242,"path":1243,"stem":1244},"Filters: аспектно-орієнтоване програмування в MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffilters","01.csharp\u002F11.aspnet\u002F11.mvc\u002F07.filters",{"title":1246,"path":1247,"stem":1248},"Areas: структурування великих застосунків","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fareas","01.csharp\u002F11.aspnet\u002F11.mvc\u002F08.areas",{"title":1250,"path":1251,"stem":1252},"View Components: повторювані незалежні блоки UI","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fview-components","01.csharp\u002F11.aspnet\u002F11.mvc\u002F09.view-components",{"title":1254,"path":1255,"stem":1256},"Display та Editor Templates","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fdisplay-editor-templates","01.csharp\u002F11.aspnet\u002F11.mvc\u002F10.display-editor-templates",{"title":1258,"path":1259,"stem":1260},"Валідація: IValidatableObject та FluentValidation","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fvalidation-advanced","01.csharp\u002F11.aspnet\u002F11.mvc\u002F11.validation-advanced",{"title":1262,"path":1263,"stem":1264},"HTMX: інтерактивність через HTML-атрибути","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx","01.csharp\u002F11.aspnet\u002F11.mvc\u002F12.htmx",{"title":1266,"path":1267,"stem":1268},"HTMX у ASP.NET Core MVC: серверна інтеграція","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fajax-htmx-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F13.ajax-htmx-mvc",{"title":1270,"path":1271,"stem":1272},"Практичний проєкт: Каталог товарів з HTMX","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F14.htmx-project",{"title":1274,"path":1275,"stem":1276},"Завантаження та обробка файлів","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffile-upload","01.csharp\u002F11.aspnet\u002F11.mvc\u002F15.file-upload",{"title":1278,"path":1279,"stem":1280},"Глобалізація та Локалізація MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fglobalization-localization","01.csharp\u002F11.aspnet\u002F11.mvc\u002F16.globalization-localization",{"title":1282,"path":1283,"stem":1284},"Підсумковий проєкт: Блог-платформа","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F17.mvc-project",{"title":1286,"path":1287,"stem":1288},"План курсу: ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fplan","01.csharp\u002F11.aspnet\u002F11.mvc\u002Fplan",{"title":1290,"path":1291,"stem":1292,"children":1293,"page":59},"Web Api","\u002Fcsharp\u002Faspnet\u002Fweb-api","01.csharp\u002F11.aspnet\u002F12.web-api",[1294,1298,1302,1306,1310,1314,1318,1322,1326,1330,1334,1338,1342],{"title":1295,"path":1296,"stem":1297},"Від Minimal API до Controller-based API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffrom-minimal-api-to-controllers","01.csharp\u002F11.aspnet\u002F12.web-api\u002F01.from-minimal-api-to-controllers",{"title":1299,"path":1300,"stem":1301},"ControllerBase, ActionResult\u003CT> та Response Types","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontroller-base-actionresult","01.csharp\u002F11.aspnet\u002F12.web-api\u002F02.controller-base-actionresult",{"title":1303,"path":1304,"stem":1305},"Content Negotiation - JSON, XML та власні форматери","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontent-negotiation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F03.content-negotiation",{"title":1307,"path":1308,"stem":1309},"Версіонування API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-versioning","01.csharp\u002F11.aspnet\u002F12.web-api\u002F04.api-versioning",{"title":1311,"path":1312,"stem":1313},"ProblemDetails та структурована обробка помилок","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fproblemdetails-error-handling","01.csharp\u002F11.aspnet\u002F12.web-api\u002F05.problemdetails-error-handling",{"title":1315,"path":1316,"stem":1317},"Фільтри у Web API контексті","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffilters-for-api","01.csharp\u002F11.aspnet\u002F12.web-api\u002F06.filters-for-api",{"title":1319,"path":1320,"stem":1321},"Пагінація, фільтрація та сортування","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fpagination-filtering-sorting","01.csharp\u002F11.aspnet\u002F12.web-api\u002F07.pagination-filtering-sorting",{"title":1323,"path":1324,"stem":1325},"HATEOAS та Resource Expansion","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhateoas-resource-expansion","01.csharp\u002F11.aspnet\u002F12.web-api\u002F08.hateoas-resource-expansion",{"title":1327,"path":1328,"stem":1329},"Гібридна архітектура - Minimal API + Controllers","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fminimal-api-vs-controllers-hybrid","01.csharp\u002F11.aspnet\u002F12.web-api\u002F09.minimal-api-vs-controllers-hybrid",{"title":1331,"path":1332,"stem":1333},"Документація API - Swashbuckle, NSwag та генерація клієнтів","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-documentation-generation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F10.api-documentation-generation",{"title":1335,"path":1336,"stem":1337},"Health Checks та моніторинг API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhealth-checks-monitoring","01.csharp\u002F11.aspnet\u002F12.web-api\u002F11.health-checks-monitoring",{"title":1339,"path":1340,"stem":1341},"Підсумковий проєкт - Production-Ready REST API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fweb-api-project","01.csharp\u002F11.aspnet\u002F12.web-api\u002F12.web-api-project",{"title":1343,"path":1344,"stem":1345},"План курсу: ASP.NET Core Web API (Controllers)","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fplan","01.csharp\u002F11.aspnet\u002F12.web-api\u002Fplan",{"title":1347,"icon":1348,"path":1349,"stem":1350,"children":1351,"page":59},"Моніторинг","i-lucide-activity","\u002Fcsharp\u002Faspnet\u002Fmonitoring","01.csharp\u002F11.aspnet\u002F13.monitoring",[1352,1356,1360],{"title":1353,"path":1354,"stem":1355},"Спостережуваність: від console.log до production-систем","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fobservability-intro","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F01.observability-intro",{"title":1357,"path":1358,"stem":1359},"Health Checks: перший рівень observability","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F02.health-checks",{"title":1361,"path":1362,"stem":1363},"Вбудовані метрики .NET 10 та System.Diagnostics.Metrics","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fdotnet-metrics","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F03.dotnet-metrics",{"title":1365,"icon":1366,"path":1367,"stem":1368,"children":1369,"page":59},"Desktop UI","i-lucide-app-window","\u002Fcsharp\u002Fdesktop-ui","01.csharp\u002F12.desktop-ui",[1370,1374,1378,1382,1386,1390,1394,1398,1402,1406,1410,1414,1418,1422,1426,1430,1434,1438,1442,1446,1450,1454,1458,1462,1466,1470,1474,1478,1482,1486,1490,1494,1498,1502,1506,1510,1514,1518,1522,1526,1530,1534,1538,1542,1546,1550,1554,1558,1562,1566,1570,1574,1578,1582,1586,1590,1594,1598,1602,1606,1610,1614,1618,1622,1626,1630,1634,1638,1642,1646,1650],{"title":1371,"path":1372,"stem":1373},"Що таке десктопна розробка?","\u002Fcsharp\u002Fdesktop-ui\u002Fwhat-is-desktop-dev","01.csharp\u002F12.desktop-ui\u002F01.what-is-desktop-dev",{"title":1375,"path":1376,"stem":1377},"Архітектура WPF — як влаштований графічний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-architecture","01.csharp\u002F12.desktop-ui\u002F02.wpf-architecture",{"title":1379,"path":1380,"stem":1381},"Перший WPF-проєкт — від нуля до вікна","\u002Fcsharp\u002Fdesktop-ui\u002Ffirst-wpf-app","01.csharp\u002F12.desktop-ui\u002F03.first-wpf-app",{"title":1383,"path":1384,"stem":1385},"Перший Avalonia-проєкт: WPF для всіх платформ","\u002Fcsharp\u002Fdesktop-ui\u002F03a.first-avalonia-app","01.csharp\u002F12.desktop-ui\u002F03a.first-avalonia-app",{"title":1387,"path":1388,"stem":1389},"XAML: декларативний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-basics","01.csharp\u002F12.desktop-ui\u002F04.xaml-basics",{"title":1391,"path":1392,"stem":1393},"Fluent UI у WPF — сучасний дизайн Windows 11","\u002Fcsharp\u002Fdesktop-ui\u002F04a.wpf-fluent-ui","01.csharp\u002F12.desktop-ui\u002F04a.wpf-fluent-ui",{"title":1395,"path":1396,"stem":1397},"WPF UI — сучасна бібліотека Fluent контролів","\u002Fcsharp\u002Fdesktop-ui\u002F04b.wpf-ui-library","01.csharp\u002F12.desktop-ui\u002F04b.wpf-ui-library",{"title":1399,"path":1400,"stem":1401},"HandyControl — велика бібліотека UI контролів для WPF","\u002Fcsharp\u002Fdesktop-ui\u002F04c.handycontrol-library","01.csharp\u002F12.desktop-ui\u002F04c.handycontrol-library",{"title":1403,"path":1404,"stem":1405},"Простори імен та ресурси XAML","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-namespaces-resources","01.csharp\u002F12.desktop-ui\u002F05.xaml-namespaces-resources",{"title":1407,"path":1408,"stem":1409},"XAML в Avalonia: ключові відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F05a.avalonia-xaml-differences","01.csharp\u002F12.desktop-ui\u002F05a.avalonia-xaml-differences",{"title":1411,"path":1412,"stem":1413},"Розширення розмітки XAML (Markup Extensions)","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-markup-extensions","01.csharp\u002F12.desktop-ui\u002F06.xaml-markup-extensions",{"title":1415,"path":1416,"stem":1417},"Панелі Layout: StackPanel, WrapPanel, DockPanel","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part1","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part1",{"title":1419,"path":1420,"stem":1421},"Grid, Canvas, UniformGrid","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part2","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part2",{"title":1423,"path":1424,"stem":1425},"Просунуті техніки Layout","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-advanced","01.csharp\u002F12.desktop-ui\u002F08.layout-advanced",{"title":1427,"path":1428,"stem":1429},"Адаптивний Layout та найкращі практики","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-responsive","01.csharp\u002F12.desktop-ui\u002F09.layout-responsive",{"title":1431,"path":1432,"stem":1433},"Layout в Avalonia: відмінності та нові можливості","\u002Fcsharp\u002Fdesktop-ui\u002F09a.layout-avalonia","01.csharp\u002F12.desktop-ui\u002F09a.layout-avalonia",{"title":1435,"path":1436,"stem":1437},"Button, Image, ProgressBar та інші базові контроли","\u002Fcsharp\u002Fdesktop-ui\u002Fbasic-controls","01.csharp\u002F12.desktop-ui\u002F10.basic-controls",{"title":1439,"path":1440,"stem":1441},"Контроли в Avalonia: відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F10a.controls-avalonia","01.csharp\u002F12.desktop-ui\u002F10a.controls-avalonia",{"title":1443,"path":1444,"stem":1445},"Текстові контроли — TextBlock, TextBox, RichTextBox","\u002Fcsharp\u002Fdesktop-ui\u002Ftext-controls","01.csharp\u002F12.desktop-ui\u002F11.text-controls",{"title":1447,"path":1448,"stem":1449},"Контроли вибору — CheckBox, RadioButton, ComboBox, ListBox, DatePicker","\u002Fcsharp\u002Fdesktop-ui\u002Fselection-controls","01.csharp\u002F12.desktop-ui\u002F12.selection-controls",{"title":1451,"path":1452,"stem":1453},"Content Model — GroupBox, Expander, TabControl, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fcontent-controls","01.csharp\u002F12.desktop-ui\u002F13.content-controls",{"title":1455,"path":1456,"stem":1457},"UI\u002FUX принципи десктопних застосунків","\u002Fcsharp\u002Fdesktop-ui\u002F13a.ui-ux-principles","01.csharp\u002F12.desktop-ui\u002F13a.ui-ux-principles",{"title":1459,"path":1460,"stem":1461},"Dependency Properties — Концепція та Value Resolution","\u002Fcsharp\u002Fdesktop-ui\u002Fdependency-properties-part1","01.csharp\u002F12.desktop-ui\u002F14.dependency-properties-part1",{"title":1463,"path":1464,"stem":1465},"Avalonia Property System — StyledProperty та DirectProperty","\u002Fcsharp\u002Fdesktop-ui\u002F14a.avalonia-property-system","01.csharp\u002F12.desktop-ui\u002F14a.avalonia-property-system",{"title":1467,"path":1468,"stem":1469},"Attached Properties — Властивості без меж","\u002Fcsharp\u002Fdesktop-ui\u002Fattached-properties","01.csharp\u002F12.desktop-ui\u002F15.attached-properties",{"title":1471,"path":1472,"stem":1473},"Routed Events — Маршрутизація подій у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Frouted-events","01.csharp\u002F12.desktop-ui\u002F16.routed-events",{"title":1475,"path":1476,"stem":1477},"Data Binding — Від Code-Behind до Декларативності","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part1","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part1",{"title":1479,"path":1480,"stem":1481},"INotifyPropertyChanged — Живе оновлення UI","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part2","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part2",{"title":1483,"path":1484,"stem":1485},"Compiled Bindings в Avalonia — Безпека на етапі компіляції","\u002Fcsharp\u002Fdesktop-ui\u002F17a.avalonia-compiled-bindings","01.csharp\u002F12.desktop-ui\u002F17a.avalonia-compiled-bindings",{"title":1487,"path":1488,"stem":1489},"Просунутий Data Binding — ElementName, RelativeSource, MultiBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-advanced","01.csharp\u002F12.desktop-ui\u002F18.data-binding-advanced",{"title":1491,"path":1492,"stem":1493},"Value Converters — Перетворення типів даних у Data Binding","\u002Fcsharp\u002Fdesktop-ui\u002Fvalue-converters","01.csharp\u002F12.desktop-ui\u002F19.value-converters",{"title":1495,"path":1496,"stem":1497},"Data Templates — Візуалізація об'єктів у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-templates","01.csharp\u002F12.desktop-ui\u002F20.data-templates",{"title":1499,"path":1500,"stem":1501},"Collections Binding Part 1 — ObservableCollection та ItemsControl","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part1","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part1",{"title":1503,"path":1504,"stem":1505},"Collections Binding Part 2 — ICollectionView, Filtering, Sorting та Virtualization","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part2","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part2",{"title":1507,"path":1508,"stem":1509},"MVVM Pattern — Від Spaghetti Code до архітектури","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-pattern","01.csharp\u002F12.desktop-ui\u002F22.mvvm-pattern",{"title":1511,"path":1512,"stem":1513},"ViewModel Implementation — Від BaseViewModel до валідації","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-implementation","01.csharp\u002F12.desktop-ui\u002F23.viewmodel-implementation",{"title":1515,"path":1516,"stem":1517},"Commands — Від event handlers до декларативних команд","\u002Fcsharp\u002Fdesktop-ui\u002Fcommands","01.csharp\u002F12.desktop-ui\u002F24.commands",{"title":1519,"path":1520,"stem":1521},"MVVM Toolkit — MVVM без boilerplate через Source Generators","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-toolkit","01.csharp\u002F12.desktop-ui\u002F25.mvvm-toolkit",{"title":1523,"path":1524,"stem":1525},"Messenger Pattern — Комунікація між ViewModel без прямих посилань","\u002Fcsharp\u002Fdesktop-ui\u002Fmessenger-pattern","01.csharp\u002F12.desktop-ui\u002F26.messenger-pattern",{"title":1527,"path":1528,"stem":1529},"Стилі WPF — CSS для десктопу","\u002Fcsharp\u002Fdesktop-ui\u002Fstyles-basics","01.csharp\u002F12.desktop-ui\u002F27.styles-basics",{"title":1531,"path":1532,"stem":1533},"CSS-like стилі Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F27a.avalonia-css-styling","01.csharp\u002F12.desktop-ui\u002F27a.avalonia-css-styling",{"title":1535,"path":1536,"stem":1537},"Control Templates — Частина 1. Концепція та TemplateBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part1","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part1",{"title":1539,"path":1540,"stem":1541},"Control Templates — Частина 2. Named Parts та ContentPresenter","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part2","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part2",{"title":1543,"path":1544,"stem":1545},"Control Themes в Avalonia — нова ера стилізації","\u002Fcsharp\u002Fdesktop-ui\u002F28a.avalonia-control-themes","01.csharp\u002F12.desktop-ui\u002F28a.avalonia-control-themes",{"title":1547,"path":1548,"stem":1549},"Triggers та Visual State Manager у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Ftriggers-visual-states","01.csharp\u002F12.desktop-ui\u002F29.triggers-visual-states",{"title":1551,"path":1552,"stem":1553},"Pseudo-classes в Avalonia — замість WPF Triggers","\u002Fcsharp\u002Fdesktop-ui\u002F29a.avalonia-pseudo-classes","01.csharp\u002F12.desktop-ui\u002F29a.avalonia-pseudo-classes",{"title":1555,"path":1556,"stem":1557},"Теми та ресурсні словники у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fresources-themes","01.csharp\u002F12.desktop-ui\u002F30.resources-themes",{"title":1559,"path":1560,"stem":1561},"Avalonia Themes — Fluent Design та система тематизації","\u002Fcsharp\u002Fdesktop-ui\u002F30a.avalonia-themes-fluent","01.csharp\u002F12.desktop-ui\u002F30a.avalonia-themes-fluent",{"title":1563,"path":1564,"stem":1565},"Контроли колекцій — глибоке занурення","\u002Fcsharp\u002Fdesktop-ui\u002Fcollection-controls","01.csharp\u002F12.desktop-ui\u002F31.collection-controls",{"title":1567,"path":1568,"stem":1569},"DataGrid — колонки та базове відображення","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part1","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part1",{"title":1571,"path":1572,"stem":1573},"DataGrid — сортування, фільтрація, редагування","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part2","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part2",{"title":1575,"path":1576,"stem":1577},"TreeView та GridView","\u002Fcsharp\u002Fdesktop-ui\u002Ftreeview-listview","01.csharp\u002F12.desktop-ui\u002F33.treeview-listview",{"title":1579,"path":1580,"stem":1581},"Меню, Toolbar, ContextMenu, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fmenus-toolbars","01.csharp\u002F12.desktop-ui\u002F34.menus-toolbars",{"title":1583,"path":1584,"stem":1585},"Навігація та керування вікнами. Частина 1: вікна та сторінки","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part1","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part1",{"title":1587,"path":1588,"stem":1589},"Навігація та керування вікнами. Частина 2: MVVM-навігація","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part2","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part2",{"title":1591,"path":1592,"stem":1593},"Avalonia — Навігація та діалоги","\u002Fcsharp\u002Fdesktop-ui\u002F35a.avalonia-navigation-dialogs","01.csharp\u002F12.desktop-ui\u002F35a.avalonia-navigation-dialogs",{"title":1595,"path":1596,"stem":1597},"Діалоги та File Pickers у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdialogs-file-pickers","01.csharp\u002F12.desktop-ui\u002F36.dialogs-file-pickers",{"title":1599,"path":1600,"stem":1601},"UserControl: компонентний підхід у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fuser-controls","01.csharp\u002F12.desktop-ui\u002F37.user-controls",{"title":1603,"path":1604,"stem":1605},"Custom Controls: Lookless Controls у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fcustom-controls","01.csharp\u002F12.desktop-ui\u002F38.custom-controls",{"title":1607,"path":1608,"stem":1609},"Avalonia TemplatedControl — Lookless Controls","\u002Fcsharp\u002Fdesktop-ui\u002F38a.avalonia-templated-controls","01.csharp\u002F12.desktop-ui\u002F38a.avalonia-templated-controls",{"title":1611,"path":1612,"stem":1613},"Анімації у WPF: Storyboard та Easing Functions","\u002Fcsharp\u002Fdesktop-ui\u002Fanimations-transitions","01.csharp\u002F12.desktop-ui\u002F39.animations-transitions",{"title":1615,"path":1616,"stem":1617},"Анімації в Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F39a.avalonia-animations","01.csharp\u002F12.desktop-ui\u002F39a.avalonia-animations",{"title":1619,"path":1620,"stem":1621},"2D Графіка та Мультимедіа у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fmedia-graphics","01.csharp\u002F12.desktop-ui\u002F40.media-graphics",{"title":1623,"path":1624,"stem":1625},"Dependency Injection у WPF та Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Fdi-integration","01.csharp\u002F12.desktop-ui\u002F41.di-integration",{"title":1627,"path":1628,"stem":1629},"SQLite та EF Core у десктопних додатках","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part1","01.csharp\u002F12.desktop-ui\u002F42.data-persistence-part1",{"title":1631,"path":1632,"stem":1633},"Repository Pattern та Unit of Work","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part2","01.csharp\u002F12.desktop-ui\u002F43.data-persistence-part2",{"title":1635,"path":1636,"stem":1637},"Тестування ViewModels","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-testing","01.csharp\u002F12.desktop-ui\u002F44.viewmodel-testing",{"title":1639,"path":1640,"stem":1641},"Avalonia Headless Testing — тестування UI без вікон","\u002Fcsharp\u002Fdesktop-ui\u002F44a.avalonia-headless-testing","01.csharp\u002F12.desktop-ui\u002F44a.avalonia-headless-testing",{"title":1643,"path":1644,"stem":1645},"Кросплатформна розробка з Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-cross-platform","01.csharp\u002F12.desktop-ui\u002F45.avalonia-cross-platform",{"title":1647,"path":1648,"stem":1649},"Пакування та розгортання Avalonia додатків","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F46.avalonia-packaging-deployment",{"title":1651,"path":1652,"stem":1653},"Розгортання WPF застосунків","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F47.wpf-packaging-deployment",{"title":1655,"icon":658,"path":1656,"stem":1657,"children":1658,"page":59},"Network Programming","\u002Fcsharp\u002Fnetwork-programming","01.csharp\u002F13.network-programming",[1659,1663,1667,1671,1675,1679,1683,1687,1691,1695,1699],{"title":1660,"path":1661,"stem":1662},"Основи комп'ютерних мереж","\u002Fcsharp\u002Fnetwork-programming\u002Ffoundations","01.csharp\u002F13.network-programming\u002F01.foundations",{"title":1664,"path":1665,"stem":1666},"Модель OSI та стек TCP\u002FIP","\u002Fcsharp\u002Fnetwork-programming\u002Fosi-model","01.csharp\u002F13.network-programming\u002F02.osi-model",{"title":1668,"path":1669,"stem":1670},"IP-протокол та адресація","\u002Fcsharp\u002Fnetwork-programming\u002Fip-addressing","01.csharp\u002F13.network-programming\u002F03.ip-addressing",{"title":1672,"path":1673,"stem":1674},"UDP — протокол без з'єднання","\u002Fcsharp\u002Fnetwork-programming\u002Fudp","01.csharp\u002F13.network-programming\u002F05.udp",{"title":1676,"path":1677,"stem":1678},"UDP Broadcast та Multicast","\u002Fcsharp\u002Fnetwork-programming\u002Fudp-broadcast-multicast","01.csharp\u002F13.network-programming\u002F06.udp-broadcast-multicast",{"title":1680,"path":1681,"stem":1682},"HTTP — протокол вебу","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-fundamentals","01.csharp\u002F13.network-programming\u002F07.http-fundamentals",{"title":1684,"path":1685,"stem":1686},"HttpListener — вбудований HTTP-сервер .NET","\u002Fcsharp\u002Fnetwork-programming\u002F07a.http-listener","01.csharp\u002F13.network-programming\u002F07a.http-listener",{"title":1688,"path":1689,"stem":1690},"HTTP Advanced — cookies, аутентифікація та HTTPS","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-advanced","01.csharp\u002F13.network-programming\u002F08.http-advanced",{"title":1692,"path":1693,"stem":1694},"SMTP та протоколи електронної пошти","\u002Fcsharp\u002Fnetwork-programming\u002Fsmtp","01.csharp\u002F13.network-programming\u002F09.smtp",{"title":1696,"path":1697,"stem":1698},"WebSocket — повнодуплексний протокол реального часу","\u002Fcsharp\u002Fnetwork-programming\u002Fwebsockets","01.csharp\u002F13.network-programming\u002F10.websockets",{"title":1700,"path":1701,"stem":1702},"TLS\u002FSSL — криптографічний захист мережевих з'єднань","\u002Fcsharp\u002Fnetwork-programming\u002Ftls-ssl","01.csharp\u002F13.network-programming\u002F11.tls-ssl",{"title":1704,"path":1705,"stem":1706},"C# & .NET: The Ultimate Roadmap","\u002Fcsharp\u002Froadmap","01.csharp\u002Froadmap",{"title":1708,"icon":1709,"path":1710,"stem":1711,"children":1712,"page":59},"C++","i-devicon-cplusplus","\u002Fcpp","02.cpp",[1713,1717,1721,1725,1729,1733,1737,1741,1745,1748,1752,1756,1760,1764,1768,1772,1776,1780,1784,1788,1792,1796,1800,1804,1808,1812,1816,1820,1824,1828,1832,1836,1840,1844,1848,1852,1856,1860,1864,1868,1872,1876,1880,1884,1888,1892,1896,1900,1904,1908,1912,1916,1920,1924,1928,1932,1936,1940,1944,1948,1952,1956,1960,1964,1968,1972,1976,1980,1984,1988,1992,1996,2000,2004,2008,2012,2016,2020,2024,2028,2032,2036,2040,2044,2048,2052,2056,2060,2064,2068,2072,2076,2080],{"title":1714,"path":1715,"stem":1716},"Вступ у програмування та алгоритми","\u002Fcpp\u002Fintro-algorithms","02.cpp\u002F01.intro-algorithms",{"title":1718,"path":1719,"stem":1720},"Code Style: угоди про оформлення коду","\u002Fcpp\u002Fcode-style","02.cpp\u002F02.code-style",{"title":1722,"path":1723,"stem":1724},"Середовище розробки та перший проєкт","\u002Fcpp\u002Fide-setup","02.cpp\u002F03.ide-setup",{"title":1726,"path":1727,"stem":1728},"Вивід даних на екран","\u002Fcpp\u002Fdata-output","02.cpp\u002F04.data-output",{"title":1730,"path":1731,"stem":1732},"Типи даних, змінні та константи","\u002Fcpp\u002Fdata-types-variables","02.cpp\u002F05.data-types-variables",{"title":1734,"path":1735,"stem":1736},"Ввід даних з клавіатури","\u002Fcpp\u002Fdata-input","02.cpp\u002F06.data-input",{"title":1738,"path":1739,"stem":1740},"Оператори, перетворення типів та логічні операції","\u002Fcpp\u002Foperators-type-conversion","02.cpp\u002F07.operators-type-conversion",{"title":1742,"path":1743,"stem":1744},"Цикли","\u002Fcpp\u002Floops","02.cpp\u002F08.loops",{"title":32,"path":1746,"stem":1747},"\u002Fcpp\u002Farrays","02.cpp\u002F09.arrays",{"title":1749,"path":1750,"stem":1751},"Алгоритми сортування та аналіз складності","\u002Fcpp\u002Fsorting","02.cpp\u002F10.sorting",{"title":1753,"path":1754,"stem":1755},"Алгоритми пошуку","\u002Fcpp\u002Fsearching","02.cpp\u002F11.searching",{"title":1757,"path":1758,"stem":1759},"Функції: основи","\u002Fcpp\u002Ffunctions-basics","02.cpp\u002F12.functions-basics",{"title":1761,"path":1762,"stem":1763},"Функції: прототипи, область видимості та додаткові можливості","\u002Fcpp\u002Ffunctions-scope","02.cpp\u002F13.functions-scope",{"title":1765,"path":1766,"stem":1767},"Функції: перевантаження та шаблони","\u002Fcpp\u002Ffunctions-overloading-templates","02.cpp\u002F14.functions-overloading-templates",{"title":1769,"path":1770,"stem":1771},"Вказівники: основи","\u002Fcpp\u002Fpointers-basics","02.cpp\u002F15.pointers-basics",{"title":1773,"path":1774,"stem":1775},"Посилання (References)","\u002Fcpp\u002Freferences","02.cpp\u002F16.references",{"title":1777,"path":1778,"stem":1779},"Вказівники, const і масиви","\u002Fcpp\u002Fpointers-const-arrays","02.cpp\u002F17.pointers-const-arrays",{"title":1781,"path":1782,"stem":1783},"Адресна арифметика","\u002Fcpp\u002Fpointer-arithmetic","02.cpp\u002F18.pointer-arithmetic",{"title":1785,"path":1786,"stem":1787},"Динамічна пам'ять","\u002Fcpp\u002Fdynamic-memory","02.cpp\u002F19.dynamic-memory",{"title":1789,"path":1790,"stem":1791},"Вказівники типу void","\u002Fcpp\u002Fvoid-pointers","02.cpp\u002F20.void-pointers",{"title":1793,"path":1794,"stem":1795},"Вказівники на вказівники","\u002Fcpp\u002Fpointers-to-pointers","02.cpp\u002F21.pointers-to-pointers",{"title":1797,"path":1798,"stem":1799},"Оператор доступу до членів через вказівник (->)","\u002Fcpp\u002Fmember-access-operator","02.cpp\u002F22.member-access-operator",{"title":1801,"path":1802,"stem":1803},"Цикл for-each (Range-based for)","\u002Fcpp\u002Fforeach-loop","02.cpp\u002F23.foreach-loop",{"title":1805,"path":1806,"stem":1807},"Вказівники на функції","\u002Fcpp\u002Ffunction-pointers","02.cpp\u002F24.function-pointers",{"title":1809,"path":1810,"stem":1811},"Лямбда-вирази","\u002Fcpp\u002Flambdas","02.cpp\u002F25.lambdas",{"title":1813,"path":1814,"stem":1815},"Лямбда-захоплення","\u002Fcpp\u002Flambda-captures","02.cpp\u002F26.lambda-captures",{"title":1817,"path":1818,"stem":1819},"Еліпсис","\u002Fcpp\u002Fellipsis","02.cpp\u002F27.ellipsis",{"title":1821,"path":1822,"stem":1823},"Безпечні альтернативи еліпсису","\u002Fcpp\u002F27a.ellipsis","02.cpp\u002F27a.ellipsis",{"title":1825,"path":1826,"stem":1827},"Аргументи командного рядка","\u002Fcpp\u002Fcommand-line-arguments","02.cpp\u002F28.command-line-arguments",{"title":1829,"path":1830,"stem":1831},"Перерахування (enum)","\u002Fcpp\u002Fenum","02.cpp\u002F29.enum",{"title":1833,"path":1834,"stem":1835},"Класи-перерахування (enum class)","\u002Fcpp\u002Fenum-class","02.cpp\u002F30.enum-class",{"title":1837,"path":1838,"stem":1839},"Псевдоніми типів (typedef і using)","\u002Fcpp\u002Ftype-aliases","02.cpp\u002F31.type-aliases",{"title":1841,"path":1842,"stem":1843},"Системи числення та двійкова арифметика","\u002Fcpp\u002Fnumber-systems","02.cpp\u002F32.number-systems",{"title":1845,"path":1846,"stem":1847},"Структури (struct): агрегування даних","\u002Fcpp\u002Fstruct","02.cpp\u002F33.struct",{"title":1849,"path":1850,"stem":1851},"Структури у функціях","\u002Fcpp\u002Fstruct-functions","02.cpp\u002F34.struct-functions",{"title":1853,"path":1854,"stem":1855},"Масиви структур і вкладені структури","\u002Fcpp\u002Fstruct-arrays","02.cpp\u002F35.struct-arrays",{"title":1857,"path":1858,"stem":1859},"Патерни struct та межі застосування","\u002Fcpp\u002Fstruct-patterns","02.cpp\u002F36.struct-patterns",{"title":1861,"path":1862,"stem":1863},"Символи та таблиця ASCII","\u002Fcpp\u002Fascii-characters","02.cpp\u002F37.ascii-characters",{"title":1865,"path":1866,"stem":1867},"Unicode та кодування UTF","\u002Fcpp\u002Funicode-utf","02.cpp\u002F38.unicode-utf",{"title":1869,"path":1870,"stem":1871},"C-style рядки","\u002Fcpp\u002Fc-strings","02.cpp\u002F39.c-strings",{"title":1873,"path":1874,"stem":1875},"Вступ до std::string","\u002Fcpp\u002Fstd-string-intro","02.cpp\u002F40.std-string-intro",{"title":1877,"path":1878,"stem":1879},"Довжина, ємність та доступ до символів std::string","\u002Fcpp\u002Fstd-string-capacity-access","02.cpp\u002F41.std-string-capacity-access",{"title":1881,"path":1882,"stem":1883},"Модифікація std::string: присвоювання, додавання, вставка, видалення та заміна","\u002Fcpp\u002Fstd-string-modification","02.cpp\u002F42.std-string-modification",{"title":1885,"path":1886,"stem":1887},"Пошук у std::string: find, npos та практичні патерни","\u002Fcpp\u002Fstd-string-search","02.cpp\u002F43.std-string-search",{"title":1889,"path":1890,"stem":1891},"std::string_view: невласницький погляд на рядок без копіювання","\u002Fcpp\u002Fstd-string-view","02.cpp\u002F44.std-string-view",{"title":1893,"path":1894,"stem":1895},"Об'єднання (union): один блок пам'яті, кілька інтерпретацій","\u002Fcpp\u002Funion","02.cpp\u002F45.union",{"title":1897,"path":1898,"stem":1899},"Організація коду: файли, препроцесор, простори імен","\u002Fcpp\u002Fmultifile-programs","02.cpp\u002F46.multifile-programs",{"title":1901,"path":1902,"stem":1903},"Робота з файлами: C-стиль (stdio.h)","\u002Fcpp\u002Fc-style-files","02.cpp\u002F47.c-style-files",{"title":1905,"path":1906,"stem":1907},"Робота з файлами: C++-стиль (fstream)","\u002Fcpp\u002Fcpp-style-files","02.cpp\u002F48.cpp-style-files",{"title":1909,"path":1910,"stem":1911},"Введення в ООП: від процедур до об'єктів","\u002Fcpp\u002Foop-intro","02.cpp\u002F49.oop-intro",{"title":1913,"path":1914,"stem":1915},"Класи, об'єкти та методи","\u002Fcpp\u002Fclasses-objects-methods","02.cpp\u002F50.classes-objects-methods",{"title":1917,"path":1918,"stem":1919},"Специфікатори доступу та інкапсуляція","\u002Fcpp\u002Faccess-specifiers-encapsulation","02.cpp\u002F51.access-specifiers-encapsulation",{"title":1921,"path":1922,"stem":1923},"Конструктори: гарантована ініціалізація об'єктів","\u002Fcpp\u002Fconstructors","02.cpp\u002F52.constructors",{"title":1925,"path":1926,"stem":1927},"Списки ініціалізації та делегуючі конструктори","\u002Fcpp\u002Finit-lists-delegating","02.cpp\u002F53.init-lists-delegating",{"title":1929,"path":1930,"stem":1931},"Деструктори та ідіома RAII","\u002Fcpp\u002Fdestructors-raii","02.cpp\u002F54.destructors-raii",{"title":1933,"path":1934,"stem":1935},"Прихований покажчик this","\u002Fcpp\u002Fthis-pointer","02.cpp\u002F55.this-pointer",{"title":1937,"path":1938,"stem":1939},"Розподіл класу на заголовковий файл та файл реалізації","\u002Fcpp\u002Fclass-header-source","02.cpp\u002F56.class-header-source",{"title":1941,"path":1942,"stem":1943},"Класи та const","\u002Fcpp\u002Fconst-classes","02.cpp\u002F57.const-classes",{"title":1945,"path":1946,"stem":1947},"Статичні члени класу","\u002Fcpp\u002Fstatic-members","02.cpp\u002F58.static-members",{"title":1949,"path":1950,"stem":1951},"Конструктор копіювання та запобігання копіюванню","\u002Fcpp\u002Fcopy-constructor","02.cpp\u002F59.copy-constructor",{"title":1953,"path":1954,"stem":1955},"Дружні функції та класи","\u002Fcpp\u002Ffriend-functions-classes","02.cpp\u002F60.friend-functions-classes",{"title":1957,"path":1958,"stem":1959},"Анонімні об'єкти та вкладені типи","\u002Fcpp\u002Fanonymous-objects-nested-types","02.cpp\u002F61.anonymous-objects-nested-types",{"title":1961,"path":1962,"stem":1963},"Вимірювання часу виконання: RAII-таймер","\u002Fcpp\u002Ftiming-raii-timer","02.cpp\u002F62.timing-raii-timer",{"title":1965,"path":1966,"stem":1967},"Перевантаження операторів: основи та арифметика","\u002Fcpp\u002Foperator-overloading-basics","02.cpp\u002F63.operator-overloading-basics",{"title":1969,"path":1970,"stem":1971},"Перевантаження операторів: методи класу та спеціальні оператори","\u002Fcpp\u002Foperator-overloading-methods","02.cpp\u002F64.operator-overloading-methods",{"title":1973,"path":1974,"stem":1975},"Приведення типів, explicit та delete","\u002Fcpp\u002Ftypecast-explicit-delete","02.cpp\u002F65.typecast-explicit-delete",{"title":1977,"path":1978,"stem":1979},"Глибоке копіювання та оператор присвоювання","\u002Fcpp\u002Fdeep-copy-assignment","02.cpp\u002F66.deep-copy-assignment",{"title":1981,"path":1982,"stem":1983},"Зв'язки між об'єктами: композиція та агрегація","\u002Fcpp\u002Fcomposition-aggregation","02.cpp\u002F67.composition-aggregation",{"title":1985,"path":1986,"stem":1987},"Асоціація та залежність між об","\u002Fcpp\u002Fassociation-dependency","02.cpp\u002F68.association-dependency",{"title":1989,"path":1990,"stem":1991},"Контейнерні класи та `std::initializer_list`","\u002Fcpp\u002Fcontainer-classes-initializer-list","02.cpp\u002F69.container-classes-initializer-list",{"title":1993,"path":1994,"stem":1995},"Вступ до наслідування: базові поняття та відношення «is-a»","\u002Fcpp\u002Finheritance-intro","02.cpp\u002F70.inheritance-intro",{"title":1997,"path":1998,"stem":1999},"Конструктори, деструктори та порядок ініціалізації в ієрархіях","\u002Fcpp\u002Finheritance-constructors-destructors","02.cpp\u002F71.inheritance-constructors-destructors",{"title":2001,"path":2002,"stem":2003},"Специфікатор `protected` та види наслідування","\u002Fcpp\u002Finheritance-access-specifiers","02.cpp\u002F72.inheritance-access-specifiers",{"title":2005,"path":2006,"stem":2007},"Перевизначення методів та приховування імен","\u002Fcpp\u002Fmethod-overriding-hiding","02.cpp\u002F73.method-overriding-hiding",{"title":2009,"path":2010,"stem":2011},"Множинне наслідування та проблема ромба","\u002Fcpp\u002Fmultiple-inheritance-diamond","02.cpp\u002F74.multiple-inheritance-diamond",{"title":2013,"path":2014,"stem":2015},"Вказівники на базовий клас та віртуальні функції","\u002Fcpp\u002Fvirtual-functions-polymorphism","02.cpp\u002F75.virtual-functions-polymorphism",{"title":2017,"path":2018,"stem":2019},"Специфікатори override, final та віртуальні деструктори","\u002Fcpp\u002Foverride-final-virtual-destructors","02.cpp\u002F76.override-final-virtual-destructors",{"title":2021,"path":2022,"stem":2023},"Внутрішні механізми поліморфізму: vtable, vptr та зв'язування","\u002Fcpp\u002Fvirtual-table-binding","02.cpp\u002F77.virtual-table-binding",{"title":2025,"path":2026,"stem":2027},"Абстрактні класи та чисті віртуальні функції","\u002Fcpp\u002Fabstract-classes-interfaces","02.cpp\u002F78.abstract-classes-interfaces",{"title":2029,"path":2030,"stem":2031},"Зрізка об'єктів, віртуальне наслідування та поліморфний вивід","\u002Fcpp\u002Fslicing-virtual-base-io","02.cpp\u002F79.slicing-virtual-base-io",{"title":2033,"path":2034,"stem":2035},"Динамічне приведення типів (`dynamic_cast`) та RTTI","\u002Fcpp\u002Fdynamic-cast-rtti","02.cpp\u002F80.dynamic-cast-rtti",{"title":2037,"path":2038,"stem":2039},"Шаблони функцій: узагальнене програмування","\u002Fcpp\u002Ffunction-templates","02.cpp\u002F81.function-templates",{"title":2041,"path":2042,"stem":2043},"Шаблони класів та NTTP-параметри","\u002Fcpp\u002Fclass-templates-nttp","02.cpp\u002F82.class-templates-nttp",{"title":2045,"path":2046,"stem":2047},"Повна (явна) спеціалізація шаблонів","\u002Fcpp\u002Ffull-template-specialization","02.cpp\u002F83.full-template-specialization",{"title":2049,"path":2050,"stem":2051},"Часткова спеціалізація шаблонів класів","\u002Fcpp\u002Fpartial-template-specialization","02.cpp\u002F84.partial-template-specialization",{"title":2053,"path":2054,"stem":2055},"Механізм винятків: try, catch, throw та розкручування стеку","\u002Fcpp\u002Fexceptions-basics","02.cpp\u002F85.exceptions-basics",{"title":2057,"path":2058,"stem":2059},"Ієрархія std::exception та власні класи винятків","\u002Fcpp\u002Fexception-hierarchy-custom","02.cpp\u002F86.exception-hierarchy-custom",{"title":2061,"path":2062,"stem":2063},"Повторне генерування винятків та функціональний try-блок","\u002Fcpp\u002Frethrow-function-try","02.cpp\u002F87.rethrow-function-try",{"title":2065,"path":2066,"stem":2067},"Безпека винятків, noexcept та деструктори","\u002Fcpp\u002Fsafety-noexcept","02.cpp\u002F88.safety-noexcept",{"title":2069,"path":2070,"stem":2071},"Стаття 89 — Власні структури даних: стек та черга","\u002Fcpp\u002Fcustom-stack-queue","02.cpp\u002F89.custom-stack-queue",{"title":2073,"path":2074,"stem":2075},"Стаття 90 — Власні структури даних: однозв'язаний список","\u002Fcpp\u002Flinked-list","02.cpp\u002F90.linked-list",{"title":2077,"path":2078,"stem":2079},"Стаття 91 — Власні структури даних: бінарне дерево пошуку","\u002Fcpp\u002Fbinary-search-tree","02.cpp\u002F91.binary-search-tree",{"title":2081,"path":2082,"stem":2083},"Стаття 92 — Власні структури даних: хеш-таблиця","\u002Fcpp\u002Fhash-table","02.cpp\u002F92.hash-table",{"title":2085,"icon":2086,"path":2087,"stem":2088,"children":2089,"page":59},"JavaScript","i-devicon-javascript","\u002Fjavascript","03.javascript",[2090,2116,2170,2192,2496,2534,2552],{"title":2091,"icon":2092,"path":2093,"stem":2094,"children":2095,"page":59},"Events","i-lucide-mouse-pointer-click","\u002Fjavascript\u002Fevents","03.javascript\u002F01.events",[2096,2100,2104,2108,2112],{"title":2097,"path":2098,"stem":2099},"Вступ до подій браузера","\u002Fjavascript\u002Fevents\u002Fintro","03.javascript\u002F01.events\u002F01.intro",{"title":2101,"path":2102,"stem":2103},"Бульбашковий механізм (Bubbling) та занурення (Capturing)","\u002Fjavascript\u002Fevents\u002Fbubbling-capturing","03.javascript\u002F01.events\u002F02.bubbling-capturing",{"title":2105,"path":2106,"stem":2107},"Делегування подій (Event Delegation)","\u002Fjavascript\u002Fevents\u002Fdelegate-events","03.javascript\u002F01.events\u002F03.delegate-events",{"title":2109,"path":2110,"stem":2111},"Типові дії браузера та preventDefault()","\u002Fjavascript\u002Fevents\u002Fprevent-default","03.javascript\u002F01.events\u002F04.prevent-default",{"title":2113,"path":2114,"stem":2115},"Запуск користувацьких подій (Custom Events)","\u002Fjavascript\u002Fevents\u002Fcustom-events","03.javascript\u002F01.events\u002F05.custom-events",{"title":2117,"icon":2118,"path":2119,"stem":2120,"children":2121,"page":59},"Network","i-lucide-globe","\u002Fjavascript\u002Fnetwork","03.javascript\u002F02.network",[2122,2126,2130,2134,2138,2142,2146,2150,2154,2158,2162,2166],{"title":2123,"path":2124,"stem":2125},"Fetch API - Сучасний підхід до HTTP-запитів","\u002Fjavascript\u002Fnetwork\u002F01-fetch-api","03.javascript\u002F02.network\u002F01-fetch-api",{"title":2127,"path":2128,"stem":2129},"FormData - Робота з формами та файлами","\u002Fjavascript\u002Fnetwork\u002F02-formdata","03.javascript\u002F02.network\u002F02-formdata",{"title":2131,"path":2132,"stem":2133},"Відстеження прогресу завантаження","\u002Fjavascript\u002Fnetwork\u002F03-download-progress","03.javascript\u002F02.network\u002F03-download-progress",{"title":2135,"path":2136,"stem":2137},"Переривання fetch-запитів","\u002Fjavascript\u002Fnetwork\u002F04-abort-requests","03.javascript\u002F02.network\u002F04-abort-requests",{"title":2139,"path":2140,"stem":2141},"CORS - Запити між різними джерелами","\u002Fjavascript\u002Fnetwork\u002F05-cors","03.javascript\u002F02.network\u002F05-cors",{"title":2143,"path":2144,"stem":2145},"Fetch API - Повний довідник опцій","\u002Fjavascript\u002Fnetwork\u002F06-fetch-options","03.javascript\u002F02.network\u002F06-fetch-options",{"title":2147,"path":2148,"stem":2149},"URL Objects - Робота з посиланнями","\u002Fjavascript\u002Fnetwork\u002F07-url-objects","03.javascript\u002F02.network\u002F07-url-objects",{"title":2151,"path":2152,"stem":2153},"XMLHttpRequest - AJAX та низькорівневі запити","\u002Fjavascript\u002Fnetwork\u002F08-xmlhttprequest","03.javascript\u002F02.network\u002F08-xmlhttprequest",{"title":2155,"path":2156,"stem":2157},"Відновлюване завантаження файлів","\u002Fjavascript\u002Fnetwork\u002F09-resumable-upload","03.javascript\u002F02.network\u002F09-resumable-upload",{"title":2159,"path":2160,"stem":2161},"Cookies, document.cookie та світ після \"Cookiepocalypse\"","\u002Fjavascript\u002Fnetwork\u002F10-cookies","03.javascript\u002F02.network\u002F10-cookies",{"title":2163,"path":2164,"stem":2165},"js-cookie: Керування Cookies без Болю","\u002Fjavascript\u002Fnetwork\u002F11-js-cookie","03.javascript\u002F02.network\u002F11-js-cookie",{"title":2167,"path":2168,"stem":2169},"Axios: Потужний HTTP-клієнт для JavaScript","\u002Fjavascript\u002Fnetwork\u002F12-axios","03.javascript\u002F02.network\u002F12-axios",{"title":2171,"icon":2172,"path":2173,"stem":2174,"children":2175,"page":59},"Bom","i-lucide-monitor","\u002Fjavascript\u002Fbom","03.javascript\u002F03.bom",[2176,2180,2184,2188],{"title":2177,"path":2178,"stem":2179},"LocalStorage, SessionStorage та patterns збереження даних","\u002Fjavascript\u002Fbom\u002F01-localstorage","03.javascript\u002F03.bom\u002F01-localstorage",{"title":2181,"path":2182,"stem":2183},"Location Object - Керування адресою сторінки","\u002Fjavascript\u002Fbom\u002F02-location-object","03.javascript\u002F03.bom\u002F02-location-object",{"title":2185,"path":2186,"stem":2187},"History API - Керування історією браузера","\u002Fjavascript\u002Fbom\u002F03-history-api","03.javascript\u002F03.bom\u002F03-history-api",{"title":2189,"path":2190,"stem":2191},"Navigator Object - Ідентифікація та Можливості Пристрою","\u002Fjavascript\u002Fbom\u002F04-navigator-object","03.javascript\u002F03.bom\u002F04-navigator-object",{"title":2193,"icon":2194,"path":2195,"stem":2196,"children":2197},"React","i-devicon-react","\u002Fjavascript\u002Freact","03.javascript\u002F04.react\u002Findex",[2198,2199,2203,2207,2211,2215,2278,2313,2465],{"title":2193,"path":2195,"stem":2196},{"title":2200,"path":2201,"stem":2202},"Робота з Формами в React","\u002Fjavascript\u002Freact\u002Freact-forms","03.javascript\u002F04.react\u002F01.react-forms",{"title":2204,"path":2205,"stem":2206},"React Hook Form: Професійна Робота з Формами","\u002Fjavascript\u002Freact\u002Freact-hook-form","03.javascript\u002F04.react\u002F02.react-hook-form",{"title":2208,"path":2209,"stem":2210},"React Hook Form: Глибоке Розуміння Архітектури та Оптимізації","\u002Fjavascript\u002Freact\u002Freact-hook-form-new","03.javascript\u002F04.react\u002F02.react-hook-form-new",{"title":2212,"path":2213,"stem":2214},"Axios та React: Професійна Архітектура Запитів","\u002Fjavascript\u002Freact\u002Fdata-fetching-axios","03.javascript\u002F04.react\u002F03.data-fetching-axios",{"title":2216,"icon":132,"path":2217,"stem":2218,"children":2219},"Tanstack Query","\u002Fjavascript\u002Freact\u002Ftanstack-query","03.javascript\u002F04.react\u002F04.tanstack-query\u002Findex",[2220,2222,2226,2230,2234,2238,2242,2246,2250,2254,2258,2262,2266,2270,2274],{"title":2221,"path":2217,"stem":2218},"TanStack Query: Майстерність Керування Станом Сервера",{"title":2223,"path":2224,"stem":2225},"Парадигма Server State: Чому useEffect недостатньо","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-state-paradigm","03.javascript\u002F04.react\u002F04.tanstack-query\u002F01.server-state-paradigm",{"title":2227,"path":2228,"stem":2229},"Встановлення та Налаштування: Фундамент","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Finstallation-and-devtools","03.javascript\u002F04.react\u002F04.tanstack-query\u002F02.installation-and-devtools",{"title":2231,"path":2232,"stem":2233},"Основи Запитів та Магія Ключів","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fquery-basics-and-keys","03.javascript\u002F04.react\u002F04.tanstack-query\u002F03.query-basics-and-keys",{"title":2235,"path":2236,"stem":2237},"Синхронізація Даних: Життєвий Цикл Запиту","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fdata-synchronization","03.javascript\u002F04.react\u002F04.tanstack-query\u002F04.data-synchronization",{"title":2239,"path":2240,"stem":2241},"Мутації та Інвалідація: Зміна Даних","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fmutations-and-invalidation","03.javascript\u002F04.react\u002F04.tanstack-query\u002F05.mutations-and-invalidation",{"title":2243,"path":2244,"stem":2245},"Оптимістичні Оновлення: Швидше за Світло","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Foptimistic-updates","03.javascript\u002F04.react\u002F04.tanstack-query\u002F06.optimistic-updates",{"title":2247,"path":2248,"stem":2249},"Пагінація та Infinite Scroll","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fpagination-and-load-more","03.javascript\u002F04.react\u002F04.tanstack-query\u002F07.pagination-and-load-more",{"title":2251,"path":2252,"stem":2253},"Просунуті Патерни та Оптимізація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F04.tanstack-query\u002F08.advanced-patterns",{"title":2255,"path":2256,"stem":2257},"Архітектура та Best Practices","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Farchitecture-and-best-practices","03.javascript\u002F04.react\u002F04.tanstack-query\u002F09.architecture-and-best-practices",{"title":2259,"path":2260,"stem":2261},"Server-Side Rendering (SSR) та Гідратація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-side-rendering","03.javascript\u002F04.react\u002F04.tanstack-query\u002F10.server-side-rendering",{"title":2263,"path":2264,"stem":2265},"Стратегії Тестування","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Ftesting-strategies","03.javascript\u002F04.react\u002F04.tanstack-query\u002F11.testing-strategies",{"title":2267,"path":2268,"stem":2269},"Аутентифікація та Обробка Помилок","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fauthentication-and-errors","03.javascript\u002F04.react\u002F04.tanstack-query\u002F12.authentication-and-errors",{"title":2271,"path":2272,"stem":2273},"React Suspense та Майбутнє","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Freact-suspense","03.javascript\u002F04.react\u002F04.tanstack-query\u002F13.react-suspense",{"title":2275,"path":2276,"stem":2277},"Глибоке Занурення в Продуктивність","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fperformance-deep-dive","03.javascript\u002F04.react\u002F04.tanstack-query\u002F14.performance-deep-dive",{"title":2279,"icon":2194,"path":2280,"stem":2281,"children":2282},"React Router","\u002Fjavascript\u002Freact\u002Freact-router","03.javascript\u002F04.react\u002F05.react-router\u002Findex",[2283,2285,2289,2293,2297,2301,2305,2309],{"title":2284,"path":2280,"stem":2281},"React Router: Навігаційна система сучасного вебу",{"title":2286,"path":2287,"stem":2288},"Налаштування та Базовий Роутинг","\u002Fjavascript\u002Freact\u002Freact-router\u002Fsetup-and-basic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F01.setup-and-basic-routing",{"title":2290,"path":2291,"stem":2292},"Динамічна Навігація","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnavigation-and-links","03.javascript\u002F04.react\u002F05.react-router\u002F02.navigation-and-links",{"title":2294,"path":2295,"stem":2296},"Вкладені Маршрути та Макети","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnested-routes-and-layouts","03.javascript\u002F04.react\u002F05.react-router\u002F03.nested-routes-and-layouts",{"title":2298,"path":2299,"stem":2300},"Динамічні Маршрути та Параметри","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdynamic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F04.dynamic-routing",{"title":2302,"path":2303,"stem":2304},"Data APIs: Loaders та Actions","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdata-loading","03.javascript\u002F04.react\u002F05.react-router\u002F05.data-loading",{"title":2306,"path":2307,"stem":2308},"Просунуті Патерни","\u002Fjavascript\u002Freact\u002Freact-router\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F05.react-router\u002F06.advanced-patterns",{"title":2310,"path":2311,"stem":2312},"Legacy Routing: Компонентний підхід","\u002Fjavascript\u002Freact\u002Freact-router\u002Flegacy-routing","03.javascript\u002F04.react\u002F05.react-router\u002F07.legacy-routing",{"title":2314,"icon":132,"path":2315,"stem":2316,"children":2317},"Redux","\u002Fjavascript\u002Freact\u002Fredux","03.javascript\u002F04.react\u002F06.redux\u002Findex",[2318,2320,2336,2365,2374,2395,2411,2440],{"title":2319,"path":2315,"stem":2316},"Redux: Еволюція управління станом",{"title":14,"icon":15,"path":2321,"stem":2322,"children":2323,"page":59},"\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals",[2324,2328,2332],{"title":2325,"path":2326,"stem":2327},"Вступ до State Management","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fintro-state-management","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F01.intro-state-management",{"title":2329,"path":2330,"stem":2331},"Філософія Redux та Три Принципи","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fredux-philosophy","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F02.redux-philosophy",{"title":2333,"path":2334,"stem":2335},"Чисті функції та Іммутабельність","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fpure-functions-immutability","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F03.pure-functions-immutability",{"title":2337,"icon":132,"path":2338,"stem":2339,"children":2340,"page":59},"Classic Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux",[2341,2345,2349,2353,2357,2361],{"title":2342,"path":2343,"stem":2344},"Створення Store (Classic Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fstore-setup","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F01.store-setup",{"title":2346,"path":2347,"stem":2348},"Actions, Constants та Action Creators","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Factions-constants","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F02.actions-constants",{"title":2350,"path":2351,"stem":2352},"Логіка Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freducers","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F03.reducers",{"title":2354,"path":2355,"stem":2356},"Комбінування Reducers (Root Reducer)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fdata-flow","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F04.data-flow",{"title":2358,"path":2359,"stem":2360},"Підключення до React (React-Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freact-redux-connection","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F05.react-redux-connection",{"title":2362,"path":2363,"stem":2364},"Middleware та Асинхронність (Redux Thunk)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fmiddleware-thunk","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F06.middleware-thunk",{"title":2366,"icon":132,"path":2367,"stem":2368,"children":2369,"page":59},"Transition To Rtk","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk",[2370],{"title":2371,"path":2372,"stem":2373},"Проблеми класичного Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk\u002Fproblems-with-classic","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk\u002F01.problems-with-classic",{"title":2375,"icon":132,"path":2376,"stem":2377,"children":2378,"page":59},"Redux Toolkit","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit",[2379,2383,2387,2391],{"title":2380,"path":2381,"stem":2382},"Налаштування Store з configureStore","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fconfigure-store","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F01.configure-store",{"title":2384,"path":2385,"stem":2386},"createSlice: Революція в Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fcreate-slice","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F02.create-slice",{"title":2388,"path":2389,"stem":2390},"Асинхронність з createAsyncThunk","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fasync-thunks","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F03.async-thunks",{"title":2392,"path":2393,"stem":2394},"04. Entity Adapter: Керування нормалізованим станом","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fentity-adapter","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F04.entity-adapter",{"title":2396,"icon":92,"path":2397,"stem":2398,"children":2399,"page":59},"Advanced","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced",[2400,2404,2408],{"title":2401,"path":2402,"stem":2403},"Мемоізація та Селектори: Повний Гайд по Reselect","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Fselectors-reselect","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F01.selectors-reselect",{"title":2405,"path":2406,"stem":2407},"RTK Query: Архітектура Серверного Кешу","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Frtk-query-intro","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F02.rtk-query-intro",{"title":2255,"path":2409,"stem":2410},"\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Farchitecture-best-practices","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F03.architecture-best-practices",{"title":2412,"icon":132,"path":2413,"stem":2414,"children":2415,"page":59},"Project Kanban","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban",[2416,2420,2424,2428,2432,2436],{"title":2417,"path":2418,"stem":2419},"Проєкт: Kanban Board (Trello Clone)","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fproject-overview","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F01.project-overview",{"title":2421,"path":2422,"stem":2423},"Налаштування та Типізація","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fsetup-and-types","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F02.setup-and-types",{"title":2425,"path":2426,"stem":2427},"Board Slice: Серце Дошки","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fboard-slice","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F03.board-slice",{"title":2429,"path":2430,"stem":2431},"Логіка Drag & Drop","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fdrag-and-drop-logic","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F04.drag-and-drop-logic",{"title":2433,"path":2434,"stem":2435},"Інтеграція з RTK Query","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Frtk-query-integration","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F05.rtk-query-integration",{"title":2437,"path":2438,"stem":2439},"Optimistic Updates","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Foptimistic-updates","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F06.optimistic-updates",{"title":2441,"icon":132,"path":2442,"stem":2443,"children":2444,"page":59},"Testing","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting","03.javascript\u002F04.react\u002F06.redux\u002F07.testing",[2445,2449,2453,2457,2461],{"title":2446,"path":2447,"stem":2448},"Тестування Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Fintro-testing","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F01.intro-testing",{"title":2450,"path":2451,"stem":2452},"Тестування Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-reducers","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F02.testing-reducers",{"title":2454,"path":2455,"stem":2456},"Тестування Селекторів","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-selectors","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F03.testing-selectors",{"title":2458,"path":2459,"stem":2460},"Тестування Компонентів (Integration)","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-components","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F04.testing-components",{"title":2462,"path":2463,"stem":2464},"Тестування Async Thunks","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-thunks","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F05.testing-thunks",{"title":2466,"icon":132,"path":2467,"stem":2468,"children":2469},"Ui Libraries","\u002Fjavascript\u002Freact\u002Fui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002Findex",[2470,2472,2476,2480,2484,2488,2492],{"title":2471,"path":2467,"stem":2468},"UI Бібліотеки в React",{"title":2473,"path":2474,"stem":2475},"Вступ до UI Бібліотек: Навіщо Винаходити Велосипед Двічі?","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fintroduction-to-ui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002F01.introduction-to-ui-libraries",{"title":2477,"path":2478,"stem":2479},"Філософія shadcn\u002Fui: \"Not a Component Library\"","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-philosophy","03.javascript\u002F04.react\u002F07.ui-libraries\u002F02.shadcn-philosophy",{"title":2481,"path":2482,"stem":2483},"Установка та Налаштування shadcn\u002Fui","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-installation","03.javascript\u002F04.react\u002F07.ui-libraries\u002F03.shadcn-installation",{"title":2485,"path":2486,"stem":2487},"Базові Компоненти shadcn\u002Fui: Фундамент Інтерфейсу","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-basics","03.javascript\u002F04.react\u002F07.ui-libraries\u002F04.shadcn-components-basics",{"title":2489,"path":2490,"stem":2491},"Компоненти Форм: Побудова Інтерактивних Form","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-forms","03.javascript\u002F04.react\u002F07.ui-libraries\u002F05.shadcn-components-forms",{"title":2493,"path":2494,"stem":2495},"Складні Компоненти: Dialog, Dropdown, Table та Command","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-advanced","03.javascript\u002F04.react\u002F07.ui-libraries\u002F06.shadcn-components-advanced",{"title":2497,"icon":2498,"path":2499,"stem":2500,"children":2501,"page":59},"TypeScript","i-devicon-typescript","\u002Fjavascript\u002Ftypescript","03.javascript\u002F05.typescript",[2502,2506,2510,2514,2518,2522,2526,2530],{"title":2503,"path":2504,"stem":2505},"TypeScript: Броня для вашого коду","\u002Fjavascript\u002Ftypescript\u002Fintro-and-basic-types","03.javascript\u002F05.typescript\u002F01.intro-and-basic-types",{"title":2507,"path":2508,"stem":2509},"Майстерність Моделювання Даних: Інтерфейси та Просунуті Типи","\u002Fjavascript\u002Ftypescript\u002Finterfaces-and-advanced-types","03.javascript\u002F05.typescript\u002F02.interfaces-and-advanced-types",{"title":2511,"path":2512,"stem":2513},"Алхімія Типів: Generics та Utility Types","\u002Fjavascript\u002Ftypescript\u002Fgenerics-and-utilities","03.javascript\u002F05.typescript\u002F03.generics-and-utilities",{"title":2515,"path":2516,"stem":2517},"Архітектура та Шаблони: Класи в TypeScript","\u002Fjavascript\u002Ftypescript\u002Fclasses-and-oop","03.javascript\u002F05.typescript\u002F04.classes-and-oop",{"title":2519,"path":2520,"stem":2521},"Продакшн та Екосистема: Advanced Config & Workflow","\u002Fjavascript\u002Ftypescript\u002Fadvanced-patterns-and-config","03.javascript\u002F05.typescript\u002F05.advanced-patterns-and-config",{"title":2523,"path":2524,"stem":2525},"TypeScript у світі React","\u002Fjavascript\u002Ftypescript\u002Freact-basics","03.javascript\u002F05.typescript\u002F06.react-basics",{"title":2527,"path":2528,"stem":2529},"React + TypeScript: Продвинуті патерни","\u002Fjavascript\u002Ftypescript\u002Freact-advanced","03.javascript\u002F05.typescript\u002F07.react-advanced",{"title":2531,"path":2532,"stem":2533},"React + TypeScript: Екосистема та бібліотеки","\u002Fjavascript\u002Ftypescript\u002Freact-ecosystem","03.javascript\u002F05.typescript\u002F08.react-ecosystem",{"title":2535,"icon":2536,"path":2537,"stem":2538,"children":2539,"page":59},"Асинхронність","i-lucide-refresh-cw","\u002Fjavascript\u002Fasync-programming","03.javascript\u002F06.async-programming",[2540,2544,2548],{"title":2541,"path":2542,"stem":2543},"Event Loop: серце асинхронності в JavaScript","\u002Fjavascript\u002Fasync-programming\u002Fevent-loop-fundamentals","03.javascript\u002F06.async-programming\u002F01.event-loop-fundamentals",{"title":2545,"path":2546,"stem":2547},"Task Queue та Microtask Queue: пріоритети виконання","\u002Fjavascript\u002Fasync-programming\u002Ftask-queues","03.javascript\u002F06.async-programming\u002F02.task-queues",{"title":2549,"path":2550,"stem":2551},"Асинхронні патерни: від Callbacks до Async\u002FAwait","\u002Fjavascript\u002Fasync-programming\u002Fasync-patterns","03.javascript\u002F06.async-programming\u002F03.async-patterns",{"title":2553,"path":2554,"stem":2555},"Atomic Design","\u002Fjavascript\u002Fatomic-design","03.javascript\u002F2.atomic-design",{"title":2557,"icon":2558,"path":2559,"stem":2560,"children":2561,"page":59},"Java","i-devicon-java","\u002Fjava","04.java",[2562,2565,2568,2572,2576,2580,2584],{"title":162,"path":2563,"stem":2564},"\u002Fjava\u002Fdata-mapper-part1","04.java\u002F01.data-mapper-part1",{"title":166,"path":2566,"stem":2567},"\u002Fjava\u002Fdata-mapper-part2","04.java\u002F02.data-mapper-part2",{"title":2569,"path":2570,"stem":2571},"Service Layer: Організація бізнес-логіки","\u002Fjava\u002Fservice-layer","04.java\u002F03.service-layer",{"title":2573,"path":2574,"stem":2575},"Rich Domain Model та State Pattern","\u002Fjava\u002Frich-domain-model","04.java\u002F04.rich-domain-model",{"title":2577,"path":2578,"stem":2579},"Патерни для складної бізнес-логіки","\u002Fjava\u002Fbusiness-logic-patterns","04.java\u002F05.business-logic-patterns",{"title":2581,"path":2582,"stem":2583},"Обробка помилок та валідація","\u002Fjava\u002Ferror-handling-validation","04.java\u002F06.error-handling-validation",{"title":2585,"path":2586,"stem":2587,"children":2588,"page":59},"Проектування баз даних","\u002Fjava\u002Fpr2","04.java\u002Fpr2",[2589,2593,2597,2601,2605,2609,2613,2617,2621,2625,2629,2633,2637,2641,2645,2649,2653,2657,2661,2665,2669,2673,2677,2681,2685,2689,2693,2697,2701,2705,2709,2713,2717,2721,2725,2729,2733],{"title":2590,"path":2591,"stem":2592},"Концептуальне моделювання: Мистецтво розуміння предметної області","\u002Fjava\u002Fpr2\u002Fconceptual-modeling","04.java\u002Fpr2\u002F01.conceptual-modeling",{"title":2594,"path":2595,"stem":2596},"Логічне моделювання: Від бізнес-ідей до структур даних","\u002Fjava\u002Fpr2\u002Flogical-modeling","04.java\u002Fpr2\u002F02.logical-modeling",{"title":2598,"path":2599,"stem":2600},"Нормалізація: Гігієна даних та боротьба з аномаліями","\u002Fjava\u002Fpr2\u002Fnormalization","04.java\u002Fpr2\u002F03.normalization",{"title":2602,"path":2603,"stem":2604},"Фізична схема: Від абстракції до DDL","\u002Fjava\u002Fpr2\u002Fphysical-schema","04.java\u002Fpr2\u002F04.physical-schema",{"title":2606,"path":2607,"stem":2608},"Архітектурна класифікація таблиць","\u002Fjava\u002Fpr2\u002Ftable-classification","04.java\u002Fpr2\u002F05.table-classification",{"title":2610,"path":2611,"stem":2612},"Database Migrations: Версіонування схеми з Flyway","\u002Fjava\u002Fpr2\u002Fdatabase-migrations","04.java\u002Fpr2\u002F06.database-migrations",{"title":2614,"path":2615,"stem":2616},"А що, якби це була не реляційна БД?","\u002Fjava\u002Fpr2\u002Fbeyond-relational","04.java\u002Fpr2\u002F07.beyond-relational",{"title":2618,"path":2619,"stem":2620},"Object-Relational Impedance Mismatch: Два світи, що не хочуть дружити","\u002Fjava\u002Fpr2\u002Fimpedance-mismatch","04.java\u002Fpr2\u002F09.impedance-mismatch",{"title":2622,"path":2623,"stem":2624},"JDBC: Перший контакт із базою даних","\u002Fjava\u002Fpr2\u002Fjdbc-fundamentals","04.java\u002Fpr2\u002F10.jdbc-fundamentals",{"title":2626,"path":2627,"stem":2628},"Якість коду: Spotless, SpotBugs та SonarQube","\u002Fjava\u002Fpr2\u002F10a.code-quality","04.java\u002Fpr2\u002F10a.code-quality",{"title":2630,"path":2631,"stem":2632},"Connection Pool: Патерн Object Pool для JDBC-з'єднань","\u002Fjava\u002Fpr2\u002Fconnection-pool","04.java\u002Fpr2\u002F11.connection-pool",{"title":2634,"path":2635,"stem":2636},"Row Data Gateway: Об'єкт як обгортка рядка таблиці","\u002Fjava\u002Fpr2\u002Frow-data-gateway","04.java\u002Fpr2\u002F12.row-data-gateway",{"title":2638,"path":2639,"stem":2640},"Table Data Gateway: Фасад таблиці як архітектурний відступ","\u002Fjava\u002Fpr2\u002Ftable-data-gateway","04.java\u002Fpr2\u002F13.table-data-gateway",{"title":2642,"path":2643,"stem":2644},"Repository + Data Mapper: Правильна шарова архітектура з JDBC","\u002Fjava\u002Fpr2\u002Frepository-data-mapper","04.java\u002Fpr2\u002F14.repository-data-mapper",{"title":2646,"path":2647,"stem":2648},"Identity Map: Кешування сутностей у рамках сесії","\u002Fjava\u002Fpr2\u002Fidentity-map","04.java\u002Fpr2\u002F15.identity-map",{"title":2650,"path":2651,"stem":2652},"Unit of Work: Відстеження змін і координація JDBC-транзакцій","\u002Fjava\u002Fpr2\u002Funit-of-work","04.java\u002Fpr2\u002F16.unit-of-work",{"title":2654,"path":2655,"stem":2656},"Strategy: Замінювані SQL-стратегії для підтримки різних СУБД","\u002Fjava\u002Fpr2\u002Fstrategy-sql","04.java\u002Fpr2\u002F17.strategy-sql",{"title":2658,"path":2659,"stem":2660},"Proxy: Lazy Loading для One-To-Many колекцій","\u002Fjava\u002Fpr2\u002Fproxy-lazy-loading","04.java\u002Fpr2\u002F18.proxy-lazy-loading",{"title":2662,"path":2663,"stem":2664},"Generic Repository через Java Reflection: анотації та динамічний SQL","\u002Fjava\u002Fpr2\u002Fgeneric-repository-reflection","04.java\u002Fpr2\u002F19.generic-repository-reflection",{"title":2666,"path":2667,"stem":2668},"Specification Pattern: Композиція бізнес-правил для складних запитів","\u002Fjava\u002Fpr2\u002Fspecification-pattern","04.java\u002Fpr2\u002F20.specification-pattern",{"title":2670,"path":2671,"stem":2672},"Розширені можливості Specification Pattern: підзапити, агрегації та гібридний підхід","\u002Fjava\u002Fpr2\u002F20a.advanced-specifications","04.java\u002Fpr2\u002F20a.advanced-specifications",{"title":2674,"path":2675,"stem":2676},"Асинхронність у JDBC: Від блокуючих викликів до CompletableFuture","\u002Fjava\u002Fpr2\u002Fasynchronous-jdbc","04.java\u002Fpr2\u002F21.asynchronous-jdbc",{"title":2678,"path":2679,"stem":2680},"Інтеграційне тестування JDBC-репозиторіїв: Embedded H2 та патерн AAA","\u002Fjava\u002Fpr2\u002Fintegration-testing-h2","04.java\u002Fpr2\u002F22.integration-testing-h2",{"title":2682,"path":2683,"stem":2684},"Testcontainers: Тестування з реальною PostgreSQL у Docker-контейнерах","\u002Fjava\u002Fpr2\u002Fintegration-testing-testcontainers","04.java\u002Fpr2\u002F23.integration-testing-testcontainers",{"title":2686,"path":2687,"stem":2688},"Google Guice: Впровадження залежностей у JavaFX-проєкті","\u002Fjava\u002Fpr2\u002Fdependency-injection-guice","04.java\u002Fpr2\u002F24.dependency-injection-guice",{"title":2690,"path":2691,"stem":2692},"JavaFX: Основи побудови графічних інтерфейсів","\u002Fjava\u002Fpr2\u002Fjavafx-fundamentals","04.java\u002Fpr2\u002F25.javafx-fundamentals",{"title":2694,"path":2695,"stem":2696},"Properties та Bindings: Реактивність у JavaFX","\u002Fjava\u002Fpr2\u002Fjavafx-properties-bindings","04.java\u002Fpr2\u002F26.javafx-properties-bindings",{"title":2698,"path":2699,"stem":2700},"MVC vs MVP vs MVVM: Еволюція архітектурних патернів UI","\u002Fjava\u002Fpr2\u002Fui-architecture-patterns","04.java\u002Fpr2\u002F27.ui-architecture-patterns",{"title":2702,"path":2703,"stem":2704},"MVVM на практиці: Побудова ViewModel","\u002Fjava\u002Fpr2\u002Fmvvm-viewmodel-implementation","04.java\u002Fpr2\u002F28.mvvm-viewmodel-implementation",{"title":2706,"path":2707,"stem":2708},"View та Controller: Зв'язування з ViewModel через FXML","\u002Fjava\u002Fpr2\u002Fmvvm-view-controller","04.java\u002Fpr2\u002F29.mvvm-view-controller",{"title":2710,"path":2711,"stem":2712},"Інтеграція MVVM з Guice: Автоматична ін'єкція залежностей","\u002Fjava\u002Fpr2\u002Fmvvm-guice-integration","04.java\u002Fpr2\u002F30.mvvm-guice-integration",{"title":2714,"path":2715,"stem":2716},"Валідація та обробка помилок у MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-validation-error-handling","04.java\u002Fpr2\u002F31.mvvm-validation-error-handling",{"title":2718,"path":2719,"stem":2720},"Навігація та управління екранами у JavaFX MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-navigation-screen-management","04.java\u002Fpr2\u002F32.mvvm-navigation-screen-management",{"title":2722,"path":2723,"stem":2724},"Тестування JavaFX MVVM-додатків","\u002Fjava\u002Fpr2\u002Fmvvm-testing","04.java\u002Fpr2\u002F33.mvvm-testing",{"title":2726,"path":2727,"stem":2728},"Стилізація та теми у JavaFX: CSS та User Experience","\u002Fjava\u002Fpr2\u002Fjavafx-styling-themes","04.java\u002Fpr2\u002F34.javafx-styling-themes",{"title":2730,"path":2731,"stem":2732},"AtlantaFX: Сучасні теми для JavaFX додатків","\u002Fjava\u002Fpr2\u002Fatlantafx-modern-themes","04.java\u002Fpr2\u002F35.atlantafx-modern-themes",{"title":2734,"path":2735,"stem":2736},"Пакування та розповсюдження JavaFX-додатків","\u002Fjava\u002Fpr2\u002Fjar-packaging-distribution","04.java\u002Fpr2\u002F36.jar-packaging-distribution",{"title":2738,"icon":2739,"path":2740,"stem":2741,"children":2742,"page":59},"Python","i-devicon-python","\u002Fpython","05.python",[2743,2747,2750,2754,2758,2762,2766,2770,2774,2778,2782,2786,2790,2794,2798,2859],{"title":2744,"path":2745,"stem":2746},"Модулі, Пакети та Віртуальні Середовища","\u002Fpython\u002Fmodules-packages-venv","05.python\u002F00.modules-packages-venv",{"title":71,"path":2748,"stem":2749},"\u002Fpython\u002Fclasses-objects","05.python\u002F01.classes-objects",{"title":2751,"path":2752,"stem":2753},"Інкапсуляція, Керування Доступом та Властивості","\u002Fpython\u002Fencapsulation","05.python\u002F02.encapsulation",{"title":2755,"path":2756,"stem":2757},"Наслідування, MRO та суперсила super()","\u002Fpython\u002Finheritance-mro","05.python\u002F03.inheritance-mro",{"title":2759,"path":2760,"stem":2761},"Абстракція — ABC проти Статичних Протоколів (PEP 544)","\u002Fpython\u002Fabstraction-protocols","05.python\u002F04.abstraction-protocols",{"title":2763,"path":2764,"stem":2765},"Магічні методи (Dunder) та Емуляція протоколів","\u002Fpython\u002Fdunder-methods","05.python\u002F05.dunder-methods",{"title":2767,"path":2768,"stem":2769},"Декоратори та Керування життєвим циклом методів","\u002Fpython\u002Fdecorators-static-class","05.python\u002F06.decorators-static-class",{"title":2771,"path":2772,"stem":2773},"Дескриптори — Магія доступу до атрибутів","\u002Fpython\u002Fdescriptors","05.python\u002F07.descriptors",{"title":2775,"path":2776,"stem":2777},"Метакласи — Динамічне створення класів під капотом CPython","\u002Fpython\u002Fmetaclasses","05.python\u002F08.metaclasses",{"title":2779,"path":2780,"stem":2781},"Dataclasses, NamedTuple та сучасні контейнери Python","\u002Fpython\u002Fmodern-containers","05.python\u002F09.modern-containers",{"title":2783,"path":2784,"stem":2785},"GIL та модель конкурентності CPython — фундамент перед потоками і процесами","\u002Fpython\u002Fgil-concurrency-intro","05.python\u002F11.gil-concurrency-intro",{"title":2787,"path":2788,"stem":2789},"Threading — конкурентність для I\u002FO-bound задач","\u002Fpython\u002Fthreading","05.python\u002F12.threading",{"title":2791,"path":2792,"stem":2793},"Multiprocessing — справжній паралелізм для CPU-bound задач","\u002Fpython\u002Fmultiprocessing","05.python\u002F13.multiprocessing",{"title":2795,"path":2796,"stem":2797},"asyncio — кооперативна конкурентність та event loop","\u002Fpython\u002Fasyncio","05.python\u002F14.asyncio",{"title":2799,"icon":92,"path":2800,"stem":2801,"children":2802,"page":59},"FastAPI","\u002Fpython\u002Ffastapi","05.python\u002Ffastapi",[2803,2807,2811,2815,2819,2823,2827,2831,2835,2839,2843,2847,2851,2855],{"title":2804,"path":2805,"stem":2806},"Глибокий Typing та Pydantic v2 — від анотацій до валідації","\u002Fpython\u002Ffastapi\u002Ftyping-pydantic","05.python\u002Ffastapi\u002F15.typing-pydantic",{"title":2808,"path":2809,"stem":2810},"WSGI, ASGI та Python Web-екосистема","\u002Fpython\u002Ffastapi\u002Fwsgi-asgi-ecosystem","05.python\u002Ffastapi\u002F16.wsgi-asgi-ecosystem",{"title":2812,"path":2813,"stem":2814},"FastAPI: Перший додаток, Uvicorn та OpenAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-intro","05.python\u002Ffastapi\u002F17.fastapi-intro",{"title":2816,"path":2817,"stem":2818},"Маршрутизація, параметри запитів та APIRouter","\u002Fpython\u002Ffastapi\u002Ffastapi-routing-params","05.python\u002Ffastapi\u002F18.fastapi-routing-params",{"title":2820,"path":2821,"stem":2822},"Pydantic v2 у FastAPI — схеми, валідація та серіалізація","\u002Fpython\u002Ffastapi\u002Ffastapi-pydantic-schemas","05.python\u002Ffastapi\u002F19.fastapi-pydantic-schemas",{"title":2824,"path":2825,"stem":2826},"Dependency Injection — серце архітектури FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-dependency-injection","05.python\u002Ffastapi\u002F20.fastapi-dependency-injection",{"title":2828,"path":2829,"stem":2830},"Обробка помилок, Middleware та CORS у FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-errors-middleware","05.python\u002Ffastapi\u002F21.fastapi-errors-middleware",{"title":2832,"path":2833,"stem":2834},"SQLAlchemy 2.0 — ORM, Core та Async Engine","\u002Fpython\u002Ffastapi\u002Fsqlalchemy-orm","05.python\u002Ffastapi\u002F22.sqlalchemy-orm",{"title":2836,"path":2837,"stem":2838},"Alembic — міграції бази даних","\u002Fpython\u002Ffastapi\u002Falembic-migrations","05.python\u002Ffastapi\u002F23.alembic-migrations",{"title":2840,"path":2841,"stem":2842},"Repository Pattern та Clean Architecture у FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-repository-clean-arch","05.python\u002Ffastapi\u002F24.fastapi-repository-clean-arch",{"title":2844,"path":2845,"stem":2846},"Автентифікація та авторизація — JWT, OAuth2, RBAC","\u002Fpython\u002Ffastapi\u002Ffastapi-auth-security","05.python\u002Ffastapi\u002F25.fastapi-auth-security",{"title":2848,"path":2849,"stem":2850},"Тестування FastAPI — pytest, httpx, fixtures","\u002Fpython\u002Ffastapi\u002Ffastapi-testing","05.python\u002Ffastapi\u002F26.fastapi-testing",{"title":2852,"path":2853,"stem":2854},"Async на повну — Background Tasks, WebSockets, SSE та Celery","\u002Fpython\u002Ffastapi\u002Ffastapi-async-advanced","05.python\u002Ffastapi\u002F27.fastapi-async-advanced",{"title":2856,"path":2857,"stem":2858},"Deployment — Docker, CI\u002FCD, Monitoring","\u002Fpython\u002Ffastapi\u002Ffastapi-deployment","05.python\u002Ffastapi\u002F28.fastapi-deployment",{"title":2860,"path":2861,"stem":2862},"[object Object]","\u002Fpython\u002Foop-plan","05.python\u002Foop-plan",{"title":2864,"icon":2865,"path":2866,"stem":2867,"children":2868,"page":59},"Бази даних","i-lucide-database","\u002Fdatabases","06.databases",[2869,2899,2922,2959,2988,3006,3040,3052,3061],{"title":2870,"icon":2871,"path":2872,"stem":2873,"children":2874,"page":59},"Intro","i-lucide-play","\u002Fdatabases\u002Fintro","06.databases\u002F01.intro",[2875,2879,2883,2887,2891,2895],{"title":2876,"path":2877,"stem":2878},"Введення в теорію баз даних","\u002Fdatabases\u002Fintro\u002Fintroduction-to-databases","06.databases\u002F01.intro\u002F01.introduction-to-databases",{"title":2880,"path":2881,"stem":2882},"Реляційна модель даних","\u002Fdatabases\u002Fintro\u002Frelational-model-theory","06.databases\u002F01.intro\u002F02.relational-model-theory",{"title":2884,"path":2885,"stem":2886},"ER-моделювання","\u002Fdatabases\u002Fintro\u002Fer-modeling","06.databases\u002F01.intro\u002F03.er-modeling",{"title":2888,"path":2889,"stem":2890},"Логічне проектування БД","\u002Fdatabases\u002Fintro\u002Flogical-schema","06.databases\u002F01.intro\u002F04.logical-schema",{"title":2892,"path":2893,"stem":2894},"Класифікація таблиць","\u002Fdatabases\u002Fintro\u002Ftable-classification","06.databases\u002F01.intro\u002F05.table-classification",{"title":2896,"path":2897,"stem":2898},"PlantUML для баз даних","\u002Fdatabases\u002Fintro\u002Fplantuml-diagrams","06.databases\u002F01.intro\u002F06.plantuml-diagrams",{"title":2900,"icon":2865,"path":2901,"stem":2902,"children":2903,"page":59},"MS SQL Server Start","\u002Fdatabases\u002Fms-sql-server-start","06.databases\u002F02.ms-sql-server-start",[2904,2908,2914,2918],{"title":2905,"path":2906,"stem":2907},"Типи даних у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fdata-types","06.databases\u002F02.ms-sql-server-start\u002F01.data-types",{"title":2909,"path":2910,"stem":2911,"children":2912},"Індекси у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-indexes","06.databases\u002F02.ms-sql-server-start\u002F02.sql-indexes",[2913],{"title":2909,"path":2910,"stem":2911},{"title":2915,"path":2916,"stem":2917},"Системні бази даних MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsystem-databases","06.databases\u002F02.ms-sql-server-start\u002F03.system-databases",{"title":2919,"path":2920,"stem":2921},"Огляд мови SQL та запитів","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-queries-overview","06.databases\u002F02.ms-sql-server-start\u002F04.sql-queries-overview",{"title":2923,"icon":2865,"path":2924,"stem":2925,"children":2926,"page":59},"SQL","\u002Fdatabases\u002Fsql","06.databases\u002F03.sql",[2927,2931,2935,2939,2943,2947,2951,2955],{"title":2928,"path":2929,"stem":2930},"Налаштування демонстраційної бази даних","\u002Fdatabases\u002Fsql\u002Fsample-database-setup","06.databases\u002F03.sql\u002F00.sample-database-setup",{"title":2932,"path":2933,"stem":2934},"DDL - Створення таблиць (CREATE TABLE)","\u002Fdatabases\u002Fsql\u002Fddl-create-table","06.databases\u002F03.sql\u002F01.ddl-create-table",{"title":2936,"path":2937,"stem":2938},"DDL - Зміна та видалення таблиць (ALTER, DROP)","\u002Fdatabases\u002Fsql\u002Fddl-alter-drop-table","06.databases\u002F03.sql\u002F02.ddl-alter-drop-table",{"title":2940,"path":2941,"stem":2942},"SELECT запити - Основи","\u002Fdatabases\u002Fsql\u002Fselect-queries-fundamentals","06.databases\u002F03.sql\u002F03.select-queries-fundamentals",{"title":2944,"path":2945,"stem":2946},"SELECT запити - Розширені можливості","\u002Fdatabases\u002Fsql\u002Fselect-queries-advanced","06.databases\u002F03.sql\u002F04.select-queries-advanced",{"title":2948,"path":2949,"stem":2950},"INSERT запити - Додавання даних","\u002Fdatabases\u002Fsql\u002Finsert-queries","06.databases\u002F03.sql\u002F05.insert-queries",{"title":2952,"path":2953,"stem":2954},"UPDATE та DELETE запити","\u002Fdatabases\u002Fsql\u002Fupdate-delete-queries","06.databases\u002F03.sql\u002F06.update-delete-queries",{"title":2956,"path":2957,"stem":2958},"Транзакції в SQL","\u002Fdatabases\u002Fsql\u002Ftransactions","06.databases\u002F03.sql\u002F07.transactions",{"title":2960,"icon":2865,"path":2961,"stem":2962,"children":2963,"page":59},"Multi Table Databases","\u002Fdatabases\u002Fmulti-table-databases","06.databases\u002F04.multi-table-databases",[2964,2968,2972,2976,2980,2984],{"title":2965,"path":2966,"stem":2967},"Зв'язки та нормалізація БД","\u002Fdatabases\u002Fmulti-table-databases\u002Frelationships-and-normalization","06.databases\u002F04.multi-table-databases\u002F00.relationships-and-normalization",{"title":2969,"path":2970,"stem":2971},"INNER JOIN - З'єднання таблиць","\u002Fdatabases\u002Fmulti-table-databases\u002Finner-join","06.databases\u002F04.multi-table-databases\u002F01.inner-join",{"title":2973,"path":2974,"stem":2975},"OUTER JOINs - LEFT, RIGHT, FULL","\u002Fdatabases\u002Fmulti-table-databases\u002Fouter-joins","06.databases\u002F04.multi-table-databases\u002F02.outer-joins",{"title":2977,"path":2978,"stem":2979},"CROSS та SELF JOINs","\u002Fdatabases\u002Fmulti-table-databases\u002Fcross-self-joins","06.databases\u002F04.multi-table-databases\u002F03.cross-self-joins",{"title":2981,"path":2982,"stem":2983},"Підзапити (Subqueries)","\u002Fdatabases\u002Fmulti-table-databases\u002Fsubqueries","06.databases\u002F04.multi-table-databases\u002F04.subqueries",{"title":2985,"path":2986,"stem":2987},"Агрегації з JOIN","\u002Fdatabases\u002Fmulti-table-databases\u002Faggregations-with-joins","06.databases\u002F04.multi-table-databases\u002F05.aggregations-with-joins",{"title":2989,"icon":2990,"path":2991,"stem":2992,"children":2993,"page":59},"Aggregate Functions","i-lucide-calculator","\u002Fdatabases\u002Faggregate-functions","06.databases\u002F05.aggregate-functions",[2994,2998,3002],{"title":2995,"path":2996,"stem":2997},"Функції агрегування в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fintroduction-aggregate-functions","06.databases\u002F05.aggregate-functions\u002F01.introduction-aggregate-functions",{"title":2999,"path":3000,"stem":3001},"Групування даних в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fgrouping-data","06.databases\u002F05.aggregate-functions\u002F02.grouping-data",{"title":3003,"path":3004,"stem":3005},"Підзапити з агрегатними функціями","\u002Fdatabases\u002Faggregate-functions\u002Fsubqueries-aggregates","06.databases\u002F05.aggregate-functions\u002F03.subqueries-aggregates",{"title":3007,"icon":3008,"path":3009,"stem":3010,"children":3011,"page":59},"Тригери та зберігаємі процедури","i-lucide-database-zap","\u002Fdatabases\u002Ftriggers-stored-procedures","06.databases\u002F07.triggers-stored-procedures",[3012,3016,3020,3024,3028,3032,3036],{"title":3013,"path":3014,"stem":3015},"DML-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fdml-triggers","06.databases\u002F07.triggers-stored-procedures\u002F01.dml-triggers",{"title":3017,"path":3018,"stem":3019},"DDL-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fddl-triggers","06.databases\u002F07.triggers-stored-procedures\u002F02.ddl-triggers",{"title":3021,"path":3022,"stem":3023},"Transact-SQL розширення","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransact-sql-extensions","06.databases\u002F07.triggers-stored-procedures\u002F03.transact-sql-extensions",{"title":3025,"path":3026,"stem":3027},"Транзакції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransactions","06.databases\u002F07.triggers-stored-procedures\u002F04.transactions",{"title":3029,"path":3030,"stem":3031},"Зберігаємі процедури","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fstored-procedures","06.databases\u002F07.triggers-stored-procedures\u002F05.stored-procedures",{"title":3033,"path":3034,"stem":3035},"Користувацькі функції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fuser-defined-functions","06.databases\u002F07.triggers-stored-procedures\u002F06.user-defined-functions",{"title":3037,"path":3038,"stem":3039},"Безпека баз даних","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fsecurity","06.databases\u002F07.triggers-stored-procedures\u002F08.security",{"title":3037,"icon":793,"path":3041,"stem":3042,"children":3043,"page":59},"\u002Fdatabases\u002Fsecurity","06.databases\u002F08.security",[3044,3048],{"title":3045,"path":3046,"stem":3047},"Вступ до безпеки баз даних","\u002Fdatabases\u002Fsecurity\u002Fintroduction","06.databases\u002F08.security\u002F01.introduction",{"title":3049,"path":3050,"stem":3051},"Системні представлення та метадані","\u002Fdatabases\u002Fsecurity\u002Fsystem-views","06.databases\u002F08.security\u002F02.system-views",{"title":3053,"icon":3054,"path":3055,"stem":3056,"children":3057,"page":59},"Резервне копіювання та відновлення","i-lucide-database-backup","\u002Fdatabases\u002Fbackup-recovery","06.databases\u002F09.backup-recovery",[3058],{"title":3053,"path":3059,"stem":3060},"\u002Fdatabases\u002Fbackup-recovery\u002Fbackup-restore","06.databases\u002F09.backup-recovery\u002F01.backup-restore",{"title":3062,"icon":3063,"path":3064,"stem":3065,"children":3066,"page":59},"Повнотекстовий пошук","i-lucide-search","\u002Fdatabases\u002Ffull-text-search","06.databases\u002F10.full-text-search",[3067],{"title":3062,"path":3068,"stem":3069},"\u002Fdatabases\u002Ffull-text-search\u002Ffull-text-search","06.databases\u002F10.full-text-search\u002F01.full-text-search",{"title":3071,"icon":3072,"path":3073,"stem":3074,"children":3075,"page":59},"Tools","i-lucide-wrench","\u002Ftools","07.tools",[3076,3152],{"title":3077,"icon":3078,"path":3079,"stem":3080,"children":3081},"Docker","i-simple-icons-docker","\u002Ftools\u002Fdocker","07.tools\u002F01.docker\u002Findex",[3082,3084,3088,3092,3096,3100,3104,3108,3112,3116,3120,3124,3128,3132,3136,3140,3144,3148],{"title":3083,"path":3079,"stem":3080},"Docker: від нуля до production",{"title":3085,"path":3086,"stem":3087},"Контейнеризація — від проблеми до рішення","\u002Ftools\u002Fdocker\u002Fcontainerization-concept","07.tools\u002F01.docker\u002F01.containerization-concept",{"title":3089,"path":3090,"stem":3091},"Docker — що це і навіщо?","\u002Ftools\u002Fdocker\u002Fdocker-what-and-why","07.tools\u002F01.docker\u002F02.docker-what-and-why",{"title":3093,"path":3094,"stem":3095},"Архітектура Docker Engine","\u002Ftools\u002Fdocker\u002Fdocker-architecture","07.tools\u002F01.docker\u002F03.docker-architecture",{"title":3097,"path":3098,"stem":3099},"Встановлення Docker","\u002Ftools\u002Fdocker\u002Finstallation","07.tools\u002F01.docker\u002F04.installation",{"title":3101,"path":3102,"stem":3103},"Перший контейнер — docker run","\u002Ftools\u002Fdocker\u002Ffirst-container","07.tools\u002F01.docker\u002F05.first-container",{"title":3105,"path":3106,"stem":3107},"Життєвий цикл контейнера","\u002Ftools\u002Fdocker\u002Fcontainer-lifecycle","07.tools\u002F01.docker\u002F06.container-lifecycle",{"title":3109,"path":3110,"stem":3111},"Docker Images — фундаментальні концепції","\u002Ftools\u002Fdocker\u002Fdocker-images-fundamentals","07.tools\u002F01.docker\u002F07.docker-images-fundamentals",{"title":3113,"path":3114,"stem":3115},"Dockerfile — основи","\u002Ftools\u002Fdocker\u002Fdockerfile-basics","07.tools\u002F01.docker\u002F08.dockerfile-basics",{"title":3117,"path":3118,"stem":3119},"Dockerfile — просунуті техніки","\u002Ftools\u002Fdocker\u002Fdockerfile-advanced","07.tools\u002F01.docker\u002F09.dockerfile-advanced",{"title":3121,"path":3122,"stem":3123},"Build Context та кешування шарів","\u002Ftools\u002Fdocker\u002Fbuild-context-and-cache","07.tools\u002F01.docker\u002F10.build-context-and-cache",{"title":3125,"path":3126,"stem":3127},"Реєстри Docker-образів","\u002Ftools\u002Fdocker\u002Fimage-registries","07.tools\u002F01.docker\u002F11.image-registries",{"title":3129,"path":3130,"stem":3131},"Контейнеризація .NET додатків","\u002Ftools\u002Fdocker\u002Fdotnet-containerization","07.tools\u002F01.docker\u002F12.dotnet-containerization",{"title":3133,"path":3134,"stem":3135},"Томи та збереження даних","\u002Ftools\u002Fdocker\u002Fvolumes-and-data","07.tools\u002F01.docker\u002F13.volumes-and-data",{"title":3137,"path":3138,"stem":3139},"Основи мережі в Docker","\u002Ftools\u002Fdocker\u002Fnetworking-basics","07.tools\u002F01.docker\u002F14.networking-basics",{"title":3141,"path":3142,"stem":3143},"Змінні оточення та конфігурація","\u002Ftools\u002Fdocker\u002Fenvironment-and-configuration","07.tools\u002F01.docker\u002F15.environment-and-configuration",{"title":3145,"path":3146,"stem":3147},"Docker Compose — оркестрація контейнерів","\u002Ftools\u002Fdocker\u002Fdocker-compose-basics","07.tools\u002F01.docker\u002F16.docker-compose-basics",{"title":3149,"path":3150,"stem":3151},"Docker Compose — Multi-Service застосунки","\u002Ftools\u002Fdocker\u002Fcompose-multi-service","07.tools\u002F01.docker\u002F17.compose-multi-service",{"title":3153,"icon":3154,"path":3155,"stem":3156,"children":3157},"Kubernetes","simple-icons:kubernetes","\u002Ftools\u002Fkubernetes","07.tools\u002F02.kubernetes\u002Findex",[3158,3160,3164,3168,3172,3176,3180,3184,3188],{"title":3159,"path":3155,"stem":3156},"Kubernetes: від розробки до production",{"title":3161,"path":3162,"stem":3163},"Kubernetes — коли Docker Compose більше не вистачає","\u002Ftools\u002Fkubernetes\u002Fwhy-kubernetes","07.tools\u002F02.kubernetes\u002F01.why-kubernetes",{"title":3165,"path":3166,"stem":3167},"Архітектура Kubernetes — анатомія кластера","\u002Ftools\u002Fkubernetes\u002Fkubernetes-architecture","07.tools\u002F02.kubernetes\u002F02.kubernetes-architecture",{"title":3169,"path":3170,"stem":3171},"Локальне середовище — minikube, kind та k3s","\u002Ftools\u002Fkubernetes\u002Flocal-environment","07.tools\u002F02.kubernetes\u002F03.local-environment",{"title":3173,"path":3174,"stem":3175},"Pod — атомарна одиниця Kubernetes","\u002Ftools\u002Fkubernetes\u002Fpods-and-containers","07.tools\u002F02.kubernetes\u002F04.pods-and-containers",{"title":3177,"path":3178,"stem":3179},"Патерни використання Pod","\u002Ftools\u002Fkubernetes\u002Fpod-patterns","07.tools\u002F02.kubernetes\u002F05.pod-patterns",{"title":3181,"path":3182,"stem":3183},"Deployment — декларативне управління Pod","\u002Ftools\u002Fkubernetes\u002Fdeployment-basics","07.tools\u002F02.kubernetes\u002F06.deployment-basics",{"title":3185,"path":3186,"stem":3187},"Rolling Updates та управління життєвим циклом Deployment","\u002Ftools\u002Fkubernetes\u002Fdeployment-rolling-updates","07.tools\u002F02.kubernetes\u002F07.deployment-rolling-updates",{"title":3189,"path":3190,"stem":3191},"Service — мережева абстракція для Pod","\u002Ftools\u002Fkubernetes\u002Fservices-networking","07.tools\u002F02.kubernetes\u002F08.services-networking",{"title":3193,"icon":3194,"path":3195,"stem":3196,"children":3197,"page":59},"Software Engineering","i-lucide-code-2","\u002Fsoftware-engineering","09.software-engineering",[3198,3202,3206,3210,3214,3218,3222,3226,3230,3234,3238],{"title":3199,"path":3200,"stem":3201},"1. Аналіз предметної області. Експертні знання та складність","\u002Fsoftware-engineering\u002Fintro-subdomains","09.software-engineering\u002F01.intro-subdomains",{"title":3203,"path":3204,"stem":3205},"2. Обмежені контексти. Інтеграція обмежених контекстів","\u002Fsoftware-engineering\u002Fintegrating-limited-contexts","09.software-engineering\u002F02.integrating-limited-contexts",{"title":3207,"path":3208,"stem":3209},"3. Реалізація простої бізнес-логіки","\u002Fsoftware-engineering\u002Fsimple","09.software-engineering\u002F03.simple",{"title":3211,"path":3212,"stem":3213},"4. Опрацювання складної бізнес-логіки","\u002Fsoftware-engineering\u002Fcomplex-business-logic","09.software-engineering\u002F04.complex-business-logic",{"title":3215,"path":3216,"stem":3217},"5. Моделювання фактора часу. Подієво-орієнтована архітектура.","\u002Fsoftware-engineering\u002Fmodelling-the-time-factor","09.software-engineering\u002F05.modelling-the-time-factor",{"title":3219,"path":3220,"stem":3221},"6. Архітектурні патерни","\u002Fsoftware-engineering\u002Farchitectural-patterns","09.software-engineering\u002F06.architectural-patterns",{"title":3223,"path":3224,"stem":3225},"Паттерни взаємодії","\u002Fsoftware-engineering\u002Fpatterns-of-interaction","09.software-engineering\u002F07.patterns-of-interaction",{"title":3227,"path":3228,"stem":3229},"Евристика проєктування","\u002Fsoftware-engineering\u002Fdesign-heuristics","09.software-engineering\u002F08.design-heuristics",{"title":3231,"path":3232,"stem":3233},"Еволюція проєктних рішень","\u002Fsoftware-engineering\u002Fevolution-of-design-solutions","09.software-engineering\u002F09.evolution-of-design-solutions",{"title":3235,"path":3236,"stem":3237},"EventStorming","\u002Fsoftware-engineering\u002Feventstorming","09.software-engineering\u002F10.eventstorming",{"title":3239,"path":3240,"stem":3241},"DDD на практиці","\u002Fsoftware-engineering\u002Fddd-in-practice","09.software-engineering\u002F11.ddd-in-practice",{"title":3243,"icon":943,"path":3244,"stem":3245,"children":3246,"page":59},"DDD","\u002Fddd","10.ddd",[3247,3251,3255,3259,3263,3267,3271,3275,3279,3283,3287,3291,3295],{"title":3248,"path":3249,"stem":3250},"Аналіз предметної області","\u002Fddd\u002Fdomain-analysis","10.ddd\u002F01.domain-analysis",{"title":3252,"path":3253,"stem":3254},"Експертні знання про предметну область","\u002Fddd\u002Fdomain-expert-knowledge","10.ddd\u002F02.domain-expert-knowledge",{"title":3256,"path":3257,"stem":3258},"Як осмислити складність предметної області","\u002Fddd\u002Fmanaging-domain-complexity","10.ddd\u002F03.managing-domain-complexity",{"title":3260,"path":3261,"stem":3262},"Інтеграція обмежених контекстів","\u002Fddd\u002Fbounded-context-integration","10.ddd\u002F04.bounded-context-integration",{"title":3264,"path":3265,"stem":3266},"Реалізація простої бізнес-логіки","\u002Fddd\u002Fsimple-business-logic","10.ddd\u002F05.simple-business-logic",{"title":3268,"path":3269,"stem":3270},"Обробка складної бізнес-логіки","\u002Fddd\u002Fcomplex-business-logic","10.ddd\u002F06.complex-business-logic",{"title":3272,"path":3273,"stem":3274},"Моделювання фактора часу","\u002Fddd\u002Ftime-modeling","10.ddd\u002F07.time-modeling",{"title":3276,"path":3277,"stem":3278},"Глава 8. Архітектурні Патерни","\u002Fddd\u002Farchitectural-patterns","10.ddd\u002F08.architectural-patterns",{"title":3280,"path":3281,"stem":3282},"Глава 9. Патерни Взаємодії","\u002Fddd\u002Finteraction-patterns","10.ddd\u002F09.interaction-patterns",{"title":3284,"path":3285,"stem":3286},"Глава 10. Проектні Евристики","\u002Fddd\u002Fdesign-heuristics","10.ddd\u002F10.design-heuristics",{"title":3288,"path":3289,"stem":3290},"Глава 11. Еволюція Проектних Рішень","\u002Fddd\u002Fevolution-of-design-decisions","10.ddd\u002F11.evolution-of-design-decisions",{"title":3292,"path":3293,"stem":3294},"Глава 12. EventStorming","\u002Fddd\u002Fevent-storming","10.ddd\u002F12.event-storming",{"title":3296,"path":3297,"stem":3298},"Глава 13. DDD на Практиці","\u002Fddd\u002Fddd-in-practice","10.ddd\u002F13.ddd-in-practice",{"title":3300,"icon":3301,"path":3302,"stem":3303,"children":3304,"page":59},"Media Streaming","i-lucide-video","\u002Fmedia-streaming","11.media-streaming",[3305,3309,3313,3317,3321,3325,3329],{"title":3306,"path":3307,"stem":3308},"01. Магія Стрімінгу: Що відбувається, коли ви натискаєте \"Play\"","\u002Fmedia-streaming\u002Fintroduction","11.media-streaming\u002F01.introduction",{"title":3310,"path":3311,"stem":3312},"02. Анатомія Медіа: Кодеки, Контейнери та Стиснення","\u002Fmedia-streaming\u002Faudio-video-anatomy","11.media-streaming\u002F02.audio-video-anatomy",{"title":3314,"path":3315,"stem":3316},"03. The Gym: FFmpeg Deep Dive","\u002Fmedia-streaming\u002Fffmpeg-gym","11.media-streaming\u002F03.ffmpeg-gym",{"title":3318,"path":3319,"stem":3320},"04. HLS Protocol: HTTP Live Streaming у Деталях","\u002Fmedia-streaming\u002Fhls-protocol","11.media-streaming\u002F04.hls-protocol",{"title":3322,"path":3323,"stem":3324},"05. DASH Protocol: Відкритий Стандарт","\u002Fmedia-streaming\u002Fdash-protocol","11.media-streaming\u002F05.dash-protocol",{"title":3326,"path":3327,"stem":3328},"06. Масштабування: CDN та Adaptive Bitrate","\u002Fmedia-streaming\u002Fcdn-and-adaptive-bitrate","11.media-streaming\u002F06.cdn-and-adaptive-bitrate",{"title":3330,"path":3331,"stem":3332},"07. Війна із Затримкою (Latency)","\u002Fmedia-streaming\u002Frealtime-latency","11.media-streaming\u002F07.realtime-latency",{"title":3334,"icon":3335,"path":3336,"stem":3337,"children":3338,"page":59},"HTML & CSS","i-devicon-html5","\u002Fhtml-css","12.html-css",[3339,3343,3347,3351,3355,3359,3363,3367,3371,3375,3379,3383,3387,3391,3395,3399,3403,3407,3411,3415,3419,3423,3427,3431,3435,3439,3443,3447,3451,3455],{"title":3340,"path":3341,"stem":3342},"Вступ до HTML. Структура документа","\u002Fhtml-css\u002Fintro-html-structure","12.html-css\u002F01.intro-html-structure",{"title":3344,"path":3345,"stem":3346},"Форматування тексту в HTML","\u002Fhtml-css\u002Fhtml-text-formatting","12.html-css\u002F02.html-text-formatting",{"title":3348,"path":3349,"stem":3350},"Посилання та зображення в HTML","\u002Fhtml-css\u002Fhtml-links-images","12.html-css\u002F03.html-links-images",{"title":3352,"path":3353,"stem":3354},"Списки та таблиці в HTML","\u002Fhtml-css\u002Fhtml-lists-tables","12.html-css\u002F04.html-lists-tables",{"title":3356,"path":3357,"stem":3358},"Форми в HTML","\u002Fhtml-css\u002Fhtml-forms","12.html-css\u002F05.html-forms",{"title":3360,"path":3361,"stem":3362},"Семантичні елементи HTML5","\u002Fhtml-css\u002Fhtml-semantic-elements","12.html-css\u002F06.html-semantic-elements",{"title":3364,"path":3365,"stem":3366},"Мультимедіа та розширені елементи HTML","\u002Fhtml-css\u002Fhtml-multimedia-advanced","12.html-css\u002F07.html-multimedia-advanced",{"title":3368,"path":3369,"stem":3370},"Мікророзмітка та SEO в HTML","\u002Fhtml-css\u002Fhtml-microdata-seo","12.html-css\u002F08.html-microdata-seo",{"title":3372,"path":3373,"stem":3374},"Вступ до CSS. Селектори та специфічність","\u002Fhtml-css\u002Fcss-intro-selectors","12.html-css\u002F09.css-intro-selectors",{"title":3376,"path":3377,"stem":3378},"Блокова модель CSS. Відступи. Box Sizing","\u002Fhtml-css\u002Fcss-box-model","12.html-css\u002F10.css-box-model",{"title":3380,"path":3381,"stem":3382},"Розміри у CSS: повний довідник одиниць і ключових слів","\u002Fhtml-css\u002F10a.css-sizing","12.html-css\u002F10a.css-sizing",{"title":3384,"path":3385,"stem":3386},"Типографіка в CSS. Шрифти та текст","\u002Fhtml-css\u002Fcss-typography","12.html-css\u002F11.css-typography",{"title":3388,"path":3389,"stem":3390},"Кольори та фони в CSS","\u002Fhtml-css\u002Fcss-colors-backgrounds","12.html-css\u002F12.css-colors-backgrounds",{"title":3392,"path":3393,"stem":3394},"Тіні та фільтри в CSS","\u002Fhtml-css\u002F12b.css-shadows-filters","12.html-css\u002F12b.css-shadows-filters",{"title":3396,"path":3397,"stem":3398},"CSS Flexbox: Фундамент гнучких макетів","\u002Fhtml-css\u002Fcss-flexbox-fundamentals","12.html-css\u002F13.css-flexbox-fundamentals",{"title":3400,"path":3401,"stem":3402},"CSS Flexbox: Вирівнювання та Позиціонування","\u002Fhtml-css\u002Fcss-flexbox-alignment-sizing-and-patterns","12.html-css\u002F14.css-flexbox-alignment-sizing-and-patterns",{"title":3404,"path":3405,"stem":3406},"CSS Grid. Двовимірний макет. Частина 1","\u002Fhtml-css\u002Fcss-layout-grid","12.html-css\u002F15.css-layout-grid",{"title":3408,"path":3409,"stem":3410},"CSS Grid. Двовимірний макет. Частина 2","\u002Fhtml-css\u002Fcss-layout-grid-advanced","12.html-css\u002F16.css-layout-grid-advanced",{"title":3412,"path":3413,"stem":3414},"Позиціонування в CSS. Z-index. Stacking Context","\u002Fhtml-css\u002Fcss-positioning","12.html-css\u002F17.css-positioning",{"title":3416,"path":3417,"stem":3418},"CSS Анімації та Переходи","\u002Fhtml-css\u002Fcss-animations-transitions","12.html-css\u002F18.css-animations-transitions",{"title":3420,"path":3421,"stem":3422},"Адаптивний дизайн. Media Queries. Частина 1","\u002Fhtml-css\u002Fcss-responsive-media-queries","12.html-css\u002F19.css-responsive-media-queries",{"title":3424,"path":3425,"stem":3426},"Адаптивний дизайн. Частина 2: clamp(), Container Queries, @layer","\u002Fhtml-css\u002Fcss-responsive-advanced","12.html-css\u002F20.css-responsive-advanced",{"title":3428,"path":3429,"stem":3430},"CSS Custom Properties. Методології. Сучасний CSS","\u002Fhtml-css\u002Fcss-variables-methodologies","12.html-css\u002F21.css-variables-methodologies",{"title":3432,"path":3433,"stem":3434},"Сучасний CSS 2023–2025: Нові можливості","\u002Fhtml-css\u002Fcss-modern-features","12.html-css\u002F22.css-modern-features",{"title":3436,"path":3437,"stem":3438},"CSS Nesting, @layer, @scope та @property: нативний препроцесор","\u002Fhtml-css\u002F22a.css-nesting-modern-syntax","12.html-css\u002F22a.css-nesting-modern-syntax",{"title":3440,"path":3441,"stem":3442},"CSS для форм та інтерактивних станів","\u002Fhtml-css\u002Fcss-forms-interactive-states","12.html-css\u002F23.css-forms-interactive-states",{"title":3444,"path":3445,"stem":3446},"Доступність у CSS (CSS Accessibility)","\u002Fhtml-css\u002Fcss-accessibility","12.html-css\u002F24.css-accessibility",{"title":3448,"path":3449,"stem":3450},"CSS-функції та сучасні sizing primitives","\u002Fhtml-css\u002Fcss-functions-sizing","12.html-css\u002F25.css-functions-sizing",{"title":3452,"path":3453,"stem":3454},"Rendering Pipeline і CSS Performance","\u002Fhtml-css\u002Fcss-rendering-performance","12.html-css\u002F26.css-rendering-performance",{"title":3456,"path":3457,"stem":3458},"CSS Best Practices: типові ситуації та правильні рішення","\u002Fhtml-css\u002Fcss-best-practices","12.html-css\u002F27.css-best-practices",{"title":3460,"path":3461,"stem":3462,"children":3463,"page":59},"AWS","\u002Faws","13.aws",[3464,3468,3472,3476,3480,3484,3488,3492,3496,3500,3504,3508,3512,3516,3520,3524,3528,3532],{"title":3465,"path":3466,"stem":3467},"Реєстрація AWS акаунту та студентські програми","\u002Faws\u002Faccount-registration","13.aws\u002F00.account-registration",{"title":3469,"path":3470,"stem":3471},"Вступ до хмарних обчислень та AWS","\u002Faws\u002Fintroduction-to-cloud","13.aws\u002F01.introduction-to-cloud",{"title":3473,"path":3474,"stem":3475},"AWS IAM — Identity and Access Management","\u002Faws\u002Fiam","13.aws\u002F02.iam",{"title":3477,"path":3478,"stem":3479},"AWS IAM CLI — Довідник команд","\u002Faws\u002F02a.iam-doc","13.aws\u002F02a.iam-doc",{"title":3481,"path":3482,"stem":3483},"Docker та контейнеризація в AWS — ECR, ECS та Fargate","\u002Faws\u002Fdocker-ecs","13.aws\u002F03.docker-ecs",{"title":3485,"path":3486,"stem":3487},"AWS ECR \u002F ECS CLI — Довідник команд","\u002Faws\u002F03a.docker-ecs-doc","13.aws\u002F03a.docker-ecs-doc",{"title":3489,"path":3490,"stem":3491},"Amazon EC2 — Elastic Compute Cloud","\u002Faws\u002Fec2","13.aws\u002F04.ec2",{"title":3493,"path":3494,"stem":3495},"AWS EC2 CLI — Довідник команд","\u002Faws\u002F04a.ec2-doc","13.aws\u002F04a.ec2-doc",{"title":3497,"path":3498,"stem":3499},"Elastic Load Balancing та Auto Scaling","\u002Faws\u002Falb-asg","13.aws\u002F05.alb-asg",{"title":3501,"path":3502,"stem":3503},"Amazon S3 — Simple Storage Service","\u002Faws\u002Fs3","13.aws\u002F06.s3",{"title":3505,"path":3506,"stem":3507},"Amazon CloudFront — Content Delivery Network","\u002Faws\u002Fcloudfront","13.aws\u002F07.cloudfront",{"title":3509,"path":3510,"stem":3511},"Amazon RDS — Relational Database Service","\u002Faws\u002Frds","13.aws\u002F08.rds",{"title":3513,"path":3514,"stem":3515},"Amazon DynamoDB — NoSQL Database","\u002Faws\u002Fdynamodb","13.aws\u002F09.dynamodb",{"title":3517,"path":3518,"stem":3519},"AWS Lambda та Serverless Compute","\u002Faws\u002Flambda","13.aws\u002F10.lambda",{"title":3521,"path":3522,"stem":3523},"Amazon Bedrock - Foundation Models, RAG та Agents","\u002Faws\u002Fbedrock","13.aws\u002F22.bedrock",{"title":3525,"path":3526,"stem":3527},"Amazon Rekognition - Комп'ютерний зір","\u002Faws\u002Frekognition","13.aws\u002F23.rekognition",{"title":3529,"path":3530,"stem":3531},"Amazon Textract - Інтелектуальний аналіз документів","\u002Faws\u002Ftextract","13.aws\u002F24.textract",{"title":3533,"path":3534,"stem":3535},"Amazon Polly, Transcribe, Comprehend та Translate","\u002Faws\u002Faudio-nlp-services","13.aws\u002F25.audio-nlp-services",{"title":3537,"path":3538,"stem":3539,"children":3540,"page":59},"Ai Development","\u002Fai-development","14.ai-development",[3541],{"title":3542,"path":3543,"stem":3544,"children":3545,"page":59},"Foundations","\u002Fai-development\u002Ffoundations","14.ai-development\u002F00.foundations",[3546],{"title":3547,"path":3548,"stem":3549},"Модуль 0.1. Що таке Large Language Model (LLM)","\u002Fai-development\u002Ffoundations\u002Fwhat-is-llm","14.ai-development\u002F00.foundations\u002F01.what-is-llm",{"title":3551,"path":3552,"stem":3553,"children":3554,"page":59},"React Native","\u002Freact-native","15.react-native",[3555,3576],{"title":3556,"path":3557,"stem":3558,"children":3559,"page":59},"Version1","\u002Freact-native\u002Fversion1","15.react-native\u002Fversion1",[3560,3564,3568,3572],{"title":3561,"path":3562,"stem":3563},"Що таке React Native","\u002Freact-native\u002Fversion1\u002Fwhat-is-react-native","15.react-native\u002Fversion1\u002F01.what-is-react-native",{"title":3565,"path":3566,"stem":3567},"Як влаштований React Native «під капотом»","\u002Freact-native\u002Fversion1\u002Freact-native-architecture","15.react-native\u002Fversion1\u002F02.react-native-architecture",{"title":3569,"path":3570,"stem":3571},"Від React до React Native: ключові відмінності","\u002Freact-native\u002Fversion1\u002Freact-native-vs-react","15.react-native\u002Fversion1\u002F03.react-native-vs-react",{"title":3573,"path":3574,"stem":3575},"View та Text — фундаментальні будівельні блоки","\u002Freact-native\u002Fversion1\u002Fview-and-text","15.react-native\u002Fversion1\u002F04.view-and-text",{"title":3577,"path":3578,"stem":3579,"children":3580,"page":59},"Version2","\u002Freact-native\u002Fversion2","15.react-native\u002Fversion2",[3581,3585,3589,3593,3597,3601,3605,3609,3613,3617,3621,3625,3629,3633,3637,3641,3645,3649,3653,3657,3661,3665,3669,3673,3677,3681,3685],{"title":3582,"path":3583,"stem":3584},"React Native — навіщо він потрібен","\u002Freact-native\u002Fversion2\u002Fwhy-react-native","15.react-native\u002Fversion2\u002F01.why-react-native",{"title":3586,"path":3587,"stem":3588},"Налаштування середовища розробки","\u002Freact-native\u002Fversion2\u002Fenvironment-setup","15.react-native\u002Fversion2\u002F02.environment-setup",{"title":3590,"path":3591,"stem":3592},"Expo і класичний React Native — два шляхи одного фреймворку","\u002Freact-native\u002Fversion2\u002Fexpo-vs-cli-landscape","15.react-native\u002Fversion2\u002F03.expo-vs-cli-landscape",{"title":3594,"path":3595,"stem":3596},"Середовище Expo — перший запуск","\u002Freact-native\u002Fversion2\u002Fexpo-setup-and-tooling","15.react-native\u002Fversion2\u002F04.expo-setup-and-tooling",{"title":3598,"path":3599,"stem":3600},"Структура проєкту та перші UI-примітиви","\u002Freact-native\u002Fversion2\u002Fproject-structure-and-conventions","15.react-native\u002Fversion2\u002F05.project-structure-and-conventions",{"title":3602,"path":3603,"stem":3604},"Базові компоненти React Native","\u002Freact-native\u002Fversion2\u002Fcore-components","15.react-native\u002Fversion2\u002F06.core-components",{"title":3606,"path":3607,"stem":3608},"Flexbox і layout у React Native","\u002Freact-native\u002Fversion2\u002Fflexbox-and-layout","15.react-native\u002Fversion2\u002F07.flexbox-and-layout",{"title":3610,"path":3611,"stem":3612},"StyleSheet і теми (light \u002F dark)","\u002Freact-native\u002Fversion2\u002Fstylesheet-and-theming","15.react-native\u002Fversion2\u002F08.stylesheet-and-theming",{"title":3614,"path":3615,"stem":3616},"Списки та віртуалізація","\u002Freact-native\u002Fversion2\u002Flists-and-virtualization","15.react-native\u002Fversion2\u002F09.lists-and-virtualization",{"title":3618,"path":3619,"stem":3620},"Форми, ввід і валідація","\u002Freact-native\u002Fversion2\u002Fforms-input-validation","15.react-native\u002Fversion2\u002F10.forms-input-validation",{"title":3622,"path":3623,"stem":3624},"Основи Expo Router","\u002Freact-native\u002Fversion2\u002Fexpo-router-basics","15.react-native\u002Fversion2\u002F11.expo-router-basics",{"title":3626,"path":3627,"stem":3628},"Вкладені навігатори та модалки","\u002Freact-native\u002Fversion2\u002Fnested-navigators-and-modals","15.react-native\u002Fversion2\u002F12.nested-navigators-and-modals",{"title":3630,"path":3631,"stem":3632},"Deep linking і параметри маршрутів","\u002Freact-native\u002Fversion2\u002Fdeep-linking-and-params","15.react-native\u002Fversion2\u002F13.deep-linking-and-params",{"title":3634,"path":3635,"stem":3636},"Робота з мережею та життєвий цикл застосунку","\u002Freact-native\u002Fversion2\u002Fnetworking-and-app-lifecycle","15.react-native\u002Fversion2\u002F14.networking-and-app-lifecycle",{"title":3638,"path":3639,"stem":3640},"Redux Toolkit на мобільних платформах","\u002Freact-native\u002Fversion2\u002Fredux-toolkit-on-mobile","15.react-native\u002Fversion2\u002F15.redux-toolkit-on-mobile",{"title":3642,"path":3643,"stem":3644},"RTK Query на мобільних платформах","\u002Freact-native\u002Fversion2\u002Frtk-query-mobile","15.react-native\u002Fversion2\u002F16.rtk-query-mobile",{"title":3646,"path":3647,"stem":3648},"Автентифікація та Безпечне Зберігання","\u002Freact-native\u002Fversion2\u002Fauth-secure-storage","15.react-native\u002Fversion2\u002F18.auth-secure-storage",{"title":3650,"path":3651,"stem":3652},"Локальне сховище — AsyncStorage, MMKV, SQLite","\u002Freact-native\u002Fversion2\u002Flocal-storage-mmkv-sqlite","15.react-native\u002Fversion2\u002F19.local-storage-mmkv-sqlite",{"title":3654,"path":3655,"stem":3656},"Офлайн-First і синхронізація","\u002Freact-native\u002Fversion2\u002Foffline-first-sync","15.react-native\u002Fversion2\u002F20.offline-first-sync",{"title":3658,"path":3659,"stem":3660},"Камера, медіа та файлова система","\u002Freact-native\u002Fversion2\u002Fcamera-media-filesystem","15.react-native\u002Fversion2\u002F21.camera-media-filesystem",{"title":3662,"path":3663,"stem":3664},"Карти та геолокація","\u002Freact-native\u002Fversion2\u002Fmaps-and-location","15.react-native\u002Fversion2\u002F22.maps-and-location",{"title":3666,"path":3667,"stem":3668},"Жести та дотики","\u002Freact-native\u002Fversion2\u002Fgestures-and-touch","15.react-native\u002Fversion2\u002F23.gestures-and-touch",{"title":3670,"path":3671,"stem":3672},"Анімації з Reanimated","\u002Freact-native\u002Fversion2\u002Freanimated-animations","15.react-native\u002Fversion2\u002F24.reanimated-animations",{"title":3674,"path":3675,"stem":3676},"Push і локальні сповіщення","\u002Freact-native\u002Fversion2\u002Fpush-and-local-notifications","15.react-native\u002Fversion2\u002F25.push-and-local-notifications",{"title":3678,"path":3679,"stem":3680},"Інтернаціоналізація та доступність","\u002Freact-native\u002Fversion2\u002Faccessibility-and-i18n","15.react-native\u002Fversion2\u002F26.accessibility-and-i18n",{"title":3682,"path":3683,"stem":3684},"EAS Build та профілі збірки","\u002Freact-native\u002Fversion2\u002Feas-build-and-profiles","15.react-native\u002Fversion2\u002F29.eas-build-and-profiles",{"title":3686,"path":3687,"stem":3688},"Публікація в App Store та Google Play","\u002Freact-native\u002Fversion2\u002Fapp-store-play-release","15.react-native\u002Fversion2\u002F30.app-store-play-release",{"title":3690,"path":3691,"stem":3692,"children":3693,"page":59},"Ai Python","\u002Fai-python","16.ai-python",[3694,3703,3712,3721,3750,3776,3801,3834,3851,3864,3873,3886,3895,3916,3929,3950],{"title":3695,"path":3696,"stem":3697,"children":3698,"page":59},"Intro To Ai","\u002Fai-python\u002Fintro-to-ai","16.ai-python\u002F01.intro-to-ai",[3699],{"title":3700,"path":3701,"stem":3702},"Вступ до штучного інтелекту та машинного навчання","\u002Fai-python\u002Fintro-to-ai\u002Fintro-to-ai","16.ai-python\u002F01.intro-to-ai\u002F01.intro-to-ai",{"title":3704,"path":3705,"stem":3706,"children":3707,"page":59},"Jupyter Notebook","\u002Fai-python\u002Fjupyter-notebook","16.ai-python\u002F02.jupyter-notebook",[3708],{"title":3709,"path":3710,"stem":3711},"Знайомство з Jupyter Notebook та JupyterLab","\u002Fai-python\u002Fjupyter-notebook\u002Fjupyter-notebook","16.ai-python\u002F02.jupyter-notebook\u002F02.jupyter-notebook",{"title":3713,"path":3714,"stem":3715,"children":3716,"page":59},"Numpy Pandas","\u002Fai-python\u002Fnumpy-pandas","16.ai-python\u002F03.numpy-pandas",[3717],{"title":3718,"path":3719,"stem":3720},"Робота з даними з використанням NumPy і pandas","\u002Fai-python\u002Fnumpy-pandas\u002Fnumpy-pandas","16.ai-python\u002F03.numpy-pandas\u002F03.numpy-pandas",{"title":3722,"path":3723,"stem":3724,"children":3725,"page":59},"Statistics Basics","\u002Fai-python\u002Fstatistics-basics","16.ai-python\u002F04.statistics-basics",[3726,3730,3734,3738,3742,3746],{"title":3727,"path":3728,"stem":3729},"Випадкові величини та їх типи","\u002Fai-python\u002Fstatistics-basics\u002Frandom-variables","16.ai-python\u002F04.statistics-basics\u002F01.random-variables",{"title":3731,"path":3732,"stem":3733},"Міри центральної тенденції","\u002Fai-python\u002Fstatistics-basics\u002Fcentral-tendency","16.ai-python\u002F04.statistics-basics\u002F02.central-tendency",{"title":3735,"path":3736,"stem":3737},"Міри варіації (розсіювання)","\u002Fai-python\u002Fstatistics-basics\u002Fvariability","16.ai-python\u002F04.statistics-basics\u002F03.variability",{"title":3739,"path":3740,"stem":3741},"Розподіли випадкових величин","\u002Fai-python\u002Fstatistics-basics\u002Fdistributions","16.ai-python\u002F04.statistics-basics\u002F04.distributions",{"title":3743,"path":3744,"stem":3745},"Кореляція та взаємозв'язки","\u002Fai-python\u002Fstatistics-basics\u002Fcorrelation","16.ai-python\u002F04.statistics-basics\u002F05.correlation",{"title":3747,"path":3748,"stem":3749},"Викиди та аномалії","\u002Fai-python\u002Fstatistics-basics\u002Foutliers","16.ai-python\u002F04.statistics-basics\u002F06.outliers",{"title":3751,"path":3752,"stem":3753,"children":3754},"Візуалізація даних за допомогою matplotlib","\u002Fai-python\u002Fdata-visualization","16.ai-python\u002F05.data-visualization\u002Findex",[3755,3756,3760,3764,3768,3772],{"title":3751,"path":3752,"stem":3753},{"title":3757,"path":3758,"stem":3759},"Основи matplotlib — Figure, Axes та перший графік","\u002Fai-python\u002Fdata-visualization\u002Fmatplotlib-basics","16.ai-python\u002F05.data-visualization\u002F01.matplotlib-basics",{"title":3761,"path":3762,"stem":3763},"Візуалізація розподілів — гістограми та box plots","\u002Fai-python\u002Fdata-visualization\u002Fdistributions","16.ai-python\u002F05.data-visualization\u002F02.distributions",{"title":3765,"path":3766,"stem":3767},"Візуалізація залежностей — scatter plots та кореляція","\u002Fai-python\u002Fdata-visualization\u002Frelationships","16.ai-python\u002F05.data-visualization\u002F03.relationships",{"title":3769,"path":3770,"stem":3771},"Візуалізація категоріальних даних — bar charts та pie charts","\u002Fai-python\u002Fdata-visualization\u002Fcategorical","16.ai-python\u002F05.data-visualization\u002F04.categorical",{"title":3773,"path":3774,"stem":3775},"Композиції та стилізація — subplots та багатопанельні дашборди","\u002Fai-python\u002Fdata-visualization\u002Fsubplots-styling","16.ai-python\u002F05.data-visualization\u002F05.subplots-styling",{"title":3777,"path":3778,"stem":3779,"children":3780,"page":59},"Linear Regression","\u002Fai-python\u002Flinear-regression","16.ai-python\u002F06.linear-regression",[3781,3785,3789,3793,3797],{"title":3782,"path":3783,"stem":3784},"Регресійна задача та лінійна регресія з однією змінною","\u002Fai-python\u002Flinear-regression\u002Fregression-task","16.ai-python\u002F06.linear-regression\u002F01.regression-task",{"title":3786,"path":3787,"stem":3788},"Метрики якості регресії — як оцінити модель","\u002Fai-python\u002Flinear-regression\u002Fquality-metrics","16.ai-python\u002F06.linear-regression\u002F02.quality-metrics",{"title":3790,"path":3791,"stem":3792},"Градієнтний спуск — як модель навчається","\u002Fai-python\u002Flinear-regression\u002Fgradient-descent","16.ai-python\u002F06.linear-regression\u002F03.gradient-descent",{"title":3794,"path":3795,"stem":3796},"Множинна лінійна регресія — модель з багатьма ознаками","\u002Fai-python\u002Flinear-regression\u002Fmultiple-regression","16.ai-python\u002F06.linear-regression\u002F04.multiple-regression",{"title":3798,"path":3799,"stem":3800},"Практичні завдання та резюме модуля","\u002Fai-python\u002Flinear-regression\u002Fpractice","16.ai-python\u002F06.linear-regression\u002F05.practice",{"title":3802,"path":3803,"stem":3804,"children":3805,"page":59},"Practical Regression","\u002Fai-python\u002Fpractical-regression","16.ai-python\u002F07.practical-regression",[3806,3810,3814,3818,3822,3826,3830],{"title":3807,"path":3808,"stem":3809},"Знайомство з scikit-learn","\u002Fai-python\u002Fpractical-regression\u002Fintro-scikit-learn","16.ai-python\u002F07.practical-regression\u002F01.intro-scikit-learn",{"title":3811,"path":3812,"stem":3813},"Exploratory Data Analysis датасету Housing Prices","\u002Fai-python\u002Fpractical-regression\u002Fhousing-dataset-eda","16.ai-python\u002F07.practical-regression\u002F02.housing-dataset-eda",{"title":3815,"path":3816,"stem":3817},"Попередня обробка даних (Data Preprocessing)","\u002Fai-python\u002Fpractical-regression\u002Fdata-preprocessing","16.ai-python\u002F07.practical-regression\u002F03.data-preprocessing",{"title":3819,"path":3820,"stem":3821},"Train\u002FTest Split та перша повноцінна модель","\u002Fai-python\u002Fpractical-regression\u002Ftrain-test-split","16.ai-python\u002F07.practical-regression\u002F04.train-test-split",{"title":3823,"path":3824,"stem":3825},"Перенавчання та недонавчання","\u002Fai-python\u002Fpractical-regression\u002Foverfitting-underfitting","16.ai-python\u002F07.practical-regression\u002F05.overfitting-underfitting",{"title":3827,"path":3828,"stem":3829},"Крос-валідація (Cross-Validation)","\u002Fai-python\u002Fpractical-regression\u002Fcross-validation","16.ai-python\u002F07.practical-regression\u002F06.cross-validation",{"title":3831,"path":3832,"stem":3833},"Гіперпараметри та їх оптимізація","\u002Fai-python\u002Fpractical-regression\u002Fhyperparameter-tuning","16.ai-python\u002F07.practical-regression\u002F07.hyperparameter-tuning",{"title":3835,"path":3836,"stem":3837,"children":3838,"page":59},"Polynomial Regression","\u002Fai-python\u002Fpolynomial-regression","16.ai-python\u002F08.polynomial-regression",[3839,3843,3847],{"title":3840,"path":3841,"stem":3842},"Нелінійні залежності та поліноміальна регресія","\u002Fai-python\u002Fpolynomial-regression\u002Fnonlinear-patterns","16.ai-python\u002F08.polynomial-regression\u002F01.nonlinear-patterns",{"title":3844,"path":3845,"stem":3846},"Регуляризація в регресії — Ridge та Lasso","\u002Fai-python\u002Fpolynomial-regression\u002Fregularization-methods","16.ai-python\u002F08.polynomial-regression\u002F02.regularization-methods",{"title":3848,"path":3849,"stem":3850},"Практика — поліноміальна регресія та регуляризація на Housing Prices","\u002Fai-python\u002Fpolynomial-regression\u002Fhousing-prices-practice","16.ai-python\u002F08.polynomial-regression\u002F03.housing-prices-practice",{"title":3852,"path":3853,"stem":3854,"children":3855,"page":59},"Decision Trees Random Forest","\u002Fai-python\u002Fdecision-trees-random-forest","16.ai-python\u002F09.decision-trees-random-forest",[3856,3860],{"title":3857,"path":3858,"stem":3859},"Дерева рішень — моделі з прозорою та зрозумілою логікою","\u002Fai-python\u002Fdecision-trees-random-forest\u002Fdecision-trees","16.ai-python\u002F09.decision-trees-random-forest\u002F01.decision-trees",{"title":3861,"path":3862,"stem":3863},"Random Forest — ансамблі дерев рішень","\u002Fai-python\u002Fdecision-trees-random-forest\u002Frandom-forest","16.ai-python\u002F09.decision-trees-random-forest\u002F02.random-forest",{"title":3865,"path":3866,"stem":3867,"children":3868,"page":59},"Gradient Boosting","\u002Fai-python\u002Fgradient-boosting","16.ai-python\u002F10.gradient-boosting",[3869],{"title":3870,"path":3871,"stem":3872},"Градієнтний бустинг та XGBoost — послідовне виправлення помилок","\u002Fai-python\u002Fgradient-boosting\u002Fgradient-boosting-xgboost","16.ai-python\u002F10.gradient-boosting\u002F01.gradient-boosting-xgboost",{"title":3874,"path":3875,"stem":3876,"children":3877,"page":59},"Logistic Regression Classification","\u002Fai-python\u002Flogistic-regression-classification","16.ai-python\u002F11.logistic-regression-classification",[3878,3882],{"title":3879,"path":3880,"stem":3881},"Основи класифікації та логістична регресія","\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics","16.ai-python\u002F11.logistic-regression-classification\u002F01.classification-basics",{"title":3883,"path":3884,"stem":3885},"Метрики якості класифікації","\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-metrics","16.ai-python\u002F11.logistic-regression-classification\u002F02.classification-metrics",{"title":3887,"path":3888,"stem":3889,"children":3890,"page":59},"Neural Networks Basics","\u002Fai-python\u002Fneural-networks-basics","16.ai-python\u002F12.neural-networks-basics",[3891],{"title":3892,"path":3893,"stem":3894},"Вступ до нейронних мереж — від персептрона до багатошарових мереж","\u002Fai-python\u002Fneural-networks-basics\u002Fperceptron-to-mlp","16.ai-python\u002F12.neural-networks-basics\u002F01.perceptron-to-mlp",{"title":3896,"path":3897,"stem":3898,"children":3899,"page":59},"Pytorch Intro","\u002Fai-python\u002Fpytorch-intro","16.ai-python\u002F13.pytorch-intro",[3900,3904,3908,3912],{"title":3901,"path":3902,"stem":3903},"Тензори та автоматичне диференціювання в PyTorch","\u002Fai-python\u002Fpytorch-intro\u002Ftensors-and-autograd","16.ai-python\u002F13.pytorch-intro\u002F01.tensors-and-autograd",{"title":3905,"path":3906,"stem":3907},"Побудова та тренування нейронних мереж у PyTorch","\u002Fai-python\u002Fpytorch-intro\u002Fbuilding-and-training","16.ai-python\u002F13.pytorch-intro\u002F02.building-and-training",{"title":3909,"path":3910,"stem":3911},"Робота з даними та регуляризація в PyTorch","\u002Fai-python\u002Fpytorch-intro\u002Fdata-and-regularization","16.ai-python\u002F13.pytorch-intro\u002F03.data-and-regularization",{"title":3913,"path":3914,"stem":3915},"Просунуті теми PyTorch — GPU, оптимізація та deployment","\u002Fai-python\u002Fpytorch-intro\u002Fadvanced-topics","16.ai-python\u002F13.pytorch-intro\u002F04.advanced-topics",{"title":3917,"path":3918,"stem":3919,"children":3920,"page":59},"Activation Functions Heart Disease","\u002Fai-python\u002Factivation-functions-heart-disease","16.ai-python\u002F14.activation-functions-heart-disease",[3921,3925],{"title":3922,"path":3923,"stem":3924},"Функції активації та побудова нейронної мережі для передбачення вад серця","\u002Fai-python\u002Factivation-functions-heart-disease\u002Fheart-disease-prediction","16.ai-python\u002F14.activation-functions-heart-disease\u002F01.heart-disease-prediction",{"title":3926,"path":3927,"stem":3928},"Бонус — Повний приклад Student Performance Prediction","\u002Fai-python\u002Factivation-functions-heart-disease\u002Fstudent-performance-bonus","16.ai-python\u002F14.activation-functions-heart-disease\u002F02.student-performance-bonus",{"title":3930,"path":3931,"stem":3932,"children":3933,"page":59},"Cnn Image Classification","\u002Fai-python\u002Fcnn-image-classification","16.ai-python\u002F15.cnn-image-classification",[3934,3938,3942,3946],{"title":3935,"path":3936,"stem":3937},"Основи згорткових нейронних мереж — чому не MLP?","\u002Fai-python\u002Fcnn-image-classification\u002Fcnn-fundamentals","16.ai-python\u002F15.cnn-image-classification\u002F01.cnn-fundamentals",{"title":3939,"path":3940,"stem":3941},"Практична імплементація CNN для класифікації MNIST","\u002Fai-python\u002Fcnn-image-classification\u002Fmnist-classification","16.ai-python\u002F15.cnn-image-classification\u002F02.mnist-classification",{"title":3943,"path":3944,"stem":3945},"Глибші CNN та аугментація даних для CIFAR-10","\u002Fai-python\u002Fcnn-image-classification\u002Fcifar10-and-data-augmentation","16.ai-python\u002F15.cnn-image-classification\u002F03.cifar10-and-data-augmentation",{"title":3947,"path":3948,"stem":3949},"Transfer Learning та візуалізація внутрішніх представлень CNN","\u002Fai-python\u002Fcnn-image-classification\u002Ftransfer-learning-and-visualization","16.ai-python\u002F15.cnn-image-classification\u002F04.transfer-learning-and-visualization",{"title":3951,"path":3952,"stem":3953,"children":3954,"page":59},"Batching Normalization Deep Networks","\u002Fai-python\u002Fbatching-normalization-deep-networks","16.ai-python\u002F16.batching-normalization-deep-networks",[3955,3959,3963,3967,3971,3975,3979],{"title":3956,"path":3957,"stem":3958},"Mini-batch Gradient Descent та ефективна обробка даних","\u002Fai-python\u002Fbatching-normalization-deep-networks\u002Fmini-batch-gradient-descent","16.ai-python\u002F16.batching-normalization-deep-networks\u002F01.mini-batch-gradient-descent",{"title":3960,"path":3961,"stem":3962},"Ініціалізація ваг — фундамент стабільного навчання","\u002Fai-python\u002Fbatching-normalization-deep-networks\u002Fweight-initialization","16.ai-python\u002F16.batching-normalization-deep-networks\u002F02.weight-initialization",{"title":3964,"path":3965,"stem":3966},"Batch Normalization — прорив у глибокому навчанні","\u002Fai-python\u002Fbatching-normalization-deep-networks\u002Fbatch-normalization","16.ai-python\u002F16.batching-normalization-deep-networks\u002F03.batch-normalization",{"title":3968,"path":3969,"stem":3970},"Dropout та комбіновані стратегії регуляризації","\u002Fai-python\u002Fbatching-normalization-deep-networks\u002Fdropout-and-regularization","16.ai-python\u002F16.batching-normalization-deep-networks\u002F04.dropout-and-regularization",{"title":3972,"path":3973,"stem":3974},"Проєктування глибоких мереж — від теорії до практики","\u002Fai-python\u002Fbatching-normalization-deep-networks\u002Fdeep-networks-architectures","16.ai-python\u002F16.batching-normalization-deep-networks\u002F05.deep-networks-architectures",{"title":3976,"path":3977,"stem":3978},"Планування learning rate — коли та як зменшувати крок навчання","\u002Fai-python\u002Fbatching-normalization-deep-networks\u002Flearning-rate-scheduling","16.ai-python\u002F16.batching-normalization-deep-networks\u002F06.learning-rate-scheduling",{"title":3980,"path":3981,"stem":3982},"Підсумковий проєкт — побудова сучасного класифікатора зображень","\u002Fai-python\u002Fbatching-normalization-deep-networks\u002Ffinal-project-deep-classifier","16.ai-python\u002F16.batching-normalization-deep-networks\u002F07.final-project-deep-classifier",{"title":3984,"icon":658,"path":3985,"stem":3986,"children":3987,"page":59},"Клієнт-серверна архітектура","\u002Fclient-server-architecture","17.client-server-architecture",[3988,3992,3996,4000,4004,4008,4012,4016,4020,4024,4028,4032,4036,4040,4044,4048,4052,4056],{"title":3989,"path":3990,"stem":3991},"Архітектура клієнт-серверних систем та основи Go","\u002Fclient-server-architecture\u002Fclient-server-architecture-and-go","17.client-server-architecture\u002F01.client-server-architecture-and-go",{"title":3993,"path":3994,"stem":3995},"Система типів та модель пам’яті мови Go","\u002Fclient-server-architecture\u002Ftype-system-and-memory-model","17.client-server-architecture\u002F02.type-system-and-memory-model",{"title":3997,"path":3998,"stem":3999},"Інтерфейси та модель конкурентності мови Go","\u002Fclient-server-architecture\u002Finterfaces-and-concurrency-model","17.client-server-architecture\u002F03.interfaces-and-concurrency-model",{"title":4001,"path":4002,"stem":4003},"Сокетне програмування та протокол TCP у Go","\u002Fclient-server-architecture\u002Ftcp-socket-programming","17.client-server-architecture\u002F04.tcp-socket-programming",{"title":4005,"path":4006,"stem":4007},"Протокол UDP та датаграмна передача даних","\u002Fclient-server-architecture\u002Fudp-datagram-transmission","17.client-server-architecture\u002F05.udp-datagram-transmission",{"title":4009,"path":4010,"stem":4011},"Криптографічний захист каналів зв","\u002Fclient-server-architecture\u002Ftls-cryptographic-channel-protection","17.client-server-architecture\u002F06.tls-cryptographic-channel-protection",{"title":4013,"path":4014,"stem":4015},"Прикладні мережеві протоколи DNS та SMTP","\u002Fclient-server-architecture\u002Fdns-smtp-application-protocols","17.client-server-architecture\u002F07.dns-smtp-application-protocols",{"title":4017,"path":4018,"stem":4019},"Протокол HTTP та стандартний вебсервер Go","\u002Fclient-server-architecture\u002Fhttp-protocol-and-web-server","17.client-server-architecture\u002F08.http-protocol-and-web-server",{"title":4021,"path":4022,"stem":4023},"Проєктування REST API та маршрутизація засобами Chi","\u002Fclient-server-architecture\u002Frest-api-design-and-chi-routing","17.client-server-architecture\u002F09.rest-api-design-and-chi-routing",{"title":4025,"path":4026,"stem":4027},"Лекція 10. Шарувата архітектура та конвеєри обробки запитів","\u002Fclient-server-architecture\u002Flayered-architecture-and-middleware-pipelines","17.client-server-architecture\u002F10.layered-architecture-and-middleware-pipelines",{"title":4029,"path":4030,"stem":4031},"Лекція 11. Архітектура та маршрутизація фреймворку Gin","\u002Fclient-server-architecture\u002Fgin-framework-architecture-and-routing","17.client-server-architecture\u002F11.gin-framework-architecture-and-routing",{"title":4033,"path":4034,"stem":4035},"Лекція 12. Валідація даних, безпека та документування у Gin","\u002Fclient-server-architecture\u002Fdata-validation-security-and-documentation-in-gin","17.client-server-architecture\u002F12.data-validation-security-and-documentation-in-gin",{"title":4037,"path":4038,"stem":4039},"Лекція 13. Взаємодія з реляційними СУБД та технології ORM","\u002Fclient-server-architecture\u002Frelational-databases-and-orm","17.client-server-architecture\u002F13.relational-databases-and-orm",{"title":4041,"path":4042,"stem":4043},"Потокова передача даних та протокол WebSocket","\u002Fclient-server-architecture\u002Fstreaming-data-and-websockets","17.client-server-architecture\u002F14.streaming-data-and-websockets",{"title":4045,"path":4046,"stem":4047},"Міжсервісна взаємодія на основі протоколу gRPC","\u002Fclient-server-architecture\u002Fgrpc-inter-service-communication","17.client-server-architecture\u002F15.grpc-inter-service-communication",{"title":4049,"path":4050,"stem":4051},"Асинхронний обмін повідомленнями та протоколи черг","\u002Fclient-server-architecture\u002Fasynchronous-message-exchange-and-queue-protocols","17.client-server-architecture\u002F16.asynchronous-message-exchange-and-queue-protocols",{"title":4053,"path":4054,"stem":4055},"Протоколи потокового медіа та технологія WebRTC","\u002Fclient-server-architecture\u002Fstreaming-media-protocols-and-webrtc","17.client-server-architecture\u002F17.streaming-media-protocols-and-webrtc",{"title":4057,"path":4058,"stem":4059},"Моніторинг, безпека та контейнеризація застосунків","\u002Fclient-server-architecture\u002Fmonitoring-security-and-containerization","17.client-server-architecture\u002F18.monitoring-security-and-containerization",{"title":4061,"icon":2118,"path":4062,"stem":4063,"children":4064,"page":59},"Розробка WEB-застосувань","\u002Fweb-development","18.web-development",[4065,4110,4148,4177,4206,4263,4313,4407,4473,4555,4588,4616,4658,4704,4747],{"title":4066,"icon":658,"path":4067,"stem":4068,"children":4069,"page":59},"Архітектура комп'ютерних мереж та мережеві протоколи","\u002Fweb-development\u002Fnetwork-architecture-and-protocols","18.web-development\u002F01.network-architecture-and-protocols",[4070,4074,4078,4082,4086,4090,4094,4098,4102,4106],{"title":4071,"path":4072,"stem":4073},"Еволюція веброзробки та модель клієнт-сервер","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fweb-evolution-client-server","18.web-development\u002F01.network-architecture-and-protocols\u002F01.web-evolution-client-server",{"title":4075,"path":4076,"stem":4077},"Еталонна модель OSI","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fosi-model","18.web-development\u002F01.network-architecture-and-protocols\u002F02.osi-model",{"title":4079,"path":4080,"stem":4081},"Стек протоколів TCP\u002FIP","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Ftcp-ip-stack","18.web-development\u002F01.network-architecture-and-protocols\u002F03.tcp-ip-stack",{"title":4083,"path":4084,"stem":4085},"IP-адресація, порти та сокети","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fip-addressing-ports-sockets","18.web-development\u002F01.network-architecture-and-protocols\u002F04.ip-addressing-ports-sockets",{"title":4087,"path":4088,"stem":4089},"Протоколи TCP та UDP","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Ftcp-udp-protocols","18.web-development\u002F01.network-architecture-and-protocols\u002F05.tcp-udp-protocols",{"title":4091,"path":4092,"stem":4093},"Система доменних імен DNS","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fdns-system","18.web-development\u002F01.network-architecture-and-protocols\u002F06.dns-system",{"title":4095,"path":4096,"stem":4097},"Протокол SMTP та поштові протоколи","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fsmtp-email-protocols","18.web-development\u002F01.network-architecture-and-protocols\u002F07.smtp-email-protocols",{"title":4099,"path":4100,"stem":4101},"Протокол WebSocket","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fwebsocket-protocol","18.web-development\u002F01.network-architecture-and-protocols\u002F08.websocket-protocol",{"title":4103,"path":4104,"stem":4105},"Протокол SSH","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fssh-protocol","18.web-development\u002F01.network-architecture-and-protocols\u002F09.ssh-protocol",{"title":4107,"path":4108,"stem":4109},"Огляд сучасних серверних технологій","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fmodern-backend-technologies","18.web-development\u002F01.network-architecture-and-protocols\u002F10.modern-backend-technologies",{"title":4111,"icon":4112,"path":4113,"stem":4114,"children":4115,"page":59},"Протокол HTTP та захищена передача даних HTTPS","i-lucide-lock","\u002Fweb-development\u002Fhttp-and-https","18.web-development\u002F02.http-and-https",[4116,4120,4124,4128,4132,4136,4140,4144],{"title":4117,"path":4118,"stem":4119},"Вступ до протоколу HTTP та еволюція веб-технологій","\u002Fweb-development\u002Fhttp-and-https\u002Fintroduction-and-evolution","18.web-development\u002F02.http-and-https\u002F01.introduction-and-evolution",{"title":4121,"path":4122,"stem":4123},"Анатомія HTTP-запиту","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-request-structure","18.web-development\u002F02.http-and-https\u002F02.http-request-structure",{"title":4125,"path":4126,"stem":4127},"Анатомія HTTP-відповіді","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-response-structure","18.web-development\u002F02.http-and-https\u002F03.http-response-structure",{"title":4129,"path":4130,"stem":4131},"Методи HTTP та їхня семантика","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-methods","18.web-development\u002F02.http-and-https\u002F04.http-methods",{"title":4133,"path":4134,"stem":4135},"Коди статусу HTTP та їхнє призначення","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-status-codes","18.web-development\u002F02.http-and-https\u002F05.http-status-codes",{"title":4137,"path":4138,"stem":4139},"HTTP-заголовки та їхнє призначення","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-headers","18.web-development\u002F02.http-and-https\u002F06.http-headers",{"title":4141,"path":4142,"stem":4143},"CORS та механізми безпеки HTTP","\u002Fweb-development\u002Fhttp-and-https\u002Fcors-and-security","18.web-development\u002F02.http-and-https\u002F07.cors-and-security",{"title":4145,"path":4146,"stem":4147},"HTTPS та криптографічні основи TLS","\u002Fweb-development\u002Fhttp-and-https\u002Fhttps-and-tls","18.web-development\u002F02.http-and-https\u002F08.https-and-tls",{"title":4149,"icon":2498,"path":4150,"stem":4151,"children":4152,"page":59},"Система типів мови TypeScript","\u002Fweb-development\u002Ftypescript-type-system","18.web-development\u002F03.typescript-type-system",[4153,4157,4161,4165,4169,4173],{"title":4154,"path":4155,"stem":4156},"Знайомство з TypeScript Compiler","\u002Fweb-development\u002Ftypescript-type-system\u002Fintroduction-compiler-config","18.web-development\u002F03.typescript-type-system\u002F01.introduction-compiler-config",{"title":4158,"path":4159,"stem":4160},"Примітивні типи даних: string, number, boolean","\u002Fweb-development\u002Ftypescript-type-system\u002Fprimitive-special-types","18.web-development\u002F03.typescript-type-system\u002F02.primitive-special-types",{"title":4162,"path":4163,"stem":4164},"Масиви, кортежі та об","\u002Fweb-development\u002Ftypescript-type-system\u002Farrays-tuples-objects","18.web-development\u002F03.typescript-type-system\u002F03.arrays-tuples-objects",{"title":4166,"path":4167,"stem":4168},"Псевдоніми типів, Union типи, Intersection типи та літеральні типи","\u002Fweb-development\u002Ftypescript-type-system\u002Funion-intersection-literals","18.web-development\u002F03.typescript-type-system\u002F04.union-intersection-literals",{"title":4170,"path":4171,"stem":4172},"Type Narrowing (звуження типів)","\u002Fweb-development\u002Ftypescript-type-system\u002Ftype-narrowing","18.web-development\u002F03.typescript-type-system\u002F05.type-narrowing",{"title":4174,"path":4175,"stem":4176},"Типізація функцій","\u002Fweb-development\u002Ftypescript-type-system\u002Ffunctions-typing","18.web-development\u002F03.typescript-type-system\u002F06.functions-typing",{"title":4178,"icon":2498,"path":4179,"stem":4180,"children":4181,"page":59},"Розширені засоби мови TypeScript","\u002Fweb-development\u002Ftypescript-advanced","18.web-development\u002F04.typescript-advanced",[4182,4186,4190,4194,4198,4202],{"title":4183,"path":4184,"stem":4185},"Interfaces та Classes","\u002Fweb-development\u002Ftypescript-advanced\u002Finterfaces-classes","18.web-development\u002F04.typescript-advanced\u002F01.interfaces-classes",{"title":4187,"path":4188,"stem":4189},"Основи Generic типів","\u002Fweb-development\u002Ftypescript-advanced\u002Fgenerics-fundamentals","18.web-development\u002F04.typescript-advanced\u002F02.generics-fundamentals",{"title":4191,"path":4192,"stem":4193},"Enums та Decorators","\u002Fweb-development\u002Ftypescript-advanced\u002Fenums-decorators","18.web-development\u002F04.typescript-advanced\u002F03.enums-decorators",{"title":4195,"path":4196,"stem":4197},"Utility Types","\u002Fweb-development\u002Ftypescript-advanced\u002Futility-types","18.web-development\u002F04.typescript-advanced\u002F04.utility-types",{"title":4199,"path":4200,"stem":4201},"Mapped та Conditional Types","\u002Fweb-development\u002Ftypescript-advanced\u002Fmapped-conditional-types","18.web-development\u002F04.typescript-advanced\u002F05.mapped-conditional-types",{"title":4203,"path":4204,"stem":4205},"Модулі та Strict Mode","\u002Fweb-development\u002Ftypescript-advanced\u002Fmodules-strict-mode","18.web-development\u002F04.typescript-advanced\u002F06.modules-strict-mode",{"title":4207,"icon":4208,"path":4209,"stem":4210,"children":4211,"page":59},"Платформа Node.js як середовище виконання","i-devicon-nodejs","\u002Fweb-development\u002Fnodejs-platform","18.web-development\u002F05.nodejs-platform",[4212,4216,4220,4224,4228,4232,4236,4240,4244,4248,4252,4255,4259],{"title":4213,"path":4214,"stem":4215},"Що таке Node.js та його архітектура","\u002Fweb-development\u002Fnodejs-platform\u002Fwhat-is-nodejs","18.web-development\u002F05.nodejs-platform\u002F01.what-is-nodejs",{"title":4217,"path":4218,"stem":4219},"Event Loop — серце Node.js","\u002Fweb-development\u002Fnodejs-platform\u002Fevent-loop","18.web-development\u002F05.nodejs-platform\u002F02.event-loop",{"title":4221,"path":4222,"stem":4223},"Модульні системи: CommonJS vs ES Modules","\u002Fweb-development\u002Fnodejs-platform\u002Fmodule-systems","18.web-development\u002F05.nodejs-platform\u002F03.module-systems",{"title":4225,"path":4226,"stem":4227},"npm та package.json","\u002Fweb-development\u002Fnodejs-platform\u002Fnpm-package-json","18.web-development\u002F05.nodejs-platform\u002F04.npm-package-json",{"title":4229,"path":4230,"stem":4231},"Глобальні об\\","\u002Fweb-development\u002Fnodejs-platform\u002Fglobal-objects","18.web-development\u002F05.nodejs-platform\u002F05.global-objects",{"title":4233,"path":4234,"stem":4235},"Вбудований модуль fs (File System)","\u002Fweb-development\u002Fnodejs-platform\u002Fbuilt-in-modules-fs","18.web-development\u002F05.nodejs-platform\u002F06.built-in-modules-fs",{"title":4237,"path":4238,"stem":4239},"Вбудований модуль path","\u002Fweb-development\u002Fnodejs-platform\u002Fbuilt-in-modules-path","18.web-development\u002F05.nodejs-platform\u002F07.built-in-modules-path",{"title":4241,"path":4242,"stem":4243},"Вбудований модуль http","\u002Fweb-development\u002Fnodejs-platform\u002Fbuilt-in-modules-http","18.web-development\u002F05.nodejs-platform\u002F08.built-in-modules-http",{"title":4245,"path":4246,"stem":4247},"Streams — потоки даних у Node.js","\u002Fweb-development\u002Fnodejs-platform\u002Fstreams","18.web-development\u002F05.nodejs-platform\u002F09.streams",{"title":4249,"path":4250,"stem":4251},"Вбудований модуль util (Utilities)","\u002Fweb-development\u002Fnodejs-platform\u002Fbuilt-in-modules-util","18.web-development\u002F05.nodejs-platform\u002F10.built-in-modules-util",{"title":3141,"path":4253,"stem":4254},"\u002Fweb-development\u002Fnodejs-platform\u002Fenvironment-variables","18.web-development\u002F05.nodejs-platform\u002F11.environment-variables",{"title":4256,"path":4257,"stem":4258},"Інструменти налагодження та розробки","\u002Fweb-development\u002Fnodejs-platform\u002Fdebugging-tools","18.web-development\u002F05.nodejs-platform\u002F12.debugging-tools",{"title":4260,"path":4261,"stem":4262},"Продуктивність та Best Practices","\u002Fweb-development\u002Fnodejs-platform\u002Fperformance-best-practices","18.web-development\u002F05.nodejs-platform\u002F13.performance-best-practices",{"title":4264,"icon":4265,"path":4266,"stem":4267,"children":4268,"page":59},"Асинхронне програмування у Node.js","i-lucide-clock","\u002Fweb-development\u002Fasync-programming-nodejs","18.web-development\u002F06.async-programming-nodejs",[4269,4273,4277,4281,4285,4289,4293,4297,4301,4305,4309],{"title":4270,"path":4271,"stem":4272},"Синхронний vs асинхронний код","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fsync-vs-async","18.web-development\u002F06.async-programming-nodejs\u002F01.sync-vs-async",{"title":4274,"path":4275,"stem":4276},"Callbacks — перша парадигма асинхронності","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fcallbacks","18.web-development\u002F06.async-programming-nodejs\u002F02.callbacks",{"title":4278,"path":4279,"stem":4280},"Promises — стандарт асинхронності","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fpromises","18.web-development\u002F06.async-programming-nodejs\u002F03.promises",{"title":4282,"path":4283,"stem":4284},"Promise комбінатори","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fpromise-combinators","18.web-development\u002F06.async-programming-nodejs\u002F04.promise-combinators",{"title":4286,"path":4287,"stem":4288},"Async\u002FAwait — синтаксичний цукор над Promises","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fasync-await","18.web-development\u002F06.async-programming-nodejs\u002F05.async-await",{"title":4290,"path":4291,"stem":4292},"Паралельне vs послідовне виконання","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fparallel-vs-sequential","18.web-development\u002F06.async-programming-nodejs\u002F06.parallel-vs-sequential",{"title":4294,"path":4295,"stem":4296},"EventEmitter — подієва модель Node.js","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fevent-emitter","18.web-development\u002F06.async-programming-nodejs\u002F07.event-emitter",{"title":4298,"path":4299,"stem":4300},"Worker Threads — багатопотоковість у Node.js","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fworker-threads","18.web-development\u002F06.async-programming-nodejs\u002F08.worker-threads",{"title":4302,"path":4303,"stem":4304},"Child Processes — запуск зовнішніх процесів","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fchild-processes","18.web-development\u002F06.async-programming-nodejs\u002F09.child-processes",{"title":4306,"path":4307,"stem":4308},"Обробка помилок у асинхронному коді","\u002Fweb-development\u002Fasync-programming-nodejs\u002Ferror-handling","18.web-development\u002F06.async-programming-nodejs\u002F10.error-handling",{"title":4310,"path":4311,"stem":4312},"Порівняння Node.js фреймворків","\u002Fweb-development\u002Fasync-programming-nodejs\u002Fnodejs-frameworks","18.web-development\u002F06.async-programming-nodejs\u002F11.nodejs-frameworks",{"title":4314,"icon":4315,"path":4316,"stem":4317,"children":4318,"page":59},"Тема 7. Фреймворк NestJS. Контролери та маршрутизація","i-lucide-route","\u002Fweb-development\u002Fnestjs-controllers-routing","18.web-development\u002F07.nestjs-controllers-routing",[4319,4323,4327,4331,4335,4339,4343,4347,4351,4355,4359,4363,4367,4371,4375,4379,4383,4387,4391,4395,4399,4403],{"title":4320,"path":4321,"stem":4322},"Філософія та архітектура NestJS","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fnestjs-philosophy","18.web-development\u002F07.nestjs-controllers-routing\u002F01.nestjs-philosophy",{"title":4324,"path":4325,"stem":4326},"Три стовпи архітектури: модулі, контролери, провайдери","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fthree-pillars","18.web-development\u002F07.nestjs-controllers-routing\u002F02.three-pillars",{"title":4328,"path":4329,"stem":4330},"Інверсія керування (IoC) та ін","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fioc-and-di","18.web-development\u002F07.nestjs-controllers-routing\u002F03.ioc-and-di",{"title":4332,"path":4333,"stem":4334},"Встановлення NestJS CLI та створення проєкту","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fnestjs-cli-setup","18.web-development\u002F07.nestjs-controllers-routing\u002F04.nestjs-cli-setup",{"title":4336,"path":4337,"stem":4338},"Структура проєкту NestJS та конвенції","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fproject-structure","18.web-development\u002F07.nestjs-controllers-routing\u002F05.project-structure",{"title":4340,"path":4341,"stem":4342},"Контролери: основи маршрутизації","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fcontrollers-basics","18.web-development\u002F07.nestjs-controllers-routing\u002F06.controllers-basics",{"title":4344,"path":4345,"stem":4346},"Декоратори маршрутизації HTTP-методів","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Froute-decorators","18.web-development\u002F07.nestjs-controllers-routing\u002F07.route-decorators",{"title":4348,"path":4349,"stem":4350},"Параметри маршруту та декоратор @Param","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Froute-parameters","18.web-development\u002F07.nestjs-controllers-routing\u002F08.route-parameters",{"title":4352,"path":4353,"stem":4354},"Query-параметри та декоратор @Query","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fquery-parameters","18.web-development\u002F07.nestjs-controllers-routing\u002F09.query-parameters",{"title":4356,"path":4357,"stem":4358},"Тіло запиту та декоратор @Body","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Frequest-body","18.web-development\u002F07.nestjs-controllers-routing\u002F10.request-body",{"title":4360,"path":4361,"stem":4362},"Робота з заголовками запиту та відповіді","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fheaders-decorators","18.web-development\u002F07.nestjs-controllers-routing\u002F11.headers-decorators",{"title":4364,"path":4365,"stem":4366},"Data Transfer Objects (DTO): визначення та призначення","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fdto-introduction","18.web-development\u002F07.nestjs-controllers-routing\u002F12.dto-introduction",{"title":4368,"path":4369,"stem":4370},"Об'єкти Request та Response","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Frequest-response-objects","18.web-development\u002F07.nestjs-controllers-routing\u002F13.request-response-objects",{"title":4372,"path":4373,"stem":4374},"HTTP-статус коди та декоратор @HttpCode","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fhttp-status-codes","18.web-development\u002F07.nestjs-controllers-routing\u002F14.http-status-codes",{"title":4376,"path":4377,"stem":4378},"Перенаправлення (Redirects) та декоратор @Redirect","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fredirects","18.web-development\u002F07.nestjs-controllers-routing\u002F15.redirects",{"title":4380,"path":4381,"stem":4382},"Асинхронні обробники та Observables","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fasync-handlers","18.web-development\u002F07.nestjs-controllers-routing\u002F16.async-handlers",{"title":4384,"path":4385,"stem":4386},"Маршрутизація за піддоменами та версіонування API","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fsub-domain-routing","18.web-development\u002F07.nestjs-controllers-routing\u002F17.sub-domain-routing",{"title":4388,"path":4389,"stem":4390},"Області видимості контролерів (Scopes)","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fcontroller-scopes","18.web-development\u002F07.nestjs-controllers-routing\u002F18.controller-scopes",{"title":4392,"path":4393,"stem":4394},"Основні команди NestJS CLI","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fnestjs-cli-commands","18.web-development\u002F07.nestjs-controllers-routing\u002F19.nestjs-cli-commands",{"title":4396,"path":4397,"stem":4398},"Практичний приклад: створення CRUD-контролера","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fcrud-example","18.web-development\u002F07.nestjs-controllers-routing\u002F20.crud-example",{"title":4400,"path":4401,"stem":4402},"Тестування контролерів","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Ftesting-controllers","18.web-development\u002F07.nestjs-controllers-routing\u002F21.testing-controllers",{"title":4404,"path":4405,"stem":4406},"Best Practices для контролерів та маршрутизації","\u002Fweb-development\u002Fnestjs-controllers-routing\u002Fbest-practices","18.web-development\u002F07.nestjs-controllers-routing\u002F22.best-practices",{"title":4408,"icon":4409,"path":4410,"stem":4411,"children":4412,"page":59},"Тема 8. Провайдери, сервіси та модульна система NestJS","i-lucide-package","\u002Fweb-development\u002Fnestjs-providers-modules","18.web-development\u002F08.nestjs-providers-modules",[4413,4417,4421,4425,4429,4433,4437,4441,4445,4449,4453,4457,4461,4465,4469],{"title":4414,"path":4415,"stem":4416},"Концепція провайдерів у NestJS","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fproviders-concept","18.web-development\u002F08.nestjs-providers-modules\u002F01.providers-concept",{"title":4418,"path":4419,"stem":4420},"Сервіси: інкапсуляція бізнес-логіки","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fservices-business-logic","18.web-development\u002F08.nestjs-providers-modules\u002F02.services-business-logic",{"title":4422,"path":4423,"stem":4424},"Практика ін","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fdependency-injection-practice","18.web-development\u002F08.nestjs-providers-modules\u002F03.dependency-injection-practice",{"title":4426,"path":4427,"stem":4428},"Custom Providers: useValue, useClass, useFactory, useExisting","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fcustom-providers","18.web-development\u002F08.nestjs-providers-modules\u002F04.custom-providers",{"title":4430,"path":4431,"stem":4432},"Injection Tokens: рядкові та символьні токени","\u002Fweb-development\u002Fnestjs-providers-modules\u002Finjection-tokens","18.web-development\u002F08.nestjs-providers-modules\u002F05.injection-tokens",{"title":4434,"path":4435,"stem":4436},"Опціональні провайдери та декоратор @Optional","\u002Fweb-development\u002Fnestjs-providers-modules\u002Foptional-providers","18.web-development\u002F08.nestjs-providers-modules\u002F07.optional-providers",{"title":4438,"path":4439,"stem":4440},"Структура модулів: imports, controllers, providers, exports","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fmodules-structure","18.web-development\u002F08.nestjs-providers-modules\u002F08.modules-structure",{"title":4442,"path":4443,"stem":4444},"Feature Modules: ізоляція функціональності","\u002Fweb-development\u002Fnestjs-providers-modules\u002Ffeature-modules","18.web-development\u002F08.nestjs-providers-modules\u002F09.feature-modules",{"title":4446,"path":4447,"stem":4448},"Shared Modules: перевикористання провайдерів","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fshared-modules","18.web-development\u002F08.nestjs-providers-modules\u002F10.shared-modules",{"title":4450,"path":4451,"stem":4452},"Global Modules та декоратор @Global","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fglobal-modules","18.web-development\u002F08.nestjs-providers-modules\u002F11.global-modules",{"title":4454,"path":4455,"stem":4456},"Dynamic Modules: конфігурація під час виконання","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fdynamic-modules","18.web-development\u002F08.nestjs-providers-modules\u002F12.dynamic-modules",{"title":4458,"path":4459,"stem":4460},"Циклічні залежності та forwardRef","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fcircular-dependencies","18.web-development\u002F08.nestjs-providers-modules\u002F13.circular-dependencies",{"title":4462,"path":4463,"stem":4464},"Lifecycle Hooks: хуки життєвого циклу","\u002Fweb-development\u002Fnestjs-providers-modules\u002Flifecycle-hooks","18.web-development\u002F08.nestjs-providers-modules\u002F14.lifecycle-hooks",{"title":4466,"path":4467,"stem":4468},"ModuleRef: динамічний доступ до провайдерів","\u002Fweb-development\u002Fnestjs-providers-modules\u002Fmodule-reference","18.web-development\u002F08.nestjs-providers-modules\u002F15.module-reference",{"title":4470,"path":4471,"stem":4472},"Тестування сервісів та провайдерів","\u002Fweb-development\u002Fnestjs-providers-modules\u002Ftesting-services","18.web-development\u002F08.nestjs-providers-modules\u002F16.testing-services",{"title":4474,"icon":4475,"path":4476,"stem":4477,"children":4478,"page":59},"Тема 9. Валідація даних та конвеєр обробки запитів у NestJS","i-lucide-filter","\u002Fweb-development\u002Fnestjs-validation-pipeline","18.web-development\u002F09.nestjs-validation-pipeline",[4479,4483,4487,4491,4495,4499,4503,4507,4511,4515,4519,4523,4527,4531,4535,4539,4543,4547,4551],{"title":4480,"path":4481,"stem":4482},"Request Pipeline: конвеєр обробки запитів","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Frequest-pipeline","18.web-development\u002F09.nestjs-validation-pipeline\u002F01.request-pipeline",{"title":4484,"path":4485,"stem":4486},"Pipes: концепція трансформації та валідації","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fpipes-concept","18.web-development\u002F09.nestjs-validation-pipeline\u002F02.pipes-concept",{"title":4488,"path":4489,"stem":4490},"Вбудовані pipes: ParseIntPipe, ParseBoolPipe, ParseUUIDPipe","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fbuilt-in-pipes","18.web-development\u002F09.nestjs-validation-pipeline\u002F03.built-in-pipes",{"title":4492,"path":4493,"stem":4494},"ValidationPipe: автоматична валідація DTO","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fvalidation-pipe","18.web-development\u002F09.nestjs-validation-pipeline\u002F04.validation-pipe",{"title":4496,"path":4497,"stem":4498},"Декоратори class-validator для DTO","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fclass-validator-decorators","18.web-development\u002F09.nestjs-validation-pipeline\u002F05.class-validator-decorators",{"title":4500,"path":4501,"stem":4502},"Створення кастомних валідаторів","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fcustom-validators","18.web-development\u002F09.nestjs-validation-pipeline\u002F06.custom-validators",{"title":4504,"path":4505,"stem":4506},"Створення власних Pipes","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fcustom-pipes","18.web-development\u002F09.nestjs-validation-pipeline\u002F07.custom-pipes",{"title":4508,"path":4509,"stem":4510},"Основи Middleware","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fmiddleware-basics","18.web-development\u002F09.nestjs-validation-pipeline\u002F08.middleware-basics",{"title":4512,"path":4513,"stem":4514},"Практичні приклади Middleware","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fmiddleware-examples","18.web-development\u002F09.nestjs-validation-pipeline\u002F09.middleware-examples",{"title":4516,"path":4517,"stem":4518},"Guards: захисні перехоплювачі доступу","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fguards-concept","18.web-development\u002F09.nestjs-validation-pipeline\u002F10.guards-concept",{"title":4520,"path":4521,"stem":4522},"Створення кастомних Guards","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fcustom-guards","18.web-development\u002F09.nestjs-validation-pipeline\u002F11.custom-guards",{"title":4524,"path":4525,"stem":4526},"Interceptors: перехоплення та трансформація відповідей","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Finterceptors-concept","18.web-development\u002F09.nestjs-validation-pipeline\u002F12.interceptors-concept",{"title":4528,"path":4529,"stem":4530},"Практичні приклади Interceptors","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Finterceptor-examples","18.web-development\u002F09.nestjs-validation-pipeline\u002F13.interceptor-examples",{"title":4532,"path":4533,"stem":4534},"Exception Filters: обробка виключень","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fexception-filters","18.web-development\u002F09.nestjs-validation-pipeline\u002F14.exception-filters",{"title":4536,"path":4537,"stem":4538},"Custom Exception Filters: спеціалізовані фільтри","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fcustom-exception-filters","18.web-development\u002F09.nestjs-validation-pipeline\u002F15.custom-exception-filters",{"title":4540,"path":4541,"stem":4542},"Execution Context: контекст виконання","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fexecution-context","18.web-development\u002F09.nestjs-validation-pipeline\u002F16.execution-context",{"title":4544,"path":4545,"stem":4546},"Custom Decorators: власні декоратори","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fcustom-decorators","18.web-development\u002F09.nestjs-validation-pipeline\u002F17.custom-decorators",{"title":4548,"path":4549,"stem":4550},"Global Components: глобальні компоненти","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fglobal-components","18.web-development\u002F09.nestjs-validation-pipeline\u002F18.global-components",{"title":4552,"path":4553,"stem":4554},"Pipeline Best Practices: найкращі практики","\u002Fweb-development\u002Fnestjs-validation-pipeline\u002Fpipeline-best-practices","18.web-development\u002F09.nestjs-validation-pipeline\u002F19.pipeline-best-practices",{"title":4556,"icon":2865,"path":4557,"stem":4558,"children":4559,"page":59},"Інтеграція реляційних баз даних засобами TypeORM","\u002Fweb-development\u002Ftypeorm-integration","18.web-development\u002F10.typeorm-integration",[4560,4564,4568,4572,4576,4580,4584],{"title":4561,"path":4562,"stem":4563},"Робота з базами даних у Node.js через нативні драйвери","\u002Fweb-development\u002Ftypeorm-integration\u002F01-nodejs-database-drivers","18.web-development\u002F10.typeorm-integration\u002F01-nodejs-database-drivers",{"title":4565,"path":4566,"stem":4567},"ORM та знайомство з TypeORM","\u002Fweb-development\u002Ftypeorm-integration\u002F02-orm-and-typeorm-intro","18.web-development\u002F10.typeorm-integration\u002F02-orm-and-typeorm-intro",{"title":4569,"path":4570,"stem":4571},"Налаштування TypeORM у NestJS проєкті","\u002Fweb-development\u002Ftypeorm-integration\u002F03-typeorm-setup-nestjs","18.web-development\u002F10.typeorm-integration\u002F03-typeorm-setup-nestjs",{"title":4573,"path":4574,"stem":4575},"Entity класи та декоратори TypeORM","\u002Fweb-development\u002Ftypeorm-integration\u002F04-entities-and-decorators","18.web-development\u002F10.typeorm-integration\u002F04-entities-and-decorators",{"title":4577,"path":4578,"stem":4579},"Repository Pattern та CRUD операції","\u002Fweb-development\u002Ftypeorm-integration\u002F05-repository-pattern-crud","18.web-development\u002F10.typeorm-integration\u002F05-repository-pattern-crud",{"title":4581,"path":4582,"stem":4583},"Пагінація та фільтрація даних","\u002Fweb-development\u002Ftypeorm-integration\u002F06-pagination-filtering","18.web-development\u002F10.typeorm-integration\u002F06-pagination-filtering",{"title":4585,"path":4586,"stem":4587},"QueryBuilder для складних запитів","\u002Fweb-development\u002Ftypeorm-integration\u002F07-query-builder","18.web-development\u002F10.typeorm-integration\u002F07-query-builder",{"title":4589,"icon":4590,"path":4591,"stem":4592,"children":4593,"page":59},"Зв'язки між сутностями, міграції та оптимізація запитів","i-lucide-git-branch","\u002Fweb-development\u002Fentity-relations-migrations","18.web-development\u002F11.entity-relations-migrations",[4594,4598,4602,4606,4610],{"title":4595,"path":4596,"stem":4597},"Зв'язки One-to-Many та Many-to-One","\u002Fweb-development\u002Fentity-relations-migrations\u002F01-one-to-many-many-to-one","18.web-development\u002F11.entity-relations-migrations\u002F01-one-to-many-many-to-one",{"title":4599,"path":4600,"stem":4601},"Зв'язки One-to-One та Many-to-Many","\u002Fweb-development\u002Fentity-relations-migrations\u002F02-one-to-one-many-to-many","18.web-development\u002F11.entity-relations-migrations\u002F02-one-to-one-many-to-many",{"title":4603,"path":4604,"stem":4605},"Керування міграціями бази даних","\u002Fweb-development\u002Fentity-relations-migrations\u002F03-migrations-management","18.web-development\u002F11.entity-relations-migrations\u002F03-migrations-management",{"title":4607,"path":4608,"stem":4609},"Транзакції у TypeORM","\u002Fweb-development\u002Fentity-relations-migrations\u002F04-transactions","18.web-development\u002F11.entity-relations-migrations\u002F04-transactions",{"title":4611,"path":4612,"stem":4613,"children":4614},"Індекси та оптимізація запитів","\u002Fweb-development\u002Fentity-relations-migrations\u002F05-indexes-optimization","18.web-development\u002F11.entity-relations-migrations\u002F05-indexes-optimization",[4615],{"title":4611,"path":4612,"stem":4613},{"title":4617,"icon":4618,"path":4619,"stem":4620,"children":4621,"page":59},"Механізми автентифікації у вебзастосунках","i-lucide-key","\u002Fweb-development\u002Fauthentication","18.web-development\u002F12.authentication",[4622,4626,4630,4634,4638,4642,4646,4650,4654],{"title":4623,"path":4624,"stem":4625},"Автентифікація vs Авторизація","\u002Fweb-development\u002Fauthentication\u002F01-authentication-vs-authorization","18.web-development\u002F12.authentication\u002F01-authentication-vs-authorization",{"title":4627,"path":4628,"stem":4629},"Стратегії автентифікації","\u002Fweb-development\u002Fauthentication\u002F02-authentication-strategies","18.web-development\u002F12.authentication\u002F02-authentication-strategies",{"title":4631,"path":4632,"stem":4633},"Автентифікація на основі сесій","\u002Fweb-development\u002Fauthentication\u002F03-session-based-authentication","18.web-development\u002F12.authentication\u002F03-session-based-authentication",{"title":4635,"path":4636,"stem":4637},"Структура JSON Web Token (JWT)","\u002Fweb-development\u002Fauthentication\u002F04-jwt-structure","18.web-development\u002F12.authentication\u002F04-jwt-structure",{"title":4639,"path":4640,"stem":4641},"Інтеграція JWT у NestJS","\u002Fweb-development\u002Fauthentication\u002F05-nestjs-jwt-integration","18.web-development\u002F12.authentication\u002F05-nestjs-jwt-integration",{"title":4643,"path":4644,"stem":4645},"Passport.js стратегії у NestJS","\u002Fweb-development\u002Fauthentication\u002F06-passport-strategies","18.web-development\u002F12.authentication\u002F06-passport-strategies",{"title":4647,"path":4648,"stem":4649},"Безпечне зберігання паролів: хешування та криптографічний захист","\u002Fweb-development\u002Fauthentication\u002F07-password-hashing","18.web-development\u002F12.authentication\u002F07-password-hashing",{"title":4651,"path":4652,"stem":4653},"Refresh Token та безпечне оновлення доступу","\u002Fweb-development\u002Fauthentication\u002F08-refresh-tokens","18.web-development\u002F12.authentication\u002F08-refresh-tokens",{"title":4655,"path":4656,"stem":4657},"OAuth 2.0 та OpenID Connect: делегована автентифікація","\u002Fweb-development\u002Fauthentication\u002F09-oauth2-openid","18.web-development\u002F12.authentication\u002F09-oauth2-openid",{"title":4659,"icon":4660,"path":4661,"stem":4662,"children":4663,"page":59},"Авторизація та безпека серверних застосунків","i-lucide-shield","\u002Fweb-development\u002Fauthorization-security","18.web-development\u002F13.authorization-security",[4664,4668,4672,4676,4680,4684,4688,4692,4696,4700],{"title":4665,"path":4666,"stem":4667},"Моделі авторизації","\u002Fweb-development\u002Fauthorization-security\u002F01-authorization-models","18.web-development\u002F13.authorization-security\u002F01-authorization-models",{"title":4669,"path":4670,"stem":4671},"Реалізація RBAC у NestJS","\u002Fweb-development\u002Fauthorization-security\u002F02-rbac-implementation","18.web-development\u002F13.authorization-security\u002F02-rbac-implementation",{"title":4673,"path":4674,"stem":4675},"Permission-Based Access Control","\u002Fweb-development\u002Fauthorization-security\u002F03-permission-based-access","18.web-development\u002F13.authorization-security\u002F03-permission-based-access",{"title":4677,"path":4678,"stem":4679},"ABAC та бібліотека CASL","\u002Fweb-development\u002Fauthorization-security\u002F04-abac-casl","18.web-development\u002F13.authorization-security\u002F04-abac-casl",{"title":4681,"path":4682,"stem":4683},"Кастомні декоратори та метадані","\u002Fweb-development\u002Fauthorization-security\u002F05-custom-decorators-metadata","18.web-development\u002F13.authorization-security\u002F05-custom-decorators-metadata",{"title":4685,"path":4686,"stem":4687},"Конфігурація CORS","\u002Fweb-development\u002Fauthorization-security\u002F06-cors-configuration","18.web-development\u002F13.authorization-security\u002F06-cors-configuration",{"title":4689,"path":4690,"stem":4691},"Захист через HTTP Security Headers (Helmet)","\u002Fweb-development\u002Fauthorization-security\u002F07-helmet-security-headers","18.web-development\u002F13.authorization-security\u002F07-helmet-security-headers",{"title":4693,"path":4694,"stem":4695},"Rate Limiting та Throttling","\u002Fweb-development\u002Fauthorization-security\u002F08-rate-limiting-throttling","18.web-development\u002F13.authorization-security\u002F08-rate-limiting-throttling",{"title":4697,"path":4698,"stem":4699},"Захист від поширених атак","\u002Fweb-development\u002Fauthorization-security\u002F09-common-attacks-protection","18.web-development\u002F13.authorization-security\u002F09-common-attacks-protection",{"title":4701,"path":4702,"stem":4703},"HTTPS у продакшені","\u002Fweb-development\u002Fauthorization-security\u002F10-https-production","18.web-development\u002F13.authorization-security\u002F10-https-production",{"title":4705,"icon":871,"path":4706,"stem":4707,"children":4708,"page":59},"Комунікація у реальному часі, нотифікації та фонові задачі","\u002Fweb-development\u002Frealtime-notifications-jobs","18.web-development\u002F14.realtime-notifications-jobs",[4709,4713,4717,4721,4725,4729,4732,4735,4739,4743],{"title":4710,"path":4711,"stem":4712},"Методи комунікації у реальному часі","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F01-realtime-communication-methods","18.web-development\u002F14.realtime-notifications-jobs\u002F01-realtime-communication-methods",{"title":4714,"path":4715,"stem":4716},"WebSocket Gateway у NestJS","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F02-websocket-gateway","18.web-development\u002F14.realtime-notifications-jobs\u002F02-websocket-gateway",{"title":4718,"path":4719,"stem":4720},"Lifecycle та Rooms у WebSocket","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F03-websocket-lifecycle-rooms","18.web-development\u002F14.realtime-notifications-jobs\u002F03-websocket-lifecycle-rooms",{"title":4722,"path":4723,"stem":4724},"Server-Sent Events (SSE)","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F04-server-sent-events","18.web-development\u002F14.realtime-notifications-jobs\u002F04-server-sent-events",{"title":4726,"path":4727,"stem":4728},"Архітектура системи нотифікацій","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F05-notification-system","18.web-development\u002F14.realtime-notifications-jobs\u002F05-notification-system",{"title":904,"path":4730,"stem":4731},"\u002Fweb-development\u002Frealtime-notifications-jobs\u002F06-email-notifications","18.web-development\u002F14.realtime-notifications-jobs\u002F06-email-notifications",{"title":900,"path":4733,"stem":4734},"\u002Fweb-development\u002Frealtime-notifications-jobs\u002F07-web-push-notifications","18.web-development\u002F14.realtime-notifications-jobs\u002F07-web-push-notifications",{"title":4736,"path":4737,"stem":4738},"Фонові задачі та черги","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F08-background-jobs-queues","18.web-development\u002F14.realtime-notifications-jobs\u002F08-background-jobs-queues",{"title":4740,"path":4741,"stem":4742},"Планувальники та Cron jobs","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F09-schedulers-cron","18.web-development\u002F14.realtime-notifications-jobs\u002F09-schedulers-cron",{"title":4744,"path":4745,"stem":4746},"Практичні сценарії застосування","\u002Fweb-development\u002Frealtime-notifications-jobs\u002F10-practical-scenarios","18.web-development\u002F14.realtime-notifications-jobs\u002F10-practical-scenarios",{"title":4748,"icon":4749,"path":4750,"stem":4751,"children":4752,"page":59},"Тестування, документування та розгортання застосунків","i-lucide-rocket","\u002Fweb-development\u002Ftesting-documentation-deployment","18.web-development\u002F15.testing-documentation-deployment",[4753,4757,4761,4765,4769,4773,4777,4781,4785,4789],{"title":4754,"path":4755,"stem":4756},"Піраміда тестування та стратегія","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F01-testing-pyramid-strategy","18.web-development\u002F15.testing-documentation-deployment\u002F01-testing-pyramid-strategy",{"title":4758,"path":4759,"stem":4760},"Основи Jest у NestJS","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F02-jest-nestjs-basics","18.web-development\u002F15.testing-documentation-deployment\u002F02-jest-nestjs-basics",{"title":4762,"path":4763,"stem":4764},"Unit-тестування сервісів","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F03-unit-testing-services","18.web-development\u002F15.testing-documentation-deployment\u002F03-unit-testing-services",{"title":4766,"path":4767,"stem":4768},"E2E тестування та покриття коду","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F04-e2e-testing-coverage","18.web-development\u002F15.testing-documentation-deployment\u002F04-e2e-testing-coverage",{"title":4770,"path":4771,"stem":4772},"Swagger, OpenAPI, Scalar та Arazzo","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F05-swagger-openapi","18.web-development\u002F15.testing-documentation-deployment\u002F05-swagger-openapi",{"title":4774,"path":4775,"stem":4776},"Керування конфігурацією","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F06-configuration-management","18.web-development\u002F15.testing-documentation-deployment\u002F06-configuration-management",{"title":4778,"path":4779,"stem":4780},"Docker та контейнеризація","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F07-docker-containerization","18.web-development\u002F15.testing-documentation-deployment\u002F07-docker-containerization",{"title":4782,"path":4783,"stem":4784},"CI\u002FCD Pipelines","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F08-cicd-pipelines","18.web-development\u002F15.testing-documentation-deployment\u002F08-cicd-pipelines",{"title":4786,"path":4787,"stem":4788},"Логування та моніторинг","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F09-logging-monitoring","18.web-development\u002F15.testing-documentation-deployment\u002F09-logging-monitoring",{"title":4790,"path":4791,"stem":4792},"Серіалізація та компресія","\u002Fweb-development\u002Ftesting-documentation-deployment\u002F10-serialization-compression","18.web-development\u002F15.testing-documentation-deployment\u002F10-serialization-compression",{"title":4794,"icon":4795,"path":4796,"stem":4797,"children":4798,"page":59},"AI Core: мислення AI","i-lucide-brain","\u002Fai-core","19.ai-core",[4799,4840,4889,4927],{"title":4800,"icon":4749,"path":4801,"stem":4802,"children":4803,"page":59},"Вхід у професію AI Native Developer","\u002Fai-core\u002Fai-native-developer","19.ai-core\u002F01.ai-native-developer",[4804,4808,4812,4816,4820,4824,4828,4832,4836],{"title":4805,"path":4806,"stem":4807},"Вступ до професії розробника цифрових продуктів","\u002Fai-core\u002Fai-native-developer\u002Fdigital-products","19.ai-core\u002F01.ai-native-developer\u002F01.digital-products",{"title":4809,"path":4810,"stem":4811},"Професія розробника програмного забезпечення","\u002Fai-core\u002Fai-native-developer\u002Fsoftware-developer","19.ai-core\u002F01.ai-native-developer\u002F02.software-developer",{"title":4813,"path":4814,"stem":4815},"Професія AI Native Developer","\u002Fai-core\u002Fai-native-developer\u002Fai-native-developer","19.ai-core\u002F01.ai-native-developer\u002F03.ai-native-developer",{"title":4817,"path":4818,"stem":4819},"Вплив AI на розробку програмного забезпечення","\u002Fai-core\u002Fai-native-developer\u002Fai-impact-on-development","19.ai-core\u002F01.ai-native-developer\u002F04.ai-impact-on-development",{"title":4821,"path":4822,"stem":4823},"Життєвий цикл цифрового продукту","\u002Fai-core\u002Fai-native-developer\u002Fproduct-lifecycle","19.ai-core\u002F01.ai-native-developer\u002F05.product-lifecycle",{"title":4825,"path":4826,"stem":4827},"Застосування AI на етапах створення цифрового продукту","\u002Fai-core\u002Fai-native-developer\u002Fai-in-product-creation","19.ai-core\u002F01.ai-native-developer\u002F06.ai-in-product-creation",{"title":4829,"path":4830,"stem":4831},"Розподіл завдань між людиною та AI","\u002Fai-core\u002Fai-native-developer\u002Fhuman-vs-ai-tasks","19.ai-core\u002F01.ai-native-developer\u002F07.human-vs-ai-tasks",{"title":4833,"path":4834,"stem":4835},"Компетенції AI Native Developer","\u002Fai-core\u002Fai-native-developer\u002Fcompetencies","19.ai-core\u002F01.ai-native-developer\u002F08.competencies",{"title":4837,"path":4838,"stem":4839},"Карта професійного розвитку AI Native Developer","\u002Fai-core\u002Fai-native-developer\u002Fcareer-roadmap","19.ai-core\u002F01.ai-native-developer\u002F09.career-roadmap",{"title":4841,"icon":255,"path":4842,"stem":4843,"children":4844,"page":59},"Штучний інтелект і машинне навчання","\u002Fai-core\u002Fai-and-machine-learning","19.ai-core\u002F02.ai-and-machine-learning",[4845,4849,4853,4857,4861,4865,4869,4873,4877,4881,4885],{"title":4846,"path":4847,"stem":4848},"Штучний інтелект","\u002Fai-core\u002Fai-and-machine-learning\u002Fwhat-is-ai","19.ai-core\u002F02.ai-and-machine-learning\u002F01.what-is-ai",{"title":4850,"path":4851,"stem":4852},"Відмінність AI від інших програмних систем","\u002Fai-core\u002Fai-and-machine-learning\u002Fai-vs-automation","19.ai-core\u002F02.ai-and-machine-learning\u002F02.ai-vs-automation",{"title":4854,"path":4855,"stem":4856},"Завдання штучного інтелекту","\u002Fai-core\u002Fai-and-machine-learning\u002Fai-tasks","19.ai-core\u002F02.ai-and-machine-learning\u002F03.ai-tasks",{"title":4858,"path":4859,"stem":4860},"Machine Learning","\u002Fai-core\u002Fai-and-machine-learning\u002Fmachine-learning","19.ai-core\u002F02.ai-and-machine-learning\u002F04.machine-learning",{"title":4862,"path":4863,"stem":4864},"Machine Learning Workflow","\u002Fai-core\u002Fai-and-machine-learning\u002Fml-workflow","19.ai-core\u002F02.ai-and-machine-learning\u002F05.ml-workflow",{"title":4866,"path":4867,"stem":4868},"Типи машинного навчання","\u002Fai-core\u002Fai-and-machine-learning\u002Fml-types","19.ai-core\u002F02.ai-and-machine-learning\u002F06.ml-types",{"title":4870,"path":4871,"stem":4872},"Generative AI","\u002Fai-core\u002Fai-and-machine-learning\u002Fgenerative-ai","19.ai-core\u002F02.ai-and-machine-learning\u002F07.generative-ai",{"title":4874,"path":4875,"stem":4876},"Типи контенту, створюваного AI","\u002Fai-core\u002Fai-and-machine-learning\u002Fai-content-types","19.ai-core\u002F02.ai-and-machine-learning\u002F08.ai-content-types",{"title":4878,"path":4879,"stem":4880},"Великі мовні моделі","\u002Fai-core\u002Fai-and-machine-learning\u002Flarge-language-models","19.ai-core\u002F02.ai-and-machine-learning\u002F09.large-language-models",{"title":4882,"path":4883,"stem":4884},"Можливості та обмеження Generative AI","\u002Fai-core\u002Fai-and-machine-learning\u002Fcapabilities-and-limitations","19.ai-core\u002F02.ai-and-machine-learning\u002F10.capabilities-and-limitations",{"title":4886,"path":4887,"stem":4888},"Сучасні AI-асистенти","\u002Fai-core\u002Fai-and-machine-learning\u002Fmodern-ai-assistants","19.ai-core\u002F02.ai-and-machine-learning\u002F11.modern-ai-assistants",{"title":4890,"icon":4891,"path":4892,"stem":4893,"children":4894,"page":59},"Постановка завдань для AI: принципи створення промптів","i-lucide-message-square-text","\u002Fai-core\u002Fprompt-engineering","19.ai-core\u002F03.prompt-engineering",[4895,4899,4903,4907,4911,4915,4919,4923],{"title":4896,"path":4897,"stem":4898},"Промпт як інструмент","\u002Fai-core\u002Fprompt-engineering\u002Fprompt-as-tool","19.ai-core\u002F03.prompt-engineering\u002F01.prompt-as-tool",{"title":4900,"path":4901,"stem":4902},"Принципи створення промптів","\u002Fai-core\u002Fprompt-engineering\u002Fprompt-principles","19.ai-core\u002F03.prompt-engineering\u002F02.prompt-principles",{"title":4904,"path":4905,"stem":4906},"Структура промпта","\u002Fai-core\u002Fprompt-engineering\u002Fprompt-structure","19.ai-core\u002F03.prompt-engineering\u002F03.prompt-structure",{"title":4908,"path":4909,"stem":4910},"Види промптів за типом задачі","\u002Fai-core\u002Fprompt-engineering\u002Fprompt-types","19.ai-core\u002F03.prompt-engineering\u002F04.prompt-types",{"title":4912,"path":4913,"stem":4914},"Прийоми посилення промпта","\u002Fai-core\u002Fprompt-engineering\u002Fprompt-enhancement","19.ai-core\u002F03.prompt-engineering\u002F05.prompt-enhancement",{"title":4916,"path":4917,"stem":4918},"Розбір і покращення промпта","\u002Fai-core\u002Fprompt-engineering\u002Fprompt-analysis","19.ai-core\u002F03.prompt-engineering\u002F06.prompt-analysis",{"title":4920,"path":4921,"stem":4922},"Типові помилки під час створення промптів","\u002Fai-core\u002Fprompt-engineering\u002Fcommon-mistakes","19.ai-core\u002F03.prompt-engineering\u002F07.common-mistakes",{"title":4924,"path":4925,"stem":4926},"Практикум: особиста бібліотека промптів","\u002Fai-core\u002Fprompt-engineering\u002Fprompt-library","19.ai-core\u002F03.prompt-engineering\u002F08.prompt-library",{"title":4928,"icon":793,"path":4929,"stem":4930,"children":4931,"page":59},"Перевірка результатів, безпека та AI Native Workflow","\u002Fai-core\u002Fverification-security-workflow","19.ai-core\u002F04.verification-security-workflow",[4932,4936,4940,4944,4948,4952,4956,4960,4964],{"title":4933,"path":4934,"stem":4935},"Межі можливостей AI","\u002Fai-core\u002Fverification-security-workflow\u002Fai-limitations","19.ai-core\u002F04.verification-security-workflow\u002F01.ai-limitations",{"title":4937,"path":4938,"stem":4939},"Галюцинації AI","\u002Fai-core\u002Fverification-security-workflow\u002Fai-hallucinations","19.ai-core\u002F04.verification-security-workflow\u002F02.ai-hallucinations",{"title":4941,"path":4942,"stem":4943},"Критичне мислення під час роботи з AI","\u002Fai-core\u002Fverification-security-workflow\u002Fcritical-thinking","19.ai-core\u002F04.verification-security-workflow\u002F03.critical-thinking",{"title":4945,"path":4946,"stem":4947},"Перевірка результатів роботи AI","\u002Fai-core\u002Fverification-security-workflow\u002Fresult-verification","19.ai-core\u002F04.verification-security-workflow\u002F04.result-verification",{"title":4949,"path":4950,"stem":4951},"Захист даних під час роботи з AI","\u002Fai-core\u002Fverification-security-workflow\u002Fdata-protection","19.ai-core\u002F04.verification-security-workflow\u002F05.data-protection",{"title":4953,"path":4954,"stem":4955},"Авторське право та навчальна доброчесність","\u002Fai-core\u002Fverification-security-workflow\u002Fcopyright-integrity","19.ai-core\u002F04.verification-security-workflow\u002F06.copyright-integrity",{"title":4957,"path":4958,"stem":4959},"Відповідальне використання AI","\u002Fai-core\u002Fverification-security-workflow\u002Fresponsible-use","19.ai-core\u002F04.verification-security-workflow\u002F07.responsible-use",{"title":4961,"path":4962,"stem":4963},"AI Native Workflow","\u002Fai-core\u002Fverification-security-workflow\u002Fai-native-workflow","19.ai-core\u002F04.verification-security-workflow\u002F08.ai-native-workflow",{"title":4965,"path":4966,"stem":4967},"Застосування AI Native Workflow під час створення цифрового продукту","\u002Fai-core\u002Fverification-security-workflow\u002Fworkflow-in-practice","19.ai-core\u002F04.verification-security-workflow\u002F09.workflow-in-practice",{"title":4969,"icon":4970,"path":4971,"stem":4972,"children":4973,"page":59},"AI Developer: Vibe Coding Sprint","i-lucide-code-xml","\u002Fai-developer","20.ai-developer",[4974,5000,5022,5043],{"title":4975,"icon":4976,"path":4977,"stem":4978,"children":4979,"page":59},"Проєктування і чорнова версія","i-lucide-pencil-ruler","\u002Fai-developer\u002Fdraft-creation","20.ai-developer\u002F01.draft-creation",[4980,4984,4988,4992,4996],{"title":4981,"path":4982,"stem":4983},"Парадигма Vibe Coding Workflow","\u002Fai-developer\u002Fdraft-creation\u002Fvibe-coding-workflow","20.ai-developer\u002F01.draft-creation\u002F01.vibe-coding-workflow",{"title":4985,"path":4986,"stem":4987},"AI-середовище швидкої розробки","\u002Fai-developer\u002Fdraft-creation\u002Fai-ide-environment","20.ai-developer\u002F01.draft-creation\u002F02.ai-ide-environment",{"title":4989,"path":4990,"stem":4991},"Користувацьке завдання та межі першої версії","\u002Fai-developer\u002Fdraft-creation\u002Fproduct-scope-and-mvp","20.ai-developer\u002F01.draft-creation\u002F03.product-scope-and-mvp",{"title":4993,"path":4994,"stem":4995},"Архітектура інтерфейсу та стани застосунку","\u002Fai-developer\u002Fdraft-creation\u002Fapplication-architecture-and-states","20.ai-developer\u002F01.draft-creation\u002F04.application-architecture-and-states",{"title":4997,"path":4998,"stem":4999},"Генерація та фіксація чорнової версії","\u002Fai-developer\u002Fdraft-creation\u002Fgenerating-draft-version","20.ai-developer\u002F01.draft-creation\u002F05.generating-draft-version",{"title":5001,"icon":5002,"path":5003,"stem":5004,"children":5005,"page":59},"Перша робоча версія","i-lucide-play-circle","\u002Fai-developer\u002Ffirst-working-version","20.ai-developer\u002F02.first-working-version",[5006,5010,5014,5018],{"title":5007,"path":5008,"stem":5009},"Уточнення контексту проєкту для AI","\u002Fai-developer\u002Ffirst-working-version\u002Frefining-project-context","20.ai-developer\u002F02.first-working-version\u002F01.refining-project-context",{"title":5011,"path":5012,"stem":5013},"Стратегія завдань для AI-розробки","\u002Fai-developer\u002Ffirst-working-version\u002Fai-prompting-strategy","20.ai-developer\u002F02.first-working-version\u002F02.ai-prompting-strategy",{"title":5015,"path":5016,"stem":5017},"Доопрацювання до першої робочої версії","\u002Fai-developer\u002Ffirst-working-version\u002Frefining-to-working-version","20.ai-developer\u002F02.first-working-version\u002F03.refining-to-working-version",{"title":5019,"path":5020,"stem":5021},"Перевірка першої робочої версії","\u002Fai-developer\u002Ffirst-working-version\u002Ftesting-first-working-version","20.ai-developer\u002F02.first-working-version\u002F04.testing-first-working-version",{"title":5023,"icon":3072,"path":5024,"stem":5025,"children":5026,"page":59},"Ітерації, дебагінг та відновлення","\u002Fai-developer\u002Fiteration-debugging-recovery","20.ai-developer\u002F03.iteration-debugging-recovery",[5027,5031,5035,5039],{"title":5028,"path":5029,"stem":5030},"Управління точковими змінами продукту","\u002Fai-developer\u002Fiteration-debugging-recovery\u002Fchange-management","20.ai-developer\u002F03.iteration-debugging-recovery\u002F01.change-management",{"title":5032,"path":5033,"stem":5034},"Надійність інтерфейсу та обробка помилок","\u002Fai-developer\u002Fiteration-debugging-recovery\u002Fscenario-reliability-and-errors","20.ai-developer\u002F03.iteration-debugging-recovery\u002F02.scenario-reliability-and-errors",{"title":5036,"path":5037,"stem":5038},"Керування контекстом і збереження версій","\u002Fai-developer\u002Fiteration-debugging-recovery\u002Fproject-context-and-versions","20.ai-developer\u002F03.iteration-debugging-recovery\u002F03.project-context-and-versions",{"title":5040,"path":5041,"stem":5042},"Збої AI-розробки, ліміти та аварійне відновлення","\u002Fai-developer\u002Fiteration-debugging-recovery\u002Fai-breakdowns-and-recovery","20.ai-developer\u002F03.iteration-debugging-recovery\u002F04.ai-breakdowns-and-recovery",{"title":5044,"icon":5045,"path":5046,"stem":5047,"children":5048,"page":59},"Перевірка та завершення продукту","i-lucide-check-check","\u002Fai-developer\u002Fverification-and-completion","20.ai-developer\u002F04.verification-and-completion",[5049,5053,5057],{"title":5050,"path":5051,"stem":5052},"Комплексний аудит та підсумкове тестування","\u002Fai-developer\u002Fverification-and-completion\u002Ffinal-product-testing","20.ai-developer\u002F04.verification-and-completion\u002F01.final-product-testing",{"title":5054,"path":5055,"stem":5056},"Підготовка підсумкової версії коду","\u002Fai-developer\u002Fverification-and-completion\u002Fpreparing-release-version","20.ai-developer\u002F04.verification-and-completion\u002F02.preparing-release-version",{"title":5058,"path":5059,"stem":5060},"Демонстрація, публікація та критерії оцінювання","\u002Fai-developer\u002Fverification-and-completion\u002Fproduct-showcase-and-publishing","20.ai-developer\u002F04.verification-and-completion\u002F03.product-showcase-and-publishing",{"title":5062,"path":5063,"stem":5064,"children":5065,"page":59},"Tailwind","\u002Ftailwind","21.tailwind",[5066,5070,5074,5078,5082,5086,5090,5094,5098,5102,5106,5110],{"title":5067,"path":5068,"stem":5069},"Що таке Tailwind CSS і навіщо він потрібен","\u002Ftailwind\u002Ftailwind-intro-philosophy","21.tailwind\u002F01.tailwind-intro-philosophy",{"title":5071,"path":5072,"stem":5073},"Встановлення та налаштування Tailwind CSS v4","\u002Ftailwind\u002Ftailwind-installation-setup","21.tailwind\u002F02.tailwind-installation-setup",{"title":5075,"path":5076,"stem":5077},"Utility-класи: основи та система Tailwind","\u002Ftailwind\u002Ftailwind-utility-classes-core","21.tailwind\u002F03.tailwind-utility-classes-core",{"title":5079,"path":5080,"stem":5081},"Layout: Flexbox та Grid через Tailwind","\u002Ftailwind\u002Ftailwind-flexbox-grid","21.tailwind\u002F04.tailwind-flexbox-grid",{"title":5083,"path":5084,"stem":5085},"Кастомізація теми через @theme у Tailwind v4","\u002Ftailwind\u002Ftailwind-theme-customization","21.tailwind\u002F05.tailwind-theme-customization",{"title":5087,"path":5088,"stem":5089},"Варіанти: hover, focus, responsive, dark mode та нові v4","\u002Ftailwind\u002Ftailwind-variants-states","21.tailwind\u002F06.tailwind-variants-states",{"title":5091,"path":5092,"stem":5093},"Типографіка та система кольорів у Tailwind v4","\u002Ftailwind\u002Ftailwind-typography-colors","21.tailwind\u002F07.tailwind-typography-colors",{"title":5095,"path":5096,"stem":5097},"Компоненти та повторюваність: @apply, @utility та патерни","\u002Ftailwind\u002Ftailwind-components-patterns","21.tailwind\u002F08.tailwind-components-patterns",{"title":5099,"path":5100,"stem":5101},"Темна тема та система дизайн-токенів у Tailwind v4","\u002Ftailwind\u002Ftailwind-dark-mode-theming","21.tailwind\u002F09.tailwind-dark-mode-theming",{"title":5103,"path":5104,"stem":5105},"Довільні значення та контейнерні запити у Tailwind v4","\u002Ftailwind\u002Ftailwind-arbitrary-container-queries","21.tailwind\u002F10.tailwind-arbitrary-container-queries",{"title":5107,"path":5108,"stem":5109},"Анімації, трансформації та 3D у Tailwind v4","\u002Ftailwind\u002Ftailwind-animations-transforms","21.tailwind\u002F11.tailwind-animations-transforms",{"title":5111,"path":5112,"stem":5113},"Tailwind CLI, PostCSS та інтеграція з фреймворками","\u002Ftailwind\u002Ftailwind-cli-tooling","21.tailwind\u002F12.tailwind-cli-tooling",{"title":5115,"path":5116,"stem":5117,"children":5118,"page":59},"React Typescript","\u002Freact-typescript","22.react-typescript",[5119,5144,5148,5152,5156,5160,5164,5168,5172],{"title":5120,"path":5121,"stem":5122,"children":5123,"page":59},"From Html To Project","\u002Freact-typescript\u002Ffrom-html-to-project","22.react-typescript\u002F01.from-html-to-project",[5124,5128,5132,5136,5140],{"title":5125,"path":5126,"stem":5127},"Від одного HTML-файлу до повноцінного проєкту","\u002Freact-typescript\u002Ffrom-html-to-project\u002Fevolution","22.react-typescript\u002F01.from-html-to-project\u002F01.evolution",{"title":5129,"path":5130,"stem":5131},"Що таке React","\u002Freact-typescript\u002Ffrom-html-to-project\u002Fwhat-is-react","22.react-typescript\u002F01.from-html-to-project\u002F02.what-is-react",{"title":5133,"path":5134,"stem":5135},"JSX та TSX — синтаксичний цукор, а не магія","\u002Freact-typescript\u002Ffrom-html-to-project\u002Fjsx-tsx-syntax","22.react-typescript\u002F01.from-html-to-project\u002F03.jsx-tsx-syntax",{"title":5137,"path":5138,"stem":5139},"Компоненти — будівельні блоки інтерфейсу","\u002Freact-typescript\u002Ffrom-html-to-project\u002Fcomponents","22.react-typescript\u002F01.from-html-to-project\u002F04.components",{"title":5141,"path":5142,"stem":5143},"JSX — розмітка всередині TypeScript","\u002Freact-typescript\u002Ffrom-html-to-project\u002Fjsx-expressions","22.react-typescript\u002F01.from-html-to-project\u002F05.jsx-expressions",{"title":5145,"path":5146,"stem":5147},"Хук useReducer: структуроване управління складним станом","\u002Freact-typescript\u002Fuse-reducer","22.react-typescript\u002F23.use-reducer",{"title":5149,"path":5150,"stem":5151},"Context API: передавання даних без «пропс-дрілінгу»","\u002Freact-typescript\u002Fcontext-api","22.react-typescript\u002F24.context-api",{"title":5153,"path":5154,"stem":5155},"Синхронізація з ефектами: хук useEffect та функції очищення","\u002Freact-typescript\u002Fuse-effect","22.react-typescript\u002F27.use-effect",{"title":5157,"path":5158,"stem":5159},"Можливо, вам не потрібен ефект: антипатерни та альтернативи","\u002Freact-typescript\u002Fyou-might-not-need-effect","22.react-typescript\u002F28.you-might-not-need-effect",{"title":5161,"path":5162,"stem":5163},"Життєвий цикл реактивних ефектів: мислення процесами синхронізації","\u002Freact-typescript\u002Flifecycle-of-reactive-effects","22.react-typescript\u002F29.lifecycle-of-reactive-effects",{"title":5165,"path":5166,"stem":5167},"Розділення подій та ефектів: реактивна проти нереактивної логіки","\u002Freact-typescript\u002Fseparating-events-from-effects","22.react-typescript\u002F30.separating-events-from-effects",{"title":5169,"path":5170,"stem":5171},"Видалення зайвих залежностей ефектів та оптимізація синхронізації","\u002Freact-typescript\u002Fremoving-effect-dependencies","22.react-typescript\u002F31.removing-effect-dependencies",{"title":5173,"path":5174,"stem":5175},"Кастомні хуки: повторне використання та композиція реактивної логіки","\u002Freact-typescript\u002Fcustom-hooks","22.react-typescript\u002F32.custom-hooks",{"title":5177,"path":5178,"stem":5179},"Тестування компонентів діаграм та пісочниць","\u002Ftest-components","98.test-components",{"id":5181,"title":3879,"body":5182,"description":16938,"extension":16939,"links":16940,"meta":16941,"navigation":5598,"path":3880,"seo":16942,"stem":3881,"__hash__":16943},"docs\u002F16.ai-python\u002F11.logistic-regression-classification\u002F01.classification-basics.md",{"type":5183,"value":5184,"toc":16868},"minimark",[5185,5189,5252,5255,5260,5267,5274,5288,5300,5311,5313,5317,5330,5335,5421,5436,5438,5442,5445,5454,5458,5468,5471,5509,5514,5528,5699,5703,5710,5717,5721,5735,6121,6125,6133,6140,6144,6167,6282,6300,6302,6306,6312,6319,6323,6445,6466,6470,6475,6478,6489,6494,6497,6504,6536,6538,6542,6553,6559,6566,6577,6890,6908,6912,6919,6926,6950,6956,6960,6971,7006,7008,7012,7023,7033,7037,7040,7047,7050,7056,7063,7066,7080,7296,7298,7302,7312,7316,7319,7322,7341,7345,7352,7405,7420,7848,7850,7854,7863,7873,7876,7882,7886,8304,8314,8316,8320,8323,8327,8359,8363,8383,8393,8395,8399,8448,8450,8454,8464,8471,8474,8480,8483,8490,8493,8521,8525,8528,9394,9398,9442,9448,9450,9454,9464,9468,9479,9808,10113,10131,10138,10142,10152,10472,10481,10488,10490,10494,10501,10508,10512,10515,11022,11026,11033,11141,11554,11573,11575,11579,11590,11605,11609,11615,11660,11664,12209,12236,12238,12242,12249,12253,12270,12277,12869,12873,12884,12887,12896,13243,13264,13266,13270,13308,13310,13314,13317,13321,13324,13423,14233,14239,14243,14638,14672,14676,14891,14897,14899,14903,14906,14910,15041,15077,15079,15083,15388,15390,15394,15713,15715,15719,16775,16777,16781,16852,16854,16864],[5186,5187,3879],"h1",{"id":5188},"основи-класифікації-та-логістична-регресія",[5190,5191,5192,5216],"card-group",{},[5193,5194,5197],"card",{"icon":5195,"title":5196},"i-lucide-target","🎯 Мета підрозділу",[5198,5199,5200,5204,5207,5210,5213],"ul",{},[5201,5202,5203],"li",{},"Зрозуміти різницю між регресією та класифікацією",[5201,5205,5206],{},"Опанувати поняття бінарної та багатокласової класифікації",[5201,5208,5209],{},"Познайомитися з логістичною регресією та сигмоїдною функцією",[5201,5211,5212],{},"Навчитися інтерпретувати ймовірнісні прогнози",[5201,5214,5215],{},"Зрозуміти поняття порогу прийняття рішень",[5193,5217,5219],{"icon":4618,"title":5218},"🔑 Ключові терміни",[5198,5220,5221,5228,5234,5240,5246],{},[5201,5222,5223,5227],{},[5224,5225,5226],"strong",{},"Класифікація (classification)"," — передбачення категорії або класу об'єкта",[5201,5229,5230,5233],{},[5224,5231,5232],{},"Бінарна класифікація (binary classification)"," — задача з двома класами",[5201,5235,5236,5239],{},[5224,5237,5238],{},"Логістична регресія (logistic regression)"," — алгоритм для класифікації",[5201,5241,5242,5245],{},[5224,5243,5244],{},"Сигмоїдна функція (sigmoid)"," — перетворює число у ймовірність від 0 до 1",[5201,5247,5248,5251],{},[5224,5249,5250],{},"Поріг рішення (decision threshold)"," — межа, за якою відбувається класифікація",[5253,5254],"hr",{},[5256,5257,5259],"h2",{"id":5258},"історія-про-лікаря-який-діагностує-хвороби","Історія про лікаря, який діагностує хвороби",[5261,5262,5263,5264],"p",{},"Доктор Петренко працює в клініці і щодня приймає пацієнтів з підозрою на серцево-судинні захворювання. Після аналізів (рівень холестерину, тиск, вік, вага) він має прийняти важливе рішення: ",[5224,5265,5266],{},"чи є у пацієнта підвищений ризик хвороби серця?",[5261,5268,5269,5270,5273],{},"На відміну від завдання передбачення точної ціни квартири (де результат — будь-яке число), тут результат може бути лише ",[5224,5271,5272],{},"одним із двох варіантів",":",[5198,5275,5276,5282],{},[5201,5277,5278,5281],{},[5224,5279,5280],{},"Клас 0:"," здоровий пацієнт (низький ризик)",[5201,5283,5284,5287],{},[5224,5285,5286],{},"Клас 1:"," пацієнт з підвищеним ризиком (потрібне подальше обстеження)",[5261,5289,5290,5291,5294,5295,5299],{},"Це класична ",[5224,5292,5293],{},"задача бінарної класифікації"," (",[5296,5297,5298],"em",{},"binary classification","). Доктор не оцінює «наскільки хворий» пацієнт числом від 0 до 100 — він приймає дискретне рішення: направляти на додаткові обстеження чи ні.",[5301,5302,5303,5306,5307,5310],"note",{},[5224,5304,5305],{},"Ключова відмінність від регресії:"," результат класифікації — це ",[5224,5308,5309],{},"категорія"," (клас), а не неперервне число. Навіть якщо алгоритм внутрішньо обчислює ймовірність (наприклад, 0.73), фінальне рішення — дискретне: клас 0 або клас 1.",[5253,5312],{},[5256,5314,5316],{"id":5315},"що-таке-задача-класифікації","Що таке задача класифікації?",[5261,5318,5319,5321,5322,5325,5326,5329],{},[5224,5320,5226],{}," — це тип завдання машинного навчання з учителем (",[5296,5323,5324],{},"supervised learning","), де потрібно віднести об'єкт до одного з ",[5224,5327,5328],{},"фіксованих дискретних класів"," на основі його ознак.",[5331,5332,5334],"h3",{"id":5333},"приклади-класифікаційних-задач","Приклади класифікаційних задач",[5336,5337,5338,5354],"table",{},[5339,5340,5341],"thead",{},[5342,5343,5344,5348,5351],"tr",{},[5345,5346,5347],"th",{},"Вхідні ознаки",[5345,5349,5350],{},"Цільова змінна (що передбачаємо)",[5345,5352,5353],{},"Кількість класів",[5355,5356,5357,5369,5379,5390,5401,5411],"tbody",{},[5342,5358,5359,5363,5366],{},[5360,5361,5362],"td",{},"Текст листа, відправник, заголовок",[5360,5364,5365],{},"Спам \u002F не спам",[5360,5367,5368],{},"2 (бінарна)",[5342,5370,5371,5374,5377],{},[5360,5372,5373],{},"Симптоми, результати аналізів",[5360,5375,5376],{},"Здоровий \u002F хворий",[5360,5378,5368],{},[5342,5380,5381,5384,5387],{},[5360,5382,5383],{},"Фотографія руки з цифрою",[5360,5385,5386],{},"Цифра від 0 до 9",[5360,5388,5389],{},"10 (багатокласова)",[5342,5391,5392,5395,5398],{},[5360,5393,5394],{},"Характеристики квітки (довжина пелюсток)",[5360,5396,5397],{},"Вид квітки (Setosa \u002F Versicolor \u002F Virginica)",[5360,5399,5400],{},"3 (багатокласова)",[5342,5402,5403,5406,5409],{},[5360,5404,5405],{},"Характеристики транзакції (сума, час, місце)",[5360,5407,5408],{},"Шахрайство \u002F легальна операція",[5360,5410,5368],{},[5342,5412,5413,5416,5419],{},[5360,5414,5415],{},"Зображення тварини",[5360,5417,5418],{},"Кіт \u002F собака \u002F пташка",[5360,5420,5400],{},[5422,5423,5424,5427,5428,5431,5432,5435],"tip",{},[5224,5425,5426],{},"Як розпізнати класифікацію:"," якщо вас просять передбачити ",[5224,5429,5430],{},"назву"," або ",[5224,5433,5434],{},"категорію"," (а не число), це класифікація. Класи завжди дискретні та взаємовиключні — об'єкт не може одночасно належати до кількох класів (у стандартній постановці).",[5253,5437],{},[5256,5439,5441],{"id":5440},"типи-класифікації","Типи класифікації",[5261,5443,5444],{},"У машинному навчанні розрізняють кілька фундаментальних типів класифікаційних задач залежно від кількості класів та їхньої структури.",[5261,5446,5447],{},[5448,5449],"img",{"alt":5450,"className":5451,"src":5453},"Типи класифікації: бінарна, багатокласова та мультилейбл",[5452],"diagram-img","\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F01-types-of-classification.png",[5331,5455,5457],{"id":5456},"_1-бінарна-класифікація-binary-classification","1. Бінарна класифікація (Binary Classification)",[5261,5459,5460,5463,5464,5467],{},[5224,5461,5462],{},"Визначення:"," задача, де об'єкт належить до одного з ",[5224,5465,5466],{},"двох класів",".",[5261,5469,5470],{},"Зазвичай класи позначають як:",[5198,5472,5473,5483,5500],{},[5201,5474,5475,5478,5479,5482],{},[5224,5476,5477],{},"0"," та ",[5224,5480,5481],{},"1"," (у програмуванні та математиці)",[5201,5484,5485,5478,5488,5491,5492,5495,5496,5499],{},[5224,5486,5487],{},"негативний",[5224,5489,5490],{},"позитивний"," клас (",[5296,5493,5494],{},"negative"," \u002F ",[5296,5497,5498],{},"positive",")",[5201,5501,5502,5478,5505,5508],{},[5224,5503,5504],{},"False",[5224,5506,5507],{},"True"," (у логічних задачах)",[5261,5510,5511],{},[5224,5512,5513],{},"Приклади:",[5198,5515,5516,5519,5522,5525],{},[5201,5517,5518],{},"Медична діагностика: хворий (1) \u002F здоровий (0)",[5201,5520,5521],{},"Фінанси: дефолт (1) \u002F виплата (0)",[5201,5523,5524],{},"Email: спам (1) \u002F не спам (0)",[5201,5526,5527],{},"Кредитний скоринг: схвалити заявку (1) \u002F відхилити (0)",[5529,5530,5531,5618],"code-group",{},[5532,5533,5539],"pre",{"className":5534,"code":5535,"filename":5536,"language":5537,"meta":5538,"style":5538},"language-python shiki shiki-themes light-plus dark-plus dark-plus","# Датасет з двома класами\ny_train = np.array([0, 1, 0, 0, 1, 1, 0, 1])\n\n# Прогноз моделі\ny_pred = model.predict(X_test)\n# Результат: [1, 0, 0, 1, 1] — лише 0 або 1\n","Бінарна класифікація","python","",[5540,5541,5542,5551,5593,5600,5606,5612],"code",{"__ignoreMap":5538},[5543,5544,5547],"span",{"class":5545,"line":5546},"line",1,[5543,5548,5550],{"class":5549},"spJ8K","# Датасет з двома класами\n",[5543,5552,5554,5558,5561,5564,5566,5568,5570,5572,5574,5576,5578,5580,5582,5584,5586,5588,5590],{"class":5545,"line":5553},2,[5543,5555,5557],{"class":5556},"sHH4Y","y_train = np.array([",[5543,5559,5477],{"class":5560},"sJj4R",[5543,5562,5563],{"class":5556},", ",[5543,5565,5481],{"class":5560},[5543,5567,5563],{"class":5556},[5543,5569,5477],{"class":5560},[5543,5571,5563],{"class":5556},[5543,5573,5477],{"class":5560},[5543,5575,5563],{"class":5556},[5543,5577,5481],{"class":5560},[5543,5579,5563],{"class":5556},[5543,5581,5481],{"class":5560},[5543,5583,5563],{"class":5556},[5543,5585,5477],{"class":5560},[5543,5587,5563],{"class":5556},[5543,5589,5481],{"class":5560},[5543,5591,5592],{"class":5556},"])\n",[5543,5594,5596],{"class":5545,"line":5595},3,[5543,5597,5599],{"emptyLinePlaceholder":5598},true,"\n",[5543,5601,5603],{"class":5545,"line":5602},4,[5543,5604,5605],{"class":5549},"# Прогноз моделі\n",[5543,5607,5609],{"class":5545,"line":5608},5,[5543,5610,5611],{"class":5556},"y_pred = model.predict(X_test)\n",[5543,5613,5615],{"class":5545,"line":5614},6,[5543,5616,5617],{"class":5549},"# Результат: [1, 0, 0, 1, 1] — лише 0 або 1\n",[5532,5619,5622],{"className":5534,"code":5620,"filename":5621,"language":5537,"meta":5538,"style":5538},"# Той самий датасет з текстовими мітками\ny_train = [\"здоровий\", \"хворий\", \"здоровий\", \"здоровий\", \"хворий\"]\n\n# Кодування у числа\nfrom sklearn.preprocessing import LabelEncoder\nencoder = LabelEncoder()\ny_encoded = encoder.fit_transform(y_train)\n# Результат: [0, 1, 0, 0, 1]\n","Приклад з назвами",[5540,5623,5624,5629,5658,5662,5667,5682,5687,5693],{"__ignoreMap":5538},[5543,5625,5626],{"class":5545,"line":5546},[5543,5627,5628],{"class":5549},"# Той самий датасет з текстовими мітками\n",[5543,5630,5631,5634,5638,5640,5643,5645,5647,5649,5651,5653,5655],{"class":5545,"line":5553},[5543,5632,5633],{"class":5556},"y_train = [",[5543,5635,5637],{"class":5636},"sbdoH","\"здоровий\"",[5543,5639,5563],{"class":5556},[5543,5641,5642],{"class":5636},"\"хворий\"",[5543,5644,5563],{"class":5556},[5543,5646,5637],{"class":5636},[5543,5648,5563],{"class":5556},[5543,5650,5637],{"class":5636},[5543,5652,5563],{"class":5556},[5543,5654,5642],{"class":5636},[5543,5656,5657],{"class":5556},"]\n",[5543,5659,5660],{"class":5545,"line":5595},[5543,5661,5599],{"emptyLinePlaceholder":5598},[5543,5663,5664],{"class":5545,"line":5602},[5543,5665,5666],{"class":5549},"# Кодування у числа\n",[5543,5668,5669,5673,5676,5679],{"class":5545,"line":5608},[5543,5670,5672],{"class":5671},"s8xlr","from",[5543,5674,5675],{"class":5556}," sklearn.preprocessing ",[5543,5677,5678],{"class":5671},"import",[5543,5680,5681],{"class":5556}," LabelEncoder\n",[5543,5683,5684],{"class":5545,"line":5614},[5543,5685,5686],{"class":5556},"encoder = LabelEncoder()\n",[5543,5688,5690],{"class":5545,"line":5689},7,[5543,5691,5692],{"class":5556},"y_encoded = encoder.fit_transform(y_train)\n",[5543,5694,5696],{"class":5545,"line":5695},8,[5543,5697,5698],{"class":5549},"# Результат: [0, 1, 0, 0, 1]\n",[5331,5700,5702],{"id":5701},"_2-багатокласова-класифікація-multiclass-classification","2. Багатокласова класифікація (Multiclass Classification)",[5261,5704,5705,5463,5707,5467],{},[5224,5706,5462],{},[5224,5708,5709],{},"трьох або більше класів",[5261,5711,5712,5713,5716],{},"Кожен об'єкт має ",[5224,5714,5715],{},"один і тільки один"," клас. Класи взаємовиключні.",[5261,5718,5719],{},[5224,5720,5513],{},[5198,5722,5723,5726,5729,5732],{},[5201,5724,5725],{},"Розпізнавання рукописних цифр: 0, 1, 2, ..., 9 (10 класів)",[5201,5727,5728],{},"Класифікація квітів Iris: Setosa, Versicolor, Virginica (3 класи)",[5201,5730,5731],{},"Розпізнавання емоцій на фото: радість, сум, гнів, подив, страх (5 класів)",[5201,5733,5734],{},"Класифікація жанрів фільмів: драма, комедія, бойовик, фантастика",[5736,5737,5739,6103],"jupyter-notebook",{"title":5738,"execution-count":5481},"multiclass_example.ipynb",[5532,5740,5742],{"className":5534,"code":5741,"language":5537,"meta":5538,"style":5538},"from sklearn.datasets import load_iris\nfrom sklearn.linear_model import LogisticRegression\n\n# Завантаження датасету Iris (3 класи)\niris = load_iris()\nX, y = iris.data, iris.target\n\nprint(f\"Кількість класів: {len(np.unique(y))}\")\nprint(f\"Класи: {iris.target_names}\")\n\nimport matplotlib.pyplot as plt\n\ncolors = ['#ef4444', '#3b82f6', '#10b981']\n\nplt.figure(figsize=(9, 6))\nfor k, name in enumerate(iris.target_names):\n    plt.scatter(X[y == k, 2], X[y == k, 3], c=colors[k], s=60,\n                alpha=0.8, edgecolor='white', label=name)\nplt.xlabel('Довжина пелюстки (см)', fontsize=12)\nplt.ylabel('Ширина пелюстки (см)', fontsize=12)\nplt.title('Iris: три класи у просторі ознак пелюстки', fontsize=14)\nplt.legend(title='Клас')\nplt.grid(alpha=0.3)\nplt.show()\n",[5540,5743,5744,5756,5768,5772,5777,5782,5787,5791,5825,5848,5853,5867,5872,5893,5898,5922,5940,5976,6005,6026,6045,6065,6081,6097],{"__ignoreMap":5538},[5543,5745,5746,5748,5751,5753],{"class":5545,"line":5546},[5543,5747,5672],{"class":5671},[5543,5749,5750],{"class":5556}," sklearn.datasets ",[5543,5752,5678],{"class":5671},[5543,5754,5755],{"class":5556}," load_iris\n",[5543,5757,5758,5760,5763,5765],{"class":5545,"line":5553},[5543,5759,5672],{"class":5671},[5543,5761,5762],{"class":5556}," sklearn.linear_model ",[5543,5764,5678],{"class":5671},[5543,5766,5767],{"class":5556}," LogisticRegression\n",[5543,5769,5770],{"class":5545,"line":5595},[5543,5771,5599],{"emptyLinePlaceholder":5598},[5543,5773,5774],{"class":5545,"line":5602},[5543,5775,5776],{"class":5549},"# Завантаження датасету Iris (3 класи)\n",[5543,5778,5779],{"class":5545,"line":5608},[5543,5780,5781],{"class":5556},"iris = load_iris()\n",[5543,5783,5784],{"class":5545,"line":5614},[5543,5785,5786],{"class":5556},"X, y = iris.data, iris.target\n",[5543,5788,5789],{"class":5545,"line":5689},[5543,5790,5599],{"emptyLinePlaceholder":5598},[5543,5792,5793,5797,5800,5804,5807,5810,5813,5816,5819,5822],{"class":5545,"line":5695},[5543,5794,5796],{"class":5795},"s8Opu","print",[5543,5798,5799],{"class":5556},"(",[5543,5801,5803],{"class":5802},"su1O8","f",[5543,5805,5806],{"class":5636},"\"Кількість класів: ",[5543,5808,5809],{"class":5802},"{",[5543,5811,5812],{"class":5795},"len",[5543,5814,5815],{"class":5556},"(np.unique(y))",[5543,5817,5818],{"class":5802},"}",[5543,5820,5821],{"class":5636},"\"",[5543,5823,5824],{"class":5556},")\n",[5543,5826,5828,5830,5832,5834,5837,5839,5842,5844,5846],{"class":5545,"line":5827},9,[5543,5829,5796],{"class":5795},[5543,5831,5799],{"class":5556},[5543,5833,5803],{"class":5802},[5543,5835,5836],{"class":5636},"\"Класи: ",[5543,5838,5809],{"class":5802},[5543,5840,5841],{"class":5556},"iris.target_names",[5543,5843,5818],{"class":5802},[5543,5845,5821],{"class":5636},[5543,5847,5824],{"class":5556},[5543,5849,5851],{"class":5545,"line":5850},10,[5543,5852,5599],{"emptyLinePlaceholder":5598},[5543,5854,5856,5858,5861,5864],{"class":5545,"line":5855},11,[5543,5857,5678],{"class":5671},[5543,5859,5860],{"class":5556}," matplotlib.pyplot ",[5543,5862,5863],{"class":5671},"as",[5543,5865,5866],{"class":5556}," plt\n",[5543,5868,5870],{"class":5545,"line":5869},12,[5543,5871,5599],{"emptyLinePlaceholder":5598},[5543,5873,5875,5878,5881,5883,5886,5888,5891],{"class":5545,"line":5874},13,[5543,5876,5877],{"class":5556},"colors = [",[5543,5879,5880],{"class":5636},"'#ef4444'",[5543,5882,5563],{"class":5556},[5543,5884,5885],{"class":5636},"'#3b82f6'",[5543,5887,5563],{"class":5556},[5543,5889,5890],{"class":5636},"'#10b981'",[5543,5892,5657],{"class":5556},[5543,5894,5896],{"class":5545,"line":5895},14,[5543,5897,5599],{"emptyLinePlaceholder":5598},[5543,5899,5901,5904,5908,5911,5914,5916,5919],{"class":5545,"line":5900},15,[5543,5902,5903],{"class":5556},"plt.figure(",[5543,5905,5907],{"class":5906},"siwwj","figsize",[5543,5909,5910],{"class":5556},"=(",[5543,5912,5913],{"class":5560},"9",[5543,5915,5563],{"class":5556},[5543,5917,5918],{"class":5560},"6",[5543,5920,5921],{"class":5556},"))\n",[5543,5923,5925,5928,5931,5934,5937],{"class":5545,"line":5924},16,[5543,5926,5927],{"class":5671},"for",[5543,5929,5930],{"class":5556}," k, name ",[5543,5932,5933],{"class":5671},"in",[5543,5935,5936],{"class":5795}," enumerate",[5543,5938,5939],{"class":5556},"(iris.target_names):\n",[5543,5941,5943,5946,5949,5952,5955,5958,5961,5964,5967,5970,5973],{"class":5545,"line":5942},17,[5543,5944,5945],{"class":5556},"    plt.scatter(X[y == k, ",[5543,5947,5948],{"class":5560},"2",[5543,5950,5951],{"class":5556},"], X[y == k, ",[5543,5953,5954],{"class":5560},"3",[5543,5956,5957],{"class":5556},"], ",[5543,5959,5960],{"class":5906},"c",[5543,5962,5963],{"class":5556},"=colors[k], ",[5543,5965,5966],{"class":5906},"s",[5543,5968,5969],{"class":5556},"=",[5543,5971,5972],{"class":5560},"60",[5543,5974,5975],{"class":5556},",\n",[5543,5977,5979,5982,5984,5987,5989,5992,5994,5997,5999,6002],{"class":5545,"line":5978},18,[5543,5980,5981],{"class":5906},"                alpha",[5543,5983,5969],{"class":5556},[5543,5985,5986],{"class":5560},"0.8",[5543,5988,5563],{"class":5556},[5543,5990,5991],{"class":5906},"edgecolor",[5543,5993,5969],{"class":5556},[5543,5995,5996],{"class":5636},"'white'",[5543,5998,5563],{"class":5556},[5543,6000,6001],{"class":5906},"label",[5543,6003,6004],{"class":5556},"=name)\n",[5543,6006,6008,6011,6014,6016,6019,6021,6024],{"class":5545,"line":6007},19,[5543,6009,6010],{"class":5556},"plt.xlabel(",[5543,6012,6013],{"class":5636},"'Довжина пелюстки (см)'",[5543,6015,5563],{"class":5556},[5543,6017,6018],{"class":5906},"fontsize",[5543,6020,5969],{"class":5556},[5543,6022,6023],{"class":5560},"12",[5543,6025,5824],{"class":5556},[5543,6027,6029,6032,6035,6037,6039,6041,6043],{"class":5545,"line":6028},20,[5543,6030,6031],{"class":5556},"plt.ylabel(",[5543,6033,6034],{"class":5636},"'Ширина пелюстки (см)'",[5543,6036,5563],{"class":5556},[5543,6038,6018],{"class":5906},[5543,6040,5969],{"class":5556},[5543,6042,6023],{"class":5560},[5543,6044,5824],{"class":5556},[5543,6046,6048,6051,6054,6056,6058,6060,6063],{"class":5545,"line":6047},21,[5543,6049,6050],{"class":5556},"plt.title(",[5543,6052,6053],{"class":5636},"'Iris: три класи у просторі ознак пелюстки'",[5543,6055,5563],{"class":5556},[5543,6057,6018],{"class":5906},[5543,6059,5969],{"class":5556},[5543,6061,6062],{"class":5560},"14",[5543,6064,5824],{"class":5556},[5543,6066,6068,6071,6074,6076,6079],{"class":5545,"line":6067},22,[5543,6069,6070],{"class":5556},"plt.legend(",[5543,6072,6073],{"class":5906},"title",[5543,6075,5969],{"class":5556},[5543,6077,6078],{"class":5636},"'Клас'",[5543,6080,5824],{"class":5556},[5543,6082,6084,6087,6090,6092,6095],{"class":5545,"line":6083},23,[5543,6085,6086],{"class":5556},"plt.grid(",[5543,6088,6089],{"class":5906},"alpha",[5543,6091,5969],{"class":5556},[5543,6093,6094],{"class":5560},"0.3",[5543,6096,5824],{"class":5556},[5543,6098,6100],{"class":5545,"line":6099},24,[5543,6101,6102],{"class":5556},"plt.show()\n",[6104,6105,6106,6113],"template",{"v-slot:output":5538},[5261,6107,6108],{},[5448,6109],{"alt":6110,"className":6111,"src":6112},"Три класи квітів Iris у просторі ознак пелюстки",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F09-iris-classes.png",[5532,6114,6119],{"className":6115,"code":6117,"language":6118},[6116],"language-text","Кількість класів: 3\nКласи: ['setosa' 'versicolor' 'virginica']\n","text",[5540,6120,6117],{"__ignoreMap":5538},[5331,6122,6124],{"id":6123},"_3-мультилейбл-класифікація-multilabel-classification","3. Мультилейбл класифікація (Multilabel Classification)",[5261,6126,6127,6129,6130,5467],{},[5224,6128,5462],{}," задача, де об'єкт може ",[5224,6131,6132],{},"одночасно належати до кількох класів",[5261,6134,6135,6136,6139],{},"На відміну від багатокласової класифікації, тут класи ",[5224,6137,6138],{},"не взаємовиключні"," — об'єкт може мати кілька міток одночасно.",[5261,6141,6142],{},[5224,6143,5513],{},[5198,6145,6146,6152,6158,6161],{},[5201,6147,6148,6149],{},"Теги для статті: ",[5543,6150,6151],{},"\"Python\", \"Machine Learning\", \"Tutorial\"",[5201,6153,6154,6155],{},"Класифікація фільму за жанрами: ",[5543,6156,6157],{},"\"Action\", \"Sci-Fi\", \"Thriller\"",[5201,6159,6160],{},"Медична діагностика з кількома хворобами одночасно",[5201,6162,6163,6164],{},"Розпізнавання об'єктів на фото: ",[5543,6165,6166],{},"\"людина\", \"автомобіль\", \"будинок\"",[5529,6168,6169,6210],{},[5532,6170,6173],{"className":5534,"code":6171,"filename":6172,"language":5537,"meta":5538,"style":5538},"# Один клас на об'єкт\ny = [2, 0, 1, 2, 1]\n# Об'єкт належить ТІЛЬКИ до класу 2 АБО 0 АБО 1\n","Багатокласова",[5540,6174,6175,6180,6205],{"__ignoreMap":5538},[5543,6176,6177],{"class":5545,"line":5546},[5543,6178,6179],{"class":5549},"# Один клас на об'єкт\n",[5543,6181,6182,6185,6187,6189,6191,6193,6195,6197,6199,6201,6203],{"class":5545,"line":5553},[5543,6183,6184],{"class":5556},"y = [",[5543,6186,5948],{"class":5560},[5543,6188,5563],{"class":5556},[5543,6190,5477],{"class":5560},[5543,6192,5563],{"class":5556},[5543,6194,5481],{"class":5560},[5543,6196,5563],{"class":5556},[5543,6198,5948],{"class":5560},[5543,6200,5563],{"class":5556},[5543,6202,5481],{"class":5560},[5543,6204,5657],{"class":5556},[5543,6206,6207],{"class":5545,"line":5595},[5543,6208,6209],{"class":5549},"# Об'єкт належить ТІЛЬКИ до класу 2 АБО 0 АБО 1\n",[5532,6211,6214],{"className":5534,"code":6212,"filename":6213,"language":5537,"meta":5538,"style":5538},"# Кілька класів на об'єкт\ny = [[1, 0, 1],    # Класи 0 та 2\n     [0, 1, 0],    # Тільки клас 1\n     [1, 1, 1]]    # Усі три класи одночасно\n","Мультилейбл",[5540,6215,6216,6221,6242,6262],{"__ignoreMap":5538},[5543,6217,6218],{"class":5545,"line":5546},[5543,6219,6220],{"class":5549},"# Кілька класів на об'єкт\n",[5543,6222,6223,6226,6228,6230,6232,6234,6236,6239],{"class":5545,"line":5553},[5543,6224,6225],{"class":5556},"y = [[",[5543,6227,5481],{"class":5560},[5543,6229,5563],{"class":5556},[5543,6231,5477],{"class":5560},[5543,6233,5563],{"class":5556},[5543,6235,5481],{"class":5560},[5543,6237,6238],{"class":5556},"],    ",[5543,6240,6241],{"class":5549},"# Класи 0 та 2\n",[5543,6243,6244,6247,6249,6251,6253,6255,6257,6259],{"class":5545,"line":5595},[5543,6245,6246],{"class":5556},"     [",[5543,6248,5477],{"class":5560},[5543,6250,5563],{"class":5556},[5543,6252,5481],{"class":5560},[5543,6254,5563],{"class":5556},[5543,6256,5477],{"class":5560},[5543,6258,6238],{"class":5556},[5543,6260,6261],{"class":5549},"# Тільки клас 1\n",[5543,6263,6264,6266,6268,6270,6272,6274,6276,6279],{"class":5545,"line":5602},[5543,6265,6246],{"class":5556},[5543,6267,5481],{"class":5560},[5543,6269,5563],{"class":5556},[5543,6271,5481],{"class":5560},[5543,6273,5563],{"class":5556},[5543,6275,5481],{"class":5560},[5543,6277,6278],{"class":5556},"]]    ",[5543,6280,6281],{"class":5549},"# Усі три класи одночасно\n",[5301,6283,6284,6287,6288,6291,6292,6295,6296,6299],{},[5224,6285,6286],{},"Фокус цього розділу:"," ми зосередимося на ",[5224,6289,6290],{},"бінарній класифікації",", оскільки логістична регресія спочатку була розроблена саме для цього випадку. Багатокласова класифікація розглядається як розширення через стратегії \"один проти всіх\" (",[5296,6293,6294],{},"one-vs-rest",") або \"один проти одного\" (",[5296,6297,6298],{},"one-vs-one",").",[5253,6301],{},[5256,6303,6305],{"id":6304},"регресія-vs-класифікація-фундаментальні-відмінності","Регресія vs Класифікація: фундаментальні відмінності",[5261,6307,6308,6309,6311],{},"Хоча обидва типи задач належать до навчання з учителем (",[5296,6310,5324],{},"), між ними існують принципові відмінності у природі цільової змінної та способах оцінювання моделей.",[5261,6313,6314],{},[5448,6315],{"alt":6316,"className":6317,"src":6318},"Порівняння регресії та класифікації: неперервна функція проти дискретної межі",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F02-regression-vs-classification.png",[5331,6320,6322],{"id":6321},"концептуальні-відмінності","Концептуальні відмінності",[5336,6324,6325,6338],{},[5339,6326,6327],{},[5342,6328,6329,6332,6335],{},[5345,6330,6331],{},"Характеристика",[5345,6333,6334],{},"Регресія",[5345,6336,6337],{},"Класифікація",[5355,6339,6340,6353,6372,6390,6403,6416,6432],{},[5342,6341,6342,6347,6350],{},[5360,6343,6344],{},[5224,6345,6346],{},"Тип цільової змінної",[5360,6348,6349],{},"Неперервна числова величина",[5360,6351,6352],{},"Дискретна категорія",[5342,6354,6355,6360,6367],{},[5360,6356,6357],{},[5224,6358,6359],{},"Приклад виводу",[5360,6361,6362],{},[6363,6364],"math-formula",{"tex":6365,":inline":6366},"42.7, 18.9, 1234.56","true",[5360,6368,6369],{},[6363,6370],{"tex":6371,":inline":6366},"\\text{спам}, \\text{клас 0}, \\text{кіт}",[5342,6373,6374,6379,6387],{},[5360,6375,6376],{},[5224,6377,6378],{},"Діапазон значень",[5360,6380,6381,5431,6384],{},[6363,6382],{"tex":6383,":inline":6366},"(-\\infty, +\\infty)",[6363,6385],{"tex":6386,":inline":6366},"[a, b]",[5360,6388,6389],{},"Фіксована скінченна множина класів",[5342,6391,6392,6397,6400],{},[5360,6393,6394],{},[5224,6395,6396],{},"Функція активації",[5360,6398,6399],{},"Лінійна (відсутня)",[5360,6401,6402],{},"Сигмоїда, softmax, tanh",[5342,6404,6405,6410,6413],{},[5360,6406,6407],{},[5224,6408,6409],{},"Функція втрат",[5360,6411,6412],{},"MSE, MAE, Huber",[5360,6414,6415],{},"Cross-Entropy, Hinge Loss",[5342,6417,6418,6423,6429],{},[5360,6419,6420],{},[5224,6421,6422],{},"Метрики оцінки",[5360,6424,6425,6428],{},[6363,6426],{"tex":6427,":inline":6366},"R^2",", RMSE, MAE",[5360,6430,6431],{},"Accuracy, Precision, Recall, F1-Score",[5342,6433,6434,6439,6442],{},[5360,6435,6436],{},[5224,6437,6438],{},"Геометрична інтерпретація",[5360,6440,6441],{},"Пряма\u002Fкрива апроксимації",[5360,6443,6444],{},"Розділова межа між класами",[5422,6446,6447,6452],{},[5261,6448,6449],{},[5224,6450,6451],{},"Простий спосіб розрізнити:",[5198,6453,6454,6460],{},[5201,6455,6456,6457],{},"Якщо на запитання \"скільки?\" потрібна відповідь числом — це ",[5224,6458,6459],{},"регресія",[5201,6461,6462,6463],{},"Якщо на запитання \"який?\" потрібна відповідь категорією — це ",[5224,6464,6465],{},"класифікація",[5331,6467,6469],{"id":6468},"математична-формалізація","Математична формалізація",[5261,6471,6472],{},[5224,6473,6474],{},"Регресія:",[6363,6476],{"tex":6477},"\\hat{y} = f(x; \\theta) \\in \\mathbb{R}",[5261,6479,6480,6481,6484,6485,6488],{},"Модель апроксимує неперервну функцію ",[6363,6482],{"tex":6483,":inline":6366},"f: \\mathbb{R}^n \\to \\mathbb{R}",", де ",[6363,6486],{"tex":6487,":inline":6366},"\\hat{y}"," може приймати будь-яке дійсне значення.",[5261,6490,6491],{},[5224,6492,6493],{},"Класифікація:",[6363,6495],{"tex":6496},"\\hat{y} = \\arg\\max_{c \\in C} P(y = c \\mid x; \\theta)",[5261,6498,6499,6500,6503],{},"Модель обчислює розподіл ймовірностей по класах ",[6363,6501],{"tex":6502,":inline":6366},"C = \\{c_1, c_2, \\dots, c_K\\}"," і обирає клас з найвищою ймовірністю.",[5301,6505,6506,6511],{},[5261,6507,6508],{},[5224,6509,6510],{},"Аналогія (Термометр vs Світлофор):",[5198,6512,6513,6528],{},[5201,6514,6515,6517,6518,6521,6522,5563,6525,6299],{},[5224,6516,6334],{}," — це ",[5224,6519,6520],{},"термометр",": показує точне неперервне число на шкалі (",[6363,6523],{"tex":6524,":inline":6366},"23.5^\\circ\\text{C}",[6363,6526],{"tex":6527,":inline":6366},"24.1^\\circ\\text{C}",[5201,6529,6530,6517,6532,6535],{},[5224,6531,6337],{},[5224,6533,6534],{},"світлофор",": обирає один із фіксованих станів (🔴 червоний, 🟡 жовтий, 🟢 зелений).",[5253,6537],{},[5256,6539,6541],{"id":6540},"чому-лінійна-регресія-не-підходить-для-класифікації","Чому лінійна регресія не підходить для класифікації?",[5261,6543,6544,6545,6548,6549,6552],{},"На перший погляд, можна спробувати використати звичайну лінійну регресію для класифікації: позначити класи числами (0 та 1), навчити модель ",[6363,6546],{"tex":6547,":inline":6366},"\\hat{y} = wx + b",", і застосувати поріг — якщо ",[6363,6550],{"tex":6551,":inline":6366},"\\hat{y} \\ge 0.5",", клас 1, інакше 0.",[5261,6554,6555,6556,5467],{},"Але цей підхід має ",[5224,6557,6558],{},"критичні проблеми",[5331,6560,6562,6563],{"id":6561},"проблема-1-прогнози-виходять-за-межі-0-1","Проблема 1: Прогнози виходять за межі ",[5543,6564,6565],{},"0, 1",[5261,6567,6568,6569,6572,6573,6576],{},"Лінійна функція не обмежена зверху і знизу. Для великих або малих значень ",[6363,6570],{"tex":6571,":inline":6366},"x"," прогноз може бути меншим за 0 або більшим за 1, що ",[5224,6574,6575],{},"не має сенсу"," як ймовірність.",[5736,6578,6581,6589],{"title":6579,"kernel":6580},"linear_regression_fails.ipynb","Python 3.11 (ipykernel)",[6582,6583,6585],"jupyter-cell",{"type":6584},"markdown",[5331,6586,6588],{"id":6587},"проблема-лінійної-регресії-для-класифікації","Проблема лінійної регресії для класифікації",[6582,6590,6592,6875],{"execution-count":5481,"execution-time":6591},"0.12s",[5532,6593,6595],{"className":5534,"code":6594,"language":5537,"meta":5538,"style":5538},"import numpy as np\nimport matplotlib.pyplot as plt\nfrom sklearn.linear_model import LinearRegression\n\n# Дані: вік студента та чи склав іспит (0 = ні, 1 = так)\nX = np.array([15, 18, 20, 22, 25, 28, 30, 35, 40, 45]).reshape(-1, 1)\ny = np.array([0, 0, 0, 1, 1, 1, 1, 1, 1, 1])\n\n# Навчання лінійної регресії\nmodel = LinearRegression()\nmodel.fit(X, y)\n\n# Прогноз для різних значень віку\nX_test = np.linspace(10, 50, 100).reshape(-1, 1)\ny_pred = model.predict(X_test)\n\nprint(f\"Прогноз для віку 10: {model.predict([[10]])[0]:.3f}\")\nprint(f\"Прогноз для віку 50: {model.predict([[50]])[0]:.3f}\")\n",[5540,6596,6597,6609,6619,6630,6634,6639,6703,6748,6752,6757,6762,6767,6771,6776,6805,6809,6813,6846],{"__ignoreMap":5538},[5543,6598,6599,6601,6604,6606],{"class":5545,"line":5546},[5543,6600,5678],{"class":5671},[5543,6602,6603],{"class":5556}," numpy ",[5543,6605,5863],{"class":5671},[5543,6607,6608],{"class":5556}," np\n",[5543,6610,6611,6613,6615,6617],{"class":5545,"line":5553},[5543,6612,5678],{"class":5671},[5543,6614,5860],{"class":5556},[5543,6616,5863],{"class":5671},[5543,6618,5866],{"class":5556},[5543,6620,6621,6623,6625,6627],{"class":5545,"line":5595},[5543,6622,5672],{"class":5671},[5543,6624,5762],{"class":5556},[5543,6626,5678],{"class":5671},[5543,6628,6629],{"class":5556}," LinearRegression\n",[5543,6631,6632],{"class":5545,"line":5602},[5543,6633,5599],{"emptyLinePlaceholder":5598},[5543,6635,6636],{"class":5545,"line":5608},[5543,6637,6638],{"class":5549},"# Дані: вік студента та чи склав іспит (0 = ні, 1 = так)\n",[5543,6640,6641,6644,6647,6649,6652,6654,6657,6659,6662,6664,6667,6669,6672,6674,6677,6679,6682,6684,6687,6689,6692,6695,6697,6699,6701],{"class":5545,"line":5614},[5543,6642,6643],{"class":5556},"X = np.array([",[5543,6645,6646],{"class":5560},"15",[5543,6648,5563],{"class":5556},[5543,6650,6651],{"class":5560},"18",[5543,6653,5563],{"class":5556},[5543,6655,6656],{"class":5560},"20",[5543,6658,5563],{"class":5556},[5543,6660,6661],{"class":5560},"22",[5543,6663,5563],{"class":5556},[5543,6665,6666],{"class":5560},"25",[5543,6668,5563],{"class":5556},[5543,6670,6671],{"class":5560},"28",[5543,6673,5563],{"class":5556},[5543,6675,6676],{"class":5560},"30",[5543,6678,5563],{"class":5556},[5543,6680,6681],{"class":5560},"35",[5543,6683,5563],{"class":5556},[5543,6685,6686],{"class":5560},"40",[5543,6688,5563],{"class":5556},[5543,6690,6691],{"class":5560},"45",[5543,6693,6694],{"class":5556},"]).reshape(-",[5543,6696,5481],{"class":5560},[5543,6698,5563],{"class":5556},[5543,6700,5481],{"class":5560},[5543,6702,5824],{"class":5556},[5543,6704,6705,6708,6710,6712,6714,6716,6718,6720,6722,6724,6726,6728,6730,6732,6734,6736,6738,6740,6742,6744,6746],{"class":5545,"line":5689},[5543,6706,6707],{"class":5556},"y = np.array([",[5543,6709,5477],{"class":5560},[5543,6711,5563],{"class":5556},[5543,6713,5477],{"class":5560},[5543,6715,5563],{"class":5556},[5543,6717,5477],{"class":5560},[5543,6719,5563],{"class":5556},[5543,6721,5481],{"class":5560},[5543,6723,5563],{"class":5556},[5543,6725,5481],{"class":5560},[5543,6727,5563],{"class":5556},[5543,6729,5481],{"class":5560},[5543,6731,5563],{"class":5556},[5543,6733,5481],{"class":5560},[5543,6735,5563],{"class":5556},[5543,6737,5481],{"class":5560},[5543,6739,5563],{"class":5556},[5543,6741,5481],{"class":5560},[5543,6743,5563],{"class":5556},[5543,6745,5481],{"class":5560},[5543,6747,5592],{"class":5556},[5543,6749,6750],{"class":5545,"line":5695},[5543,6751,5599],{"emptyLinePlaceholder":5598},[5543,6753,6754],{"class":5545,"line":5827},[5543,6755,6756],{"class":5549},"# Навчання лінійної регресії\n",[5543,6758,6759],{"class":5545,"line":5850},[5543,6760,6761],{"class":5556},"model = LinearRegression()\n",[5543,6763,6764],{"class":5545,"line":5855},[5543,6765,6766],{"class":5556},"model.fit(X, y)\n",[5543,6768,6769],{"class":5545,"line":5869},[5543,6770,5599],{"emptyLinePlaceholder":5598},[5543,6772,6773],{"class":5545,"line":5874},[5543,6774,6775],{"class":5549},"# Прогноз для різних значень віку\n",[5543,6777,6778,6781,6784,6786,6789,6791,6794,6797,6799,6801,6803],{"class":5545,"line":5895},[5543,6779,6780],{"class":5556},"X_test = np.linspace(",[5543,6782,6783],{"class":5560},"10",[5543,6785,5563],{"class":5556},[5543,6787,6788],{"class":5560},"50",[5543,6790,5563],{"class":5556},[5543,6792,6793],{"class":5560},"100",[5543,6795,6796],{"class":5556},").reshape(-",[5543,6798,5481],{"class":5560},[5543,6800,5563],{"class":5556},[5543,6802,5481],{"class":5560},[5543,6804,5824],{"class":5556},[5543,6806,6807],{"class":5545,"line":5900},[5543,6808,5611],{"class":5556},[5543,6810,6811],{"class":5545,"line":5924},[5543,6812,5599],{"emptyLinePlaceholder":5598},[5543,6814,6815,6817,6819,6821,6824,6826,6829,6831,6834,6836,6839,6842,6844],{"class":5545,"line":5942},[5543,6816,5796],{"class":5795},[5543,6818,5799],{"class":5556},[5543,6820,5803],{"class":5802},[5543,6822,6823],{"class":5636},"\"Прогноз для віку 10: ",[5543,6825,5809],{"class":5802},[5543,6827,6828],{"class":5556},"model.predict([[",[5543,6830,6783],{"class":5560},[5543,6832,6833],{"class":5556},"]])[",[5543,6835,5477],{"class":5560},[5543,6837,6838],{"class":5556},"]",[5543,6840,6841],{"class":5802},":.3f}",[5543,6843,5821],{"class":5636},[5543,6845,5824],{"class":5556},[5543,6847,6848,6850,6852,6854,6857,6859,6861,6863,6865,6867,6869,6871,6873],{"class":5545,"line":5978},[5543,6849,5796],{"class":5795},[5543,6851,5799],{"class":5556},[5543,6853,5803],{"class":5802},[5543,6855,6856],{"class":5636},"\"Прогноз для віку 50: ",[5543,6858,5809],{"class":5802},[5543,6860,6828],{"class":5556},[5543,6862,6788],{"class":5560},[5543,6864,6833],{"class":5556},[5543,6866,5477],{"class":5560},[5543,6868,6838],{"class":5556},[5543,6870,6841],{"class":5802},[5543,6872,5821],{"class":5636},[5543,6874,5824],{"class":5556},[6104,6876,6877,6884],{"v-slot:output":5538},[5261,6878,6879],{},[5448,6880],{"alt":6881,"className":6882,"src":6883},"Обмеження лінійної регресії в задачах бінарної класифікації: вихід за межі діапазону 0, 1 та некоректна інтерпретація ймовірностей",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F01.png",[5532,6885,6888],{"className":6886,"code":6887,"language":6118},[6116],"Прогноз для віку 10: -0.287\nПрогноз для віку 50: 1.543\n",[5540,6889,6887],{"__ignoreMap":5538},[6891,6892,6893,6896,6897,6900,6901,6904,6905,5467],"warning",{},[5224,6894,6895],{},"Проблема:"," прогноз ",[6363,6898],{"tex":6899,":inline":6366},"-0.287"," означає «ймовірність -28.7%», а ",[6363,6902],{"tex":6903,":inline":6366},"1.543"," — «ймовірність 154.3%». Це математично некоректно! Ймовірність має бути в межах ",[6363,6906],{"tex":6907,":inline":6366},"[0, 1]",[5331,6909,6911],{"id":6910},"проблема-2-чутливість-до-викидів-outliers","Проблема 2: Чутливість до викидів (outliers)",[5261,6913,6914,6915,6918],{},"Лінійна регресія намагається мінімізувати середньоквадратичну помилку (MSE), що робить її ",[5224,6916,6917],{},"надзвичайно чутливою"," до викидів. Один екстремальний об'єкт може сильно змістити лінію та зіпсувати класифікацію для всіх інших точок.",[5261,6920,6921],{},[5448,6922],{"alt":6923,"className":6924,"src":6925},"Вплив викиду на лінійну регресію vs логістичну регресію",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F03-outlier-sensitivity.png",[6927,6928,6935,6936,6935,6941,6935,6945],"video",{"controls":5598,"autoPlay":5598,"loop":5598,"muted":5598,"playsInline":5598,"poster":6929,"className":6930},"\u002Fvideos\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002Flinear_vs_logistic_outlier_dynamics_poster.png",[5452,6931,6932,6933,6934],"rounded-xl","shadow-lg","w-full","my-6","\n  ",[6937,6938],"source",{"src":6939,"type":6940},"\u002Fvideos\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002Flinear_vs_logistic_outlier_dynamics.mp4","video\u002Fmp4",[6937,6942],{"src":6943,"type":6944},"\u002Fvideos\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002Flinear_vs_logistic_outlier_dynamics.webm","video\u002Fwebm",[5448,6946],{"src":6947,"alt":6948,"className":6949},"\u002Fvideos\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002Flinear_vs_logistic_outlier_dynamics.gif","Анімація впливу викидів на нахил лінійної прямої та стабільність логістичної сигмоїди",[5452],[5301,6951,6952,6955],{},[5224,6953,6954],{},"Аналогія:"," уявіть, що ви вибудовуєте шеренгу учнів за зростом, щоб провести «лінію» між високими та низькими. Раптом приходить один учень зростом 2 метри. Лінійна регресія спробує наблизити всю пряму до цього гіганта, зіпсувавши розподіл для решти.",[5331,6957,6959],{"id":6958},"проблема-3-семантична-невідповідність","Проблема 3: Семантична невідповідність",[5261,6961,6962,6963,6966,6967,6970],{},"Лінійна регресія припускає, що ",[5224,6964,6965],{},"різниця між 0 і 0.5 та між 0.5 і 1.0 однакова та має сенс",". Але для класифікації це не так: клас 0 та клас 1 — це просто ",[5224,6968,6969],{},"мітки",", а не числа на осі. Різниця «на 0.3» між класами безглузда.",[5422,6972,6973,6983,7000],{},[5261,6974,6975,6978,6979,6982],{},[5224,6976,6977],{},"Висновок:"," для класифікації потрібен ",[5224,6980,6981],{},"спеціальний алгоритм",", який:",[6984,6985,6986,6991,6994,6997],"ol",{},[5201,6987,6988,6989],{},"Обмежує прогнози діапазоном ",[6363,6990],{"tex":6907,":inline":6366},[5201,6992,6993],{},"Інтерпретує вихід як ймовірність належності до класу",[5201,6995,6996],{},"Стійкий до викидів",[5201,6998,6999],{},"Використовує функцію втрат, що відповідає природі задачі",[5261,7001,7002,7003,5467],{},"Такий алгоритм називається ",[5224,7004,7005],{},"логістична регресія",[5253,7007],{},[5256,7009,7011],{"id":7010},"що-таке-логістична-регресія","Що таке логістична регресія?",[5261,7013,7014,7016,7017,5294,7020,6299],{},[5224,7015,5238],{}," — це алгоритм машинного навчання для задач бінарної класифікації, який моделює ймовірність належності об'єкта до класу 1 за допомогою ",[5224,7018,7019],{},"сигмоїдної функції",[5296,7021,7022],{},"sigmoid function",[5301,7024,7025,7028,7029,7032],{},[5224,7026,7027],{},"Важливе зауваження:"," незважаючи на назву \"регресія\", це алгоритм ",[5224,7030,7031],{},"класифікації","! Історично він отримав таку назву через використання регресійного підходу (лінійна комбінація ознак), але розв'язує класифікаційну задачу.",[5331,7034,7036],{"id":7035},"ідея-алгоритму","Ідея алгоритму",[5261,7038,7039],{},"Логістична регресія складається з двох етапів:",[6984,7041,7042],{},[5201,7043,7044],{},[5224,7045,7046],{},"Лінійна комбінація ознак:",[6363,7048],{"tex":7049},"z = w_1 x_1 + w_2 x_2 + \\dots + w_n x_n + b = \\mathbf{w}^T \\mathbf{x} + b",[5261,7051,7052,7053,5467],{},"Це звичайна лінійна функція, де ",[6363,7054],{"tex":7055,":inline":6366},"z \\in (-\\infty, +\\infty)",[6984,7057,7058],{"start":5553},[5201,7059,7060],{},[5224,7061,7062],{},"Застосування сигмоїдної функції:",[6363,7064],{"tex":7065},"\\hat{y} = \\sigma(z) = \\frac{1}{1 + e^{-z}}",[5261,7067,7068,7069,7072,7073,7076,7077,5467],{},"Сигмоїда \"стискає\" будь-яке дійсне число ",[6363,7070],{"tex":7071,":inline":6366},"z"," у діапазон ",[6363,7074],{"tex":7075,":inline":6366},"(0, 1)",", що інтерпретується як ",[5224,7078,7079],{},"ймовірність належності до класу 1",[5529,7081,7082,7172],{},[5532,7083,7086],{"className":5534,"code":7084,"filename":7085,"language":5537,"meta":5538,"style":5538},"# Ознаки: вік, холестерин\nx = np.array([45, 220])  # вік = 45 років, холестерин = 220 мг\u002Fдл\nw = np.array([0.05, 0.02])\nb = -8.5\n\nz = w @ x + b  # Скалярний добуток + зміщення\nprint(f\"z = {z:.2f}\")  # Може бути будь-яким числом\n","Крок 1: Лінійна комбінація",[5540,7087,7088,7093,7111,7126,7134,7138,7146],{"__ignoreMap":5538},[5543,7089,7090],{"class":5545,"line":5546},[5543,7091,7092],{"class":5549},"# Ознаки: вік, холестерин\n",[5543,7094,7095,7098,7100,7102,7105,7108],{"class":5545,"line":5553},[5543,7096,7097],{"class":5556},"x = np.array([",[5543,7099,6691],{"class":5560},[5543,7101,5563],{"class":5556},[5543,7103,7104],{"class":5560},"220",[5543,7106,7107],{"class":5556},"])  ",[5543,7109,7110],{"class":5549},"# вік = 45 років, холестерин = 220 мг\u002Fдл\n",[5543,7112,7113,7116,7119,7121,7124],{"class":5545,"line":5595},[5543,7114,7115],{"class":5556},"w = np.array([",[5543,7117,7118],{"class":5560},"0.05",[5543,7120,5563],{"class":5556},[5543,7122,7123],{"class":5560},"0.02",[5543,7125,5592],{"class":5556},[5543,7127,7128,7131],{"class":5545,"line":5602},[5543,7129,7130],{"class":5556},"b = -",[5543,7132,7133],{"class":5560},"8.5\n",[5543,7135,7136],{"class":5545,"line":5608},[5543,7137,5599],{"emptyLinePlaceholder":5598},[5543,7139,7140,7143],{"class":5545,"line":5614},[5543,7141,7142],{"class":5556},"z = w @ x + b  ",[5543,7144,7145],{"class":5549},"# Скалярний добуток + зміщення\n",[5543,7147,7148,7150,7152,7154,7157,7159,7161,7164,7166,7169],{"class":5545,"line":5689},[5543,7149,5796],{"class":5795},[5543,7151,5799],{"class":5556},[5543,7153,5803],{"class":5802},[5543,7155,7156],{"class":5636},"\"z = ",[5543,7158,5809],{"class":5802},[5543,7160,7071],{"class":5556},[5543,7162,7163],{"class":5802},":.2f}",[5543,7165,5821],{"class":5636},[5543,7167,7168],{"class":5556},")  ",[5543,7170,7171],{"class":5549},"# Може бути будь-яким числом\n",[5532,7173,7176],{"className":5534,"code":7174,"filename":7175,"language":5537,"meta":5538,"style":5538},"def sigmoid(z):\n    return 1 \u002F (1 + np.exp(-z))\n\ny_prob = sigmoid(z)  # Ймовірність класу 1\nprint(f\"P(клас=1) = {y_prob:.3f}\")\n\n# Прийняття рішення\ny_pred = 1 if y_prob >= 0.5 else 0\nprint(f\"Прогноз: клас {y_pred}\")\n","Крок 2: Сигмоїда",[5540,7177,7178,7193,7209,7213,7221,7243,7247,7252,7274],{"__ignoreMap":5538},[5543,7179,7180,7183,7186,7188,7190],{"class":5545,"line":5546},[5543,7181,7182],{"class":5802},"def",[5543,7184,7185],{"class":5795}," sigmoid",[5543,7187,5799],{"class":5556},[5543,7189,7071],{"class":5906},[5543,7191,7192],{"class":5556},"):\n",[5543,7194,7195,7198,7201,7204,7206],{"class":5545,"line":5553},[5543,7196,7197],{"class":5671},"    return",[5543,7199,7200],{"class":5560}," 1",[5543,7202,7203],{"class":5556}," \u002F (",[5543,7205,5481],{"class":5560},[5543,7207,7208],{"class":5556}," + np.exp(-z))\n",[5543,7210,7211],{"class":5545,"line":5595},[5543,7212,5599],{"emptyLinePlaceholder":5598},[5543,7214,7215,7218],{"class":5545,"line":5602},[5543,7216,7217],{"class":5556},"y_prob = sigmoid(z)  ",[5543,7219,7220],{"class":5549},"# Ймовірність класу 1\n",[5543,7222,7223,7225,7227,7229,7232,7234,7237,7239,7241],{"class":5545,"line":5608},[5543,7224,5796],{"class":5795},[5543,7226,5799],{"class":5556},[5543,7228,5803],{"class":5802},[5543,7230,7231],{"class":5636},"\"P(клас=1) = ",[5543,7233,5809],{"class":5802},[5543,7235,7236],{"class":5556},"y_prob",[5543,7238,6841],{"class":5802},[5543,7240,5821],{"class":5636},[5543,7242,5824],{"class":5556},[5543,7244,7245],{"class":5545,"line":5614},[5543,7246,5599],{"emptyLinePlaceholder":5598},[5543,7248,7249],{"class":5545,"line":5689},[5543,7250,7251],{"class":5549},"# Прийняття рішення\n",[5543,7253,7254,7257,7259,7262,7265,7268,7271],{"class":5545,"line":5695},[5543,7255,7256],{"class":5556},"y_pred = ",[5543,7258,5481],{"class":5560},[5543,7260,7261],{"class":5671}," if",[5543,7263,7264],{"class":5556}," y_prob >= ",[5543,7266,7267],{"class":5560},"0.5",[5543,7269,7270],{"class":5671}," else",[5543,7272,7273],{"class":5560}," 0\n",[5543,7275,7276,7278,7280,7282,7285,7287,7290,7292,7294],{"class":5545,"line":5827},[5543,7277,5796],{"class":5795},[5543,7279,5799],{"class":5556},[5543,7281,5803],{"class":5802},[5543,7283,7284],{"class":5636},"\"Прогноз: клас ",[5543,7286,5809],{"class":5802},[5543,7288,7289],{"class":5556},"y_pred",[5543,7291,5818],{"class":5802},[5543,7293,5821],{"class":5636},[5543,7295,5824],{"class":5556},[5253,7297],{},[5256,7299,7301],{"id":7300},"сигмоїдна-функція-перетворення-числа-у-ймовірність","Сигмоїдна функція: перетворення числа у ймовірність",[5261,7303,7304,7307,7308,7311],{},[5224,7305,7306],{},"Сигмоїдна функція (sigmoid function)",", також відома як ",[5224,7309,7310],{},"логістична функція",", — це математична функція, що перетворює будь-яке дійсне число у значення від 0 до 1.",[5331,7313,7315],{"id":7314},"математичне-визначення","Математичне визначення",[6363,7317],{"tex":7318},"\\sigma(z) = \\frac{1}{1 + e^{-z}}",[5261,7320,7321],{},"Де:",[5198,7323,7324,7329,7335],{},[5201,7325,7326,7328],{},[6363,7327],{"tex":7071,":inline":6366}," — вхідне значення (лінійна комбінація ознак)",[5201,7330,7331,7334],{},[6363,7332],{"tex":7333,":inline":6366},"e \\approx 2.718"," — основа натурального логарифма",[5201,7336,7337,7340],{},[6363,7338],{"tex":7339,":inline":6366},"\\sigma(z) \\in (0, 1)"," — вихід у діапазоні ймовірностей",[5331,7342,7344],{"id":7343},"властивості-сигмоїди","Властивості сигмоїди",[5261,7346,7347],{},[5448,7348],{"alt":7349,"className":7350,"src":7351},"Графік сигмоїдної функції з ключовими точками",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F04-sigmoid-function.png",[7353,7354,7355,7364,7371,7378,7393,7401],"field-group",{},[7356,7357,7359,7360,7363],"field",{"name":7358},"σ(0) = 0.5","У нульовій точці сигмоїда повертає рівно 0.5 — це ",[5224,7361,7362],{},"точка невизначеності",", де модель не може віддати перевагу жодному класу.",[7356,7365,7367,7368,7370],{"name":7366},"σ(z) → 1 при z → +∞","Для великих позитивних значень ",[6363,7369],{"tex":7071,":inline":6366}," сигмоїда асимптотично наближається до 1 (висока впевненість у класі 1).",[7356,7372,7374,7375,7377],{"name":7373},"σ(z) → 0 при z → -∞","Для великих негативних значень ",[6363,7376],{"tex":7071,":inline":6366}," сигмоїда наближається до 0 (висока впевненість у класі 0).",[7356,7379,7381,7382,7385,7386,7389,7390,5467],{"name":7380},"Симетричність відносно (0, 0.5)","Сигмоїда симетрична: ",[6363,7383],{"tex":7384,":inline":6366},"\\sigma(-z) = 1 - \\sigma(z)",". Якщо ",[6363,7387],{"tex":7388,":inline":6366},"\\sigma(2) = 0.88",", то ",[6363,7391],{"tex":7392,":inline":6366},"\\sigma(-2) = 0.12",[7356,7394,7396,7397,7400],{"name":7395},"Монотонне зростання","Функція завжди зростає, але ",[5224,7398,7399],{},"ніколи не досягає 0 або 1"," — лише наближається асимптотично.",[7356,7402,7404],{"name":7403},"S-подібна форма","Графік нагадує латинську букву S — звідси неформальна назва \"S-крива\".",[6927,7406,6935,7409,6935,7412,6935,7415],{"controls":5598,"autoPlay":5598,"loop":5598,"muted":5598,"playsInline":5598,"poster":7407,"className":7408},"\u002Fvideos\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002Flogistic_regression_sigmoid_parameters_poster.png",[5452,6931,6932,6933,6934],[6937,7410],{"src":7411,"type":6940},"\u002Fvideos\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002Flogistic_regression_sigmoid_parameters.mp4",[6937,7413],{"src":7414,"type":6944},"\u002Fvideos\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002Flogistic_regression_sigmoid_parameters.webm",[5448,7416],{"src":7417,"alt":7418,"className":7419},"\u002Fvideos\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002Flogistic_regression_sigmoid_parameters.gif","Анімація геометричної форми сигмоїди: керування крутизною ваги w та зсувом порогу через bias b",[5452],[5736,7421,7423,7429],{"title":7422,"kernel":6580},"sigmoid_visualization.ipynb",[6582,7424,7425],{"type":6584},[5331,7426,7428],{"id":7427},"візуалізація-сигмоїдної-функції","Візуалізація сигмоїдної функції",[6582,7430,7432,7833],{"execution-count":5481,"execution-time":7431},"0.18s",[5532,7433,7435],{"className":5534,"code":7434,"language":5537,"meta":5538,"style":5538},"import numpy as np\nimport matplotlib.pyplot as plt\n\ndef sigmoid(z):\n    return 1 \u002F (1 + np.exp(-z))\n\n# Діапазон значень z від -10 до +10\nz = np.linspace(-10, 10, 200)\ny = sigmoid(z)\n\n# Побудова графіка\nplt.figure(figsize=(10, 6))\nplt.plot(z, y, linewidth=2.5, color='#3b82f6', label='σ(z)')\nplt.axhline(y=0.5, color='#ef4444', linestyle='--', alpha=0.7, label='Поріг 0.5')\nplt.axvline(x=0, color='#10b981', linestyle='--', alpha=0.7, label='z = 0')\nplt.grid(alpha=0.3)\nplt.xlabel('z (лінійна комбінація)', fontsize=12)\nplt.ylabel('σ(z) — ймовірність класу 1', fontsize=12)\nplt.title('Сигмоїдна функція: перетворення z у ймовірність', fontsize=14)\nplt.legend()\nplt.show()\n\n# Перевірка ключових точок\nprint(f\"σ(-5) = {sigmoid(-5):.4f}\")\nprint(f\"σ(0)  = {sigmoid(0):.4f}\")\nprint(f\"σ(5)  = {sigmoid(5):.4f}\")\n",[5540,7436,7437,7447,7457,7461,7473,7485,7489,7494,7512,7517,7521,7526,7542,7575,7625,7671,7683,7700,7717,7734,7739,7743,7747,7752,7780,7807],{"__ignoreMap":5538},[5543,7438,7439,7441,7443,7445],{"class":5545,"line":5546},[5543,7440,5678],{"class":5671},[5543,7442,6603],{"class":5556},[5543,7444,5863],{"class":5671},[5543,7446,6608],{"class":5556},[5543,7448,7449,7451,7453,7455],{"class":5545,"line":5553},[5543,7450,5678],{"class":5671},[5543,7452,5860],{"class":5556},[5543,7454,5863],{"class":5671},[5543,7456,5866],{"class":5556},[5543,7458,7459],{"class":5545,"line":5595},[5543,7460,5599],{"emptyLinePlaceholder":5598},[5543,7462,7463,7465,7467,7469,7471],{"class":5545,"line":5602},[5543,7464,7182],{"class":5802},[5543,7466,7185],{"class":5795},[5543,7468,5799],{"class":5556},[5543,7470,7071],{"class":5906},[5543,7472,7192],{"class":5556},[5543,7474,7475,7477,7479,7481,7483],{"class":5545,"line":5608},[5543,7476,7197],{"class":5671},[5543,7478,7200],{"class":5560},[5543,7480,7203],{"class":5556},[5543,7482,5481],{"class":5560},[5543,7484,7208],{"class":5556},[5543,7486,7487],{"class":5545,"line":5614},[5543,7488,5599],{"emptyLinePlaceholder":5598},[5543,7490,7491],{"class":5545,"line":5689},[5543,7492,7493],{"class":5549},"# Діапазон значень z від -10 до +10\n",[5543,7495,7496,7499,7501,7503,7505,7507,7510],{"class":5545,"line":5695},[5543,7497,7498],{"class":5556},"z = np.linspace(-",[5543,7500,6783],{"class":5560},[5543,7502,5563],{"class":5556},[5543,7504,6783],{"class":5560},[5543,7506,5563],{"class":5556},[5543,7508,7509],{"class":5560},"200",[5543,7511,5824],{"class":5556},[5543,7513,7514],{"class":5545,"line":5827},[5543,7515,7516],{"class":5556},"y = sigmoid(z)\n",[5543,7518,7519],{"class":5545,"line":5850},[5543,7520,5599],{"emptyLinePlaceholder":5598},[5543,7522,7523],{"class":5545,"line":5855},[5543,7524,7525],{"class":5549},"# Побудова графіка\n",[5543,7527,7528,7530,7532,7534,7536,7538,7540],{"class":5545,"line":5869},[5543,7529,5903],{"class":5556},[5543,7531,5907],{"class":5906},[5543,7533,5910],{"class":5556},[5543,7535,6783],{"class":5560},[5543,7537,5563],{"class":5556},[5543,7539,5918],{"class":5560},[5543,7541,5921],{"class":5556},[5543,7543,7544,7547,7550,7552,7555,7557,7560,7562,7564,7566,7568,7570,7573],{"class":5545,"line":5874},[5543,7545,7546],{"class":5556},"plt.plot(z, y, ",[5543,7548,7549],{"class":5906},"linewidth",[5543,7551,5969],{"class":5556},[5543,7553,7554],{"class":5560},"2.5",[5543,7556,5563],{"class":5556},[5543,7558,7559],{"class":5906},"color",[5543,7561,5969],{"class":5556},[5543,7563,5885],{"class":5636},[5543,7565,5563],{"class":5556},[5543,7567,6001],{"class":5906},[5543,7569,5969],{"class":5556},[5543,7571,7572],{"class":5636},"'σ(z)'",[5543,7574,5824],{"class":5556},[5543,7576,7577,7580,7583,7585,7587,7589,7591,7593,7595,7597,7600,7602,7605,7607,7609,7611,7614,7616,7618,7620,7623],{"class":5545,"line":5895},[5543,7578,7579],{"class":5556},"plt.axhline(",[5543,7581,7582],{"class":5906},"y",[5543,7584,5969],{"class":5556},[5543,7586,7267],{"class":5560},[5543,7588,5563],{"class":5556},[5543,7590,7559],{"class":5906},[5543,7592,5969],{"class":5556},[5543,7594,5880],{"class":5636},[5543,7596,5563],{"class":5556},[5543,7598,7599],{"class":5906},"linestyle",[5543,7601,5969],{"class":5556},[5543,7603,7604],{"class":5636},"'--'",[5543,7606,5563],{"class":5556},[5543,7608,6089],{"class":5906},[5543,7610,5969],{"class":5556},[5543,7612,7613],{"class":5560},"0.7",[5543,7615,5563],{"class":5556},[5543,7617,6001],{"class":5906},[5543,7619,5969],{"class":5556},[5543,7621,7622],{"class":5636},"'Поріг 0.5'",[5543,7624,5824],{"class":5556},[5543,7626,7627,7630,7632,7634,7636,7638,7640,7642,7644,7646,7648,7650,7652,7654,7656,7658,7660,7662,7664,7666,7669],{"class":5545,"line":5900},[5543,7628,7629],{"class":5556},"plt.axvline(",[5543,7631,6571],{"class":5906},[5543,7633,5969],{"class":5556},[5543,7635,5477],{"class":5560},[5543,7637,5563],{"class":5556},[5543,7639,7559],{"class":5906},[5543,7641,5969],{"class":5556},[5543,7643,5890],{"class":5636},[5543,7645,5563],{"class":5556},[5543,7647,7599],{"class":5906},[5543,7649,5969],{"class":5556},[5543,7651,7604],{"class":5636},[5543,7653,5563],{"class":5556},[5543,7655,6089],{"class":5906},[5543,7657,5969],{"class":5556},[5543,7659,7613],{"class":5560},[5543,7661,5563],{"class":5556},[5543,7663,6001],{"class":5906},[5543,7665,5969],{"class":5556},[5543,7667,7668],{"class":5636},"'z = 0'",[5543,7670,5824],{"class":5556},[5543,7672,7673,7675,7677,7679,7681],{"class":5545,"line":5924},[5543,7674,6086],{"class":5556},[5543,7676,6089],{"class":5906},[5543,7678,5969],{"class":5556},[5543,7680,6094],{"class":5560},[5543,7682,5824],{"class":5556},[5543,7684,7685,7687,7690,7692,7694,7696,7698],{"class":5545,"line":5942},[5543,7686,6010],{"class":5556},[5543,7688,7689],{"class":5636},"'z (лінійна комбінація)'",[5543,7691,5563],{"class":5556},[5543,7693,6018],{"class":5906},[5543,7695,5969],{"class":5556},[5543,7697,6023],{"class":5560},[5543,7699,5824],{"class":5556},[5543,7701,7702,7704,7707,7709,7711,7713,7715],{"class":5545,"line":5978},[5543,7703,6031],{"class":5556},[5543,7705,7706],{"class":5636},"'σ(z) — ймовірність класу 1'",[5543,7708,5563],{"class":5556},[5543,7710,6018],{"class":5906},[5543,7712,5969],{"class":5556},[5543,7714,6023],{"class":5560},[5543,7716,5824],{"class":5556},[5543,7718,7719,7721,7724,7726,7728,7730,7732],{"class":5545,"line":6007},[5543,7720,6050],{"class":5556},[5543,7722,7723],{"class":5636},"'Сигмоїдна функція: перетворення z у ймовірність'",[5543,7725,5563],{"class":5556},[5543,7727,6018],{"class":5906},[5543,7729,5969],{"class":5556},[5543,7731,6062],{"class":5560},[5543,7733,5824],{"class":5556},[5543,7735,7736],{"class":5545,"line":6028},[5543,7737,7738],{"class":5556},"plt.legend()\n",[5543,7740,7741],{"class":5545,"line":6047},[5543,7742,6102],{"class":5556},[5543,7744,7745],{"class":5545,"line":6067},[5543,7746,5599],{"emptyLinePlaceholder":5598},[5543,7748,7749],{"class":5545,"line":6083},[5543,7750,7751],{"class":5549},"# Перевірка ключових точок\n",[5543,7753,7754,7756,7758,7760,7763,7765,7768,7771,7773,7776,7778],{"class":5545,"line":6099},[5543,7755,5796],{"class":5795},[5543,7757,5799],{"class":5556},[5543,7759,5803],{"class":5802},[5543,7761,7762],{"class":5636},"\"σ(-5) = ",[5543,7764,5809],{"class":5802},[5543,7766,7767],{"class":5556},"sigmoid(-",[5543,7769,7770],{"class":5560},"5",[5543,7772,5499],{"class":5556},[5543,7774,7775],{"class":5802},":.4f}",[5543,7777,5821],{"class":5636},[5543,7779,5824],{"class":5556},[5543,7781,7783,7785,7787,7789,7792,7794,7797,7799,7801,7803,7805],{"class":5545,"line":7782},25,[5543,7784,5796],{"class":5795},[5543,7786,5799],{"class":5556},[5543,7788,5803],{"class":5802},[5543,7790,7791],{"class":5636},"\"σ(0)  = ",[5543,7793,5809],{"class":5802},[5543,7795,7796],{"class":5556},"sigmoid(",[5543,7798,5477],{"class":5560},[5543,7800,5499],{"class":5556},[5543,7802,7775],{"class":5802},[5543,7804,5821],{"class":5636},[5543,7806,5824],{"class":5556},[5543,7808,7810,7812,7814,7816,7819,7821,7823,7825,7827,7829,7831],{"class":5545,"line":7809},26,[5543,7811,5796],{"class":5795},[5543,7813,5799],{"class":5556},[5543,7815,5803],{"class":5802},[5543,7817,7818],{"class":5636},"\"σ(5)  = ",[5543,7820,5809],{"class":5802},[5543,7822,7796],{"class":5556},[5543,7824,7770],{"class":5560},[5543,7826,5499],{"class":5556},[5543,7828,7775],{"class":5802},[5543,7830,5821],{"class":5636},[5543,7832,5824],{"class":5556},[6104,7834,7835,7842],{"v-slot:output":5538},[5261,7836,7837],{},[5448,7838],{"alt":7839,"className":7840,"src":7841},"Графік сигмоїдної функції: перетворення лінійної комбінації ознак z у ймовірність",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F02.png",[5532,7843,7846],{"className":7844,"code":7845,"language":6118},[6116],"σ(-5) = 0.0067\nσ(0)  = 0.5000\nσ(5)  = 0.9933\n",[5540,7847,7845],{"__ignoreMap":5538},[5253,7849],{},[5256,7851,7853],{"id":7852},"інтерпретація-виходу-логістичної-регресії","Інтерпретація виходу логістичної регресії",[5261,7855,7856,7857,7859,7860,5467],{},"Логістична регресія повертає ",[5224,7858,7079],{},": ",[6363,7861],{"tex":7862,":inline":6366},"P(y = 1 \\mid \\mathbf{x})",[5261,7864,7865,7866,5294,7869,7872],{},"Фінальне рішення про клас приймається через ",[5224,7867,7868],{},"поріг",[5296,7870,7871],{},"threshold","), зазвичай 0.5:",[6363,7874],{"tex":7875},"\\hat{y} = \\begin{cases} 1, & \\text{якщо } \\sigma(z) \\ge 0.5 \\\\\\\\ 0, & \\text{якщо } \\sigma(z) \u003C 0.5 \\end{cases}",[5301,7877,7878,7881],{},[5224,7879,7880],{},"Аналогія (Адвокат у суді):"," сигмоїда обчислює \"ступінь впевненості\" у виді відсотка (40%, 75%, 92%). Адвокат не каже \"підсудний хороший на 68%\" — він приймає остаточне рішення \"винний\" або \"невинний\" на основі порогу (наприклад, \"якщо впевненість >50%, визнаємо винним\").",[5331,7883,7885],{"id":7884},"приклад-інтерпретації","Приклад інтерпретації",[5736,7887,7889,8289],{"title":7888,"execution-count":5481},"logistic_interpretation.ipynb",[5532,7890,7892],{"className":5534,"code":7891,"language":5537,"meta":5538,"style":5538},"# Пацієнт: вік = 52, холестерин = 240, тиск = 145\nX = np.array([[52, 240, 145]])\n\n# Передбачена ймовірність (приклад)\ny_prob = model.predict_proba(X)[0, 1]\ny_class = model.predict(X)[0]\n\nprint(f\"Ймовірність хвороби серця: {y_prob:.1%}\")\nprint(f\"Прогноз: {'підвищений ризик ⚠️' if y_class == 1 else 'низький ризик ✅'}\")\n\nimport matplotlib.pyplot as plt\n\nplt.figure(figsize=(9, 2.8))\nplt.barh(['P(y=1)'], [y_prob], color='#ef4444' if y_prob >= 0.5 else '#10b981', height=0.5)\nplt.barh(['P(y=1)'], [1 - y_prob], left=[y_prob], color='#e5e7eb', height=0.5)\nplt.axvline(0.5, color='#1f2937', linestyle='--', label='Поріг 0.5')\nplt.text(y_prob \u002F 2, 0, f'{y_prob:.1%}', ha='center', va='center',\n         color='white', fontsize=14, fontweight='bold')\nplt.xlim(0, 1)\nplt.xlabel('Ймовірність хвороби серця')\nplt.title('Ймовірність → клас через поріг', fontsize=13)\nplt.legend(loc='upper right')\nplt.show()\n",[5540,7893,7894,7899,7920,7924,7929,7942,7951,7955,7977,8011,8015,8025,8029,8046,8085,8122,8155,8202,8231,8244,8253,8271,8285],{"__ignoreMap":5538},[5543,7895,7896],{"class":5545,"line":5546},[5543,7897,7898],{"class":5549},"# Пацієнт: вік = 52, холестерин = 240, тиск = 145\n",[5543,7900,7901,7904,7907,7909,7912,7914,7917],{"class":5545,"line":5553},[5543,7902,7903],{"class":5556},"X = np.array([[",[5543,7905,7906],{"class":5560},"52",[5543,7908,5563],{"class":5556},[5543,7910,7911],{"class":5560},"240",[5543,7913,5563],{"class":5556},[5543,7915,7916],{"class":5560},"145",[5543,7918,7919],{"class":5556},"]])\n",[5543,7921,7922],{"class":5545,"line":5595},[5543,7923,5599],{"emptyLinePlaceholder":5598},[5543,7925,7926],{"class":5545,"line":5602},[5543,7927,7928],{"class":5549},"# Передбачена ймовірність (приклад)\n",[5543,7930,7931,7934,7936,7938,7940],{"class":5545,"line":5608},[5543,7932,7933],{"class":5556},"y_prob = model.predict_proba(X)[",[5543,7935,5477],{"class":5560},[5543,7937,5563],{"class":5556},[5543,7939,5481],{"class":5560},[5543,7941,5657],{"class":5556},[5543,7943,7944,7947,7949],{"class":5545,"line":5614},[5543,7945,7946],{"class":5556},"y_class = model.predict(X)[",[5543,7948,5477],{"class":5560},[5543,7950,5657],{"class":5556},[5543,7952,7953],{"class":5545,"line":5689},[5543,7954,5599],{"emptyLinePlaceholder":5598},[5543,7956,7957,7959,7961,7963,7966,7968,7970,7973,7975],{"class":5545,"line":5695},[5543,7958,5796],{"class":5795},[5543,7960,5799],{"class":5556},[5543,7962,5803],{"class":5802},[5543,7964,7965],{"class":5636},"\"Ймовірність хвороби серця: ",[5543,7967,5809],{"class":5802},[5543,7969,7236],{"class":5556},[5543,7971,7972],{"class":5802},":.1%}",[5543,7974,5821],{"class":5636},[5543,7976,5824],{"class":5556},[5543,7978,7979,7981,7983,7985,7988,7990,7993,7995,7998,8000,8002,8005,8007,8009],{"class":5545,"line":5827},[5543,7980,5796],{"class":5795},[5543,7982,5799],{"class":5556},[5543,7984,5803],{"class":5802},[5543,7986,7987],{"class":5636},"\"Прогноз: ",[5543,7989,5809],{"class":5802},[5543,7991,7992],{"class":5636},"'підвищений ризик ⚠️'",[5543,7994,7261],{"class":5671},[5543,7996,7997],{"class":5556}," y_class == ",[5543,7999,5481],{"class":5560},[5543,8001,7270],{"class":5671},[5543,8003,8004],{"class":5636}," 'низький ризик ✅'",[5543,8006,5818],{"class":5802},[5543,8008,5821],{"class":5636},[5543,8010,5824],{"class":5556},[5543,8012,8013],{"class":5545,"line":5850},[5543,8014,5599],{"emptyLinePlaceholder":5598},[5543,8016,8017,8019,8021,8023],{"class":5545,"line":5855},[5543,8018,5678],{"class":5671},[5543,8020,5860],{"class":5556},[5543,8022,5863],{"class":5671},[5543,8024,5866],{"class":5556},[5543,8026,8027],{"class":5545,"line":5869},[5543,8028,5599],{"emptyLinePlaceholder":5598},[5543,8030,8031,8033,8035,8037,8039,8041,8044],{"class":5545,"line":5874},[5543,8032,5903],{"class":5556},[5543,8034,5907],{"class":5906},[5543,8036,5910],{"class":5556},[5543,8038,5913],{"class":5560},[5543,8040,5563],{"class":5556},[5543,8042,8043],{"class":5560},"2.8",[5543,8045,5921],{"class":5556},[5543,8047,8048,8051,8054,8057,8059,8061,8063,8065,8067,8069,8071,8074,8076,8079,8081,8083],{"class":5545,"line":5895},[5543,8049,8050],{"class":5556},"plt.barh([",[5543,8052,8053],{"class":5636},"'P(y=1)'",[5543,8055,8056],{"class":5556},"], [y_prob], ",[5543,8058,7559],{"class":5906},[5543,8060,5969],{"class":5556},[5543,8062,5880],{"class":5636},[5543,8064,7261],{"class":5671},[5543,8066,7264],{"class":5556},[5543,8068,7267],{"class":5560},[5543,8070,7270],{"class":5671},[5543,8072,8073],{"class":5636}," '#10b981'",[5543,8075,5563],{"class":5556},[5543,8077,8078],{"class":5906},"height",[5543,8080,5969],{"class":5556},[5543,8082,7267],{"class":5560},[5543,8084,5824],{"class":5556},[5543,8086,8087,8089,8091,8094,8096,8099,8102,8105,8107,8109,8112,8114,8116,8118,8120],{"class":5545,"line":5900},[5543,8088,8050],{"class":5556},[5543,8090,8053],{"class":5636},[5543,8092,8093],{"class":5556},"], [",[5543,8095,5481],{"class":5560},[5543,8097,8098],{"class":5556}," - y_prob], ",[5543,8100,8101],{"class":5906},"left",[5543,8103,8104],{"class":5556},"=[y_prob], ",[5543,8106,7559],{"class":5906},[5543,8108,5969],{"class":5556},[5543,8110,8111],{"class":5636},"'#e5e7eb'",[5543,8113,5563],{"class":5556},[5543,8115,8078],{"class":5906},[5543,8117,5969],{"class":5556},[5543,8119,7267],{"class":5560},[5543,8121,5824],{"class":5556},[5543,8123,8124,8126,8128,8130,8132,8134,8137,8139,8141,8143,8145,8147,8149,8151,8153],{"class":5545,"line":5924},[5543,8125,7629],{"class":5556},[5543,8127,7267],{"class":5560},[5543,8129,5563],{"class":5556},[5543,8131,7559],{"class":5906},[5543,8133,5969],{"class":5556},[5543,8135,8136],{"class":5636},"'#1f2937'",[5543,8138,5563],{"class":5556},[5543,8140,7599],{"class":5906},[5543,8142,5969],{"class":5556},[5543,8144,7604],{"class":5636},[5543,8146,5563],{"class":5556},[5543,8148,6001],{"class":5906},[5543,8150,5969],{"class":5556},[5543,8152,7622],{"class":5636},[5543,8154,5824],{"class":5556},[5543,8156,8157,8160,8162,8164,8166,8168,8170,8173,8175,8177,8179,8181,8183,8186,8188,8191,8193,8196,8198,8200],{"class":5545,"line":5942},[5543,8158,8159],{"class":5556},"plt.text(y_prob \u002F ",[5543,8161,5948],{"class":5560},[5543,8163,5563],{"class":5556},[5543,8165,5477],{"class":5560},[5543,8167,5563],{"class":5556},[5543,8169,5803],{"class":5802},[5543,8171,8172],{"class":5636},"'",[5543,8174,5809],{"class":5802},[5543,8176,7236],{"class":5556},[5543,8178,7972],{"class":5802},[5543,8180,8172],{"class":5636},[5543,8182,5563],{"class":5556},[5543,8184,8185],{"class":5906},"ha",[5543,8187,5969],{"class":5556},[5543,8189,8190],{"class":5636},"'center'",[5543,8192,5563],{"class":5556},[5543,8194,8195],{"class":5906},"va",[5543,8197,5969],{"class":5556},[5543,8199,8190],{"class":5636},[5543,8201,5975],{"class":5556},[5543,8203,8204,8207,8209,8211,8213,8215,8217,8219,8221,8224,8226,8229],{"class":5545,"line":5978},[5543,8205,8206],{"class":5906},"         color",[5543,8208,5969],{"class":5556},[5543,8210,5996],{"class":5636},[5543,8212,5563],{"class":5556},[5543,8214,6018],{"class":5906},[5543,8216,5969],{"class":5556},[5543,8218,6062],{"class":5560},[5543,8220,5563],{"class":5556},[5543,8222,8223],{"class":5906},"fontweight",[5543,8225,5969],{"class":5556},[5543,8227,8228],{"class":5636},"'bold'",[5543,8230,5824],{"class":5556},[5543,8232,8233,8236,8238,8240,8242],{"class":5545,"line":6007},[5543,8234,8235],{"class":5556},"plt.xlim(",[5543,8237,5477],{"class":5560},[5543,8239,5563],{"class":5556},[5543,8241,5481],{"class":5560},[5543,8243,5824],{"class":5556},[5543,8245,8246,8248,8251],{"class":5545,"line":6028},[5543,8247,6010],{"class":5556},[5543,8249,8250],{"class":5636},"'Ймовірність хвороби серця'",[5543,8252,5824],{"class":5556},[5543,8254,8255,8257,8260,8262,8264,8266,8269],{"class":5545,"line":6047},[5543,8256,6050],{"class":5556},[5543,8258,8259],{"class":5636},"'Ймовірність → клас через поріг'",[5543,8261,5563],{"class":5556},[5543,8263,6018],{"class":5906},[5543,8265,5969],{"class":5556},[5543,8267,8268],{"class":5560},"13",[5543,8270,5824],{"class":5556},[5543,8272,8273,8275,8278,8280,8283],{"class":5545,"line":6067},[5543,8274,6070],{"class":5556},[5543,8276,8277],{"class":5906},"loc",[5543,8279,5969],{"class":5556},[5543,8281,8282],{"class":5636},"'upper right'",[5543,8284,5824],{"class":5556},[5543,8286,8287],{"class":5545,"line":6083},[5543,8288,6102],{"class":5556},[6104,8290,8291,8298],{"v-slot:output":5538},[5261,8292,8293],{},[5448,8294],{"alt":8295,"className":8296,"src":8297},"Ймовірність хвороби серця пацієнта відносно порогу 0.5",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F20-risk-probability.png",[5532,8299,8302],{"className":8300,"code":8301,"language":6118},[6116],"Ймовірність хвороби серця: 73.2%\nПрогноз: підвищений ризик ⚠️\n",[5540,8303,8301],{"__ignoreMap":5538},[5422,8305,8306,8309,8310,8313],{},[5224,8307,8308],{},"Важливо:"," вихід логістичної регресії — це ",[5224,8311,8312],{},"ймовірність",", а не впевненість. Значення 0.6 означає, що з 100 подібних пацієнтів приблизно 60 мають хворобу, а 40 — ні. Це не означає \"пацієнт хворий на 60%\".",[5253,8315],{},[5256,8317,8319],{"id":8318},"коли-використовувати-логістичну-регресію","Коли використовувати логістичну регресію?",[5261,8321,8322],{},"Логістична регресія — простий, інтерпретований та ефективний алгоритм, але має свої обмеження.",[5331,8324,8326],{"id":8325},"переваги","Переваги",[5190,8328,8329,8342,8346,8355],{},[5193,8330,8333,8334,8337,8338,8341],{"icon":8331,"title":8332},"i-lucide-glasses","✅ Простота інтерпретації","Коефіцієнти ",[6363,8335],{"tex":8336,":inline":6366},"w_i"," показують ",[5224,8339,8340],{},"вплив кожної ознаки"," на ймовірність. Можна пояснити, чому модель прийняла рішення.",[5193,8343,8345],{"icon":92,"title":8344},"✅ Швидке навчання","Алгоритм дуже швидкий навіть на великих датасетах — використовує градієнтний спуск або аналітичне рішення.",[5193,8347,8350,8351,8354],{"icon":8348,"title":8349},"i-lucide-percent","✅ Ймовірнісні прогнози","Повертає ймовірність, що дозволяє оцінити ",[5224,8352,8353],{},"впевненість моделі"," та налаштувати поріг під бізнес-вимоги.",[5193,8356,8358],{"icon":2865,"title":8357},"✅ Не вимагає великих даних","Може працювати навіть на невеликих вибірках (від кількох сотень об'єктів).",[5331,8360,8362],{"id":8361},"обмеження","Обмеження",[5190,8364,8365,8374,8379],{},[5193,8366,8369,8370,8373],{"icon":8367,"title":8368},"i-lucide-tally-3","❌ Тільки лінійна розділова межа","Модель малює ",[5224,8371,8372],{},"пряму лінію"," між класами. Якщо дані лінійно нероздільні, потрібні нелінійні алгоритми (дерева рішень, SVM з RBF ядром).",[5193,8375,8378],{"icon":8376,"title":8377},"i-lucide-triangle-alert","❌ Чутливість до мультиколінеарності","Якщо ознаки сильно корелюють між собою, коефіцієнти стають нестабільними. Потрібна регуляризація (Ridge, Lasso).",[5193,8380,8382],{"icon":658,"title":8381},"❌ Не працює зі складними залежностями","Для нелінійних паттернів (XOR-задача) потрібні поліноміальні ознаки або глибші моделі.",[5422,8384,8385,8388,8389,8392],{},[5224,8386,8387],{},"Золоте правило:"," почніть з логістичної регресії як базової моделі (",[5296,8390,8391],{},"baseline","). Якщо вона дає результат >80% точності — чудово! Якщо ні — переходьте до складніших моделей (Random Forest, Gradient Boosting, нейронні мережі).",[5253,8394],{},[5256,8396,8398],{"id":8397},"резюме","Резюме",[5190,8400,8401,8410,8422,8427,8434,8443],{},[5193,8402,8405,8406,8409],{"icon":8403,"title":8404},"i-lucide-tag","📌 Класифікація","Задача передбачення ",[5224,8407,8408],{},"дискретної категорії"," (класу) на основі ознак. Результат — одна з фіксованих міток.",[5193,8411,8414,8417,8418,8421],{"icon":8412,"title":8413},"i-lucide-git-fork","📌 Бінарна vs Багатокласова",[5224,8415,8416],{},"Бінарна:"," 2 класи (спам\u002Fне спам). ",[5224,8419,8420],{},"Багатокласова:"," 3+ класів (кіт\u002Fсобака\u002Fпташка).",[5193,8423,8426],{"icon":8424,"title":8425},"i-lucide-sigma","📌 Логістична регресія","Алгоритм для класифікації, що моделює ймовірність через лінійну комбінацію + сигмоїду.",[5193,8428,8431,8433],{"icon":8429,"title":8430},"i-lucide-waves","📌 Сигмоїдна функція",[6363,8432],{"tex":7318,":inline":6366}," — перетворює будь-яке число у ймовірність від 0 до 1.",[5193,8435,8438,8439,8442],{"icon":8436,"title":8437},"i-lucide-ruler","📌 Поріг рішення","Зазвичай 0.5: якщо ",[6363,8440],{"tex":8441,":inline":6366},"\\sigma(z) \\ge 0.5",", клас 1; інакше клас 0.",[5193,8444,8447],{"icon":8445,"title":8446},"i-lucide-sparkles","📌 Переваги","Швидка, інтерпретована, ймовірнісна, працює на малих даних.",[5253,8449],{},[5256,8451,8453],{"id":8452},"розділова-межа-decision-boundary","Розділова межа (Decision Boundary)",[5261,8455,8456,8457,5294,8460,8463],{},"Одна з найважливіших концепцій у класифікації — ",[5224,8458,8459],{},"розділова межа",[5296,8461,8462],{},"decision boundary","). Це геометричне представлення того, як модель \"розрізає\" простір ознак на області, що відповідають різним класам.",[5261,8465,8466],{},[5448,8467],{"alt":8468,"className":8469,"src":8470},"Розділова межа логістичної регресії у двовимірному просторі",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F05-decision-boundary.png",[5331,8472,7315],{"id":8473},"математичне-визначення-1",[5261,8475,8476,8477,5273],{},"Розділова межа — це множина точок у просторі ознак, де ",[5224,8478,8479],{},"ймовірність належності до класу 1 дорівнює 0.5",[6363,8481],{"tex":8482},"\\sigma(z) = 0.5 \\quad \\Leftrightarrow \\quad z = 0",[5261,8484,8485,8486,8489],{},"Оскільки ",[6363,8487],{"tex":8488,":inline":6366},"z = \\mathbf{w}^T \\mathbf{x} + b",", розділова межа визначається рівнянням:",[6363,8491],{"tex":8492},"w_1 x_1 + w_2 x_2 + \\dots + w_n x_n + b = 0",[5301,8494,8495,8498,8499,8502,8503,8505,8506,8509,8510,8513,8514,8517,8518,8520],{},[5224,8496,8497],{},"Геометрична інтерпретація:"," для двох ознак (",[6363,8500],{"tex":8501,":inline":6366},"x_1, x_2",") це рівняння задає ",[5224,8504,8372],{}," у площині. Для трьох ознак — ",[5224,8507,8508],{},"площину"," у 3D просторі. Для ",[6363,8511],{"tex":8512,":inline":6366},"n"," ознак — ",[5224,8515,8516],{},"гіперплощину"," у ",[6363,8519],{"tex":8512,":inline":6366},"-вимірному просторі.",[5331,8522,8524],{"id":8523},"приклад-у-двовимірному-просторі","Приклад у двовимірному просторі",[5261,8526,8527],{},"Розглянемо задачу класифікації студентів на основі двох іспитів:",[5736,8529,8531,8537,8947],{"title":8530,"kernel":6580},"decision_boundary_2d.ipynb",[6582,8532,8533],{"type":6584},[5331,8534,8536],{"id":8535},"візуалізація-розділової-межі","Візуалізація розділової межі",[6582,8538,8540,8939],{"execution-count":5481,"execution-time":8539},"0.22s",[5532,8541,8543],{"className":5534,"code":8542,"language":5537,"meta":5538,"style":5538},"import numpy as np\nimport matplotlib.pyplot as plt\nfrom sklearn.linear_model import LogisticRegression\n\n# Дані: оцінки з двох іспитів та результат (0 = не прийнято, 1 = прийнято)\nX_train = np.array([\n    [45, 85], [55, 70], [60, 90], [65, 75], [70, 88],\n    [75, 92], [80, 85], [85, 95], [30, 50], [40, 60],\n    [50, 65], [35, 55], [42, 68]\n])\ny_train = np.array([0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0])\n\n# Навчання моделі\nmodel = LogisticRegression()\nmodel.fit(X_train, y_train)\n\n# Отримання параметрів\nw1, w2 = model.coef_[0]\nb = model.intercept_[0]\n\nprint(f\"Рівняння розділової межі:\")\nprint(f\"{w1:.3f} * x1 + {w2:.3f} * x2 + {b:.3f} = 0\")\nprint(f\"\\nСпрощено (x2 через x1):\")\nx2_formula = f\"x2 = {-w1\u002Fw2:.3f} * x1 + {-b\u002Fw2:.3f}\"\nprint(x2_formula)\n",[5540,8544,8545,8555,8565,8575,8579,8584,8589,8642,8689,8719,8723,8779,8783,8788,8793,8798,8802,8807,8816,8825,8829,8842,8884,8903,8932],{"__ignoreMap":5538},[5543,8546,8547,8549,8551,8553],{"class":5545,"line":5546},[5543,8548,5678],{"class":5671},[5543,8550,6603],{"class":5556},[5543,8552,5863],{"class":5671},[5543,8554,6608],{"class":5556},[5543,8556,8557,8559,8561,8563],{"class":5545,"line":5553},[5543,8558,5678],{"class":5671},[5543,8560,5860],{"class":5556},[5543,8562,5863],{"class":5671},[5543,8564,5866],{"class":5556},[5543,8566,8567,8569,8571,8573],{"class":5545,"line":5595},[5543,8568,5672],{"class":5671},[5543,8570,5762],{"class":5556},[5543,8572,5678],{"class":5671},[5543,8574,5767],{"class":5556},[5543,8576,8577],{"class":5545,"line":5602},[5543,8578,5599],{"emptyLinePlaceholder":5598},[5543,8580,8581],{"class":5545,"line":5608},[5543,8582,8583],{"class":5549},"# Дані: оцінки з двох іспитів та результат (0 = не прийнято, 1 = прийнято)\n",[5543,8585,8586],{"class":5545,"line":5614},[5543,8587,8588],{"class":5556},"X_train = np.array([\n",[5543,8590,8591,8594,8596,8598,8601,8603,8606,8608,8611,8613,8615,8617,8620,8622,8625,8627,8630,8632,8634,8636,8639],{"class":5545,"line":5689},[5543,8592,8593],{"class":5556},"    [",[5543,8595,6691],{"class":5560},[5543,8597,5563],{"class":5556},[5543,8599,8600],{"class":5560},"85",[5543,8602,8093],{"class":5556},[5543,8604,8605],{"class":5560},"55",[5543,8607,5563],{"class":5556},[5543,8609,8610],{"class":5560},"70",[5543,8612,8093],{"class":5556},[5543,8614,5972],{"class":5560},[5543,8616,5563],{"class":5556},[5543,8618,8619],{"class":5560},"90",[5543,8621,8093],{"class":5556},[5543,8623,8624],{"class":5560},"65",[5543,8626,5563],{"class":5556},[5543,8628,8629],{"class":5560},"75",[5543,8631,8093],{"class":5556},[5543,8633,8610],{"class":5560},[5543,8635,5563],{"class":5556},[5543,8637,8638],{"class":5560},"88",[5543,8640,8641],{"class":5556},"],\n",[5543,8643,8644,8646,8648,8650,8653,8655,8658,8660,8662,8664,8666,8668,8671,8673,8675,8677,8679,8681,8683,8685,8687],{"class":5545,"line":5695},[5543,8645,8593],{"class":5556},[5543,8647,8629],{"class":5560},[5543,8649,5563],{"class":5556},[5543,8651,8652],{"class":5560},"92",[5543,8654,8093],{"class":5556},[5543,8656,8657],{"class":5560},"80",[5543,8659,5563],{"class":5556},[5543,8661,8600],{"class":5560},[5543,8663,8093],{"class":5556},[5543,8665,8600],{"class":5560},[5543,8667,5563],{"class":5556},[5543,8669,8670],{"class":5560},"95",[5543,8672,8093],{"class":5556},[5543,8674,6676],{"class":5560},[5543,8676,5563],{"class":5556},[5543,8678,6788],{"class":5560},[5543,8680,8093],{"class":5556},[5543,8682,6686],{"class":5560},[5543,8684,5563],{"class":5556},[5543,8686,5972],{"class":5560},[5543,8688,8641],{"class":5556},[5543,8690,8691,8693,8695,8697,8699,8701,8703,8705,8707,8709,8712,8714,8717],{"class":5545,"line":5827},[5543,8692,8593],{"class":5556},[5543,8694,6788],{"class":5560},[5543,8696,5563],{"class":5556},[5543,8698,8624],{"class":5560},[5543,8700,8093],{"class":5556},[5543,8702,6681],{"class":5560},[5543,8704,5563],{"class":5556},[5543,8706,8605],{"class":5560},[5543,8708,8093],{"class":5556},[5543,8710,8711],{"class":5560},"42",[5543,8713,5563],{"class":5556},[5543,8715,8716],{"class":5560},"68",[5543,8718,5657],{"class":5556},[5543,8720,8721],{"class":5545,"line":5850},[5543,8722,5592],{"class":5556},[5543,8724,8725,8727,8729,8731,8733,8735,8737,8739,8741,8743,8745,8747,8749,8751,8753,8755,8757,8759,8761,8763,8765,8767,8769,8771,8773,8775,8777],{"class":5545,"line":5855},[5543,8726,5557],{"class":5556},[5543,8728,5477],{"class":5560},[5543,8730,5563],{"class":5556},[5543,8732,5477],{"class":5560},[5543,8734,5563],{"class":5556},[5543,8736,5481],{"class":5560},[5543,8738,5563],{"class":5556},[5543,8740,5477],{"class":5560},[5543,8742,5563],{"class":5556},[5543,8744,5481],{"class":5560},[5543,8746,5563],{"class":5556},[5543,8748,5481],{"class":5560},[5543,8750,5563],{"class":5556},[5543,8752,5481],{"class":5560},[5543,8754,5563],{"class":5556},[5543,8756,5481],{"class":5560},[5543,8758,5563],{"class":5556},[5543,8760,5477],{"class":5560},[5543,8762,5563],{"class":5556},[5543,8764,5477],{"class":5560},[5543,8766,5563],{"class":5556},[5543,8768,5477],{"class":5560},[5543,8770,5563],{"class":5556},[5543,8772,5477],{"class":5560},[5543,8774,5563],{"class":5556},[5543,8776,5477],{"class":5560},[5543,8778,5592],{"class":5556},[5543,8780,8781],{"class":5545,"line":5869},[5543,8782,5599],{"emptyLinePlaceholder":5598},[5543,8784,8785],{"class":5545,"line":5874},[5543,8786,8787],{"class":5549},"# Навчання моделі\n",[5543,8789,8790],{"class":5545,"line":5895},[5543,8791,8792],{"class":5556},"model = LogisticRegression()\n",[5543,8794,8795],{"class":5545,"line":5900},[5543,8796,8797],{"class":5556},"model.fit(X_train, y_train)\n",[5543,8799,8800],{"class":5545,"line":5924},[5543,8801,5599],{"emptyLinePlaceholder":5598},[5543,8803,8804],{"class":5545,"line":5942},[5543,8805,8806],{"class":5549},"# Отримання параметрів\n",[5543,8808,8809,8812,8814],{"class":5545,"line":5978},[5543,8810,8811],{"class":5556},"w1, w2 = model.coef_[",[5543,8813,5477],{"class":5560},[5543,8815,5657],{"class":5556},[5543,8817,8818,8821,8823],{"class":5545,"line":6007},[5543,8819,8820],{"class":5556},"b = model.intercept_[",[5543,8822,5477],{"class":5560},[5543,8824,5657],{"class":5556},[5543,8826,8827],{"class":5545,"line":6028},[5543,8828,5599],{"emptyLinePlaceholder":5598},[5543,8830,8831,8833,8835,8837,8840],{"class":5545,"line":6047},[5543,8832,5796],{"class":5795},[5543,8834,5799],{"class":5556},[5543,8836,5803],{"class":5802},[5543,8838,8839],{"class":5636},"\"Рівняння розділової межі:\"",[5543,8841,5824],{"class":5556},[5543,8843,8844,8846,8848,8850,8852,8854,8857,8859,8862,8864,8867,8869,8872,8874,8877,8879,8882],{"class":5545,"line":6067},[5543,8845,5796],{"class":5795},[5543,8847,5799],{"class":5556},[5543,8849,5803],{"class":5802},[5543,8851,5821],{"class":5636},[5543,8853,5809],{"class":5802},[5543,8855,8856],{"class":5556},"w1",[5543,8858,6841],{"class":5802},[5543,8860,8861],{"class":5636}," * x1 + ",[5543,8863,5809],{"class":5802},[5543,8865,8866],{"class":5556},"w2",[5543,8868,6841],{"class":5802},[5543,8870,8871],{"class":5636}," * x2 + ",[5543,8873,5809],{"class":5802},[5543,8875,8876],{"class":5556},"b",[5543,8878,6841],{"class":5802},[5543,8880,8881],{"class":5636}," = 0\"",[5543,8883,5824],{"class":5556},[5543,8885,8886,8888,8890,8892,8894,8898,8901],{"class":5545,"line":6083},[5543,8887,5796],{"class":5795},[5543,8889,5799],{"class":5556},[5543,8891,5803],{"class":5802},[5543,8893,5821],{"class":5636},[5543,8895,8897],{"class":8896},"sjcCO","\\n",[5543,8899,8900],{"class":5636},"Спрощено (x2 через x1):\"",[5543,8902,5824],{"class":5556},[5543,8904,8905,8908,8910,8913,8915,8918,8920,8922,8924,8927,8929],{"class":5545,"line":6099},[5543,8906,8907],{"class":5556},"x2_formula = ",[5543,8909,5803],{"class":5802},[5543,8911,8912],{"class":5636},"\"x2 = ",[5543,8914,5809],{"class":5802},[5543,8916,8917],{"class":5556},"-w1\u002Fw2",[5543,8919,6841],{"class":5802},[5543,8921,8861],{"class":5636},[5543,8923,5809],{"class":5802},[5543,8925,8926],{"class":5556},"-b\u002Fw2",[5543,8928,6841],{"class":5802},[5543,8930,8931],{"class":5636},"\"\n",[5543,8933,8934,8936],{"class":5545,"line":7782},[5543,8935,5796],{"class":5795},[5543,8937,8938],{"class":5556},"(x2_formula)\n",[6104,8940,8941],{"v-slot:output":5538},[5532,8942,8945],{"className":8943,"code":8944,"language":6118},[6116],"Рівняння розділової межі:\n0.057 * x1 + 0.089 * x2 + -6.421 = 0\n\nСпрощено (x2 через x1):\nx2 = -0.641 * x1 + 72.146\n",[5540,8946,8944],{"__ignoreMap":5538},[6582,8948,8950,9388],{"execution-count":5948,"execution-time":8949},"0.28s",[5532,8951,8953],{"className":5534,"code":8952,"language":5537,"meta":5538,"style":5538},"# Побудова графіка з розділовою межею\nplt.figure(figsize=(10, 7))\n\n# Точки класу 0 (не прийнято)\nplt.scatter(X_train[y_train == 0, 0], X_train[y_train == 0, 1],\n            c='#ef4444', marker='x', s=100, linewidths=2,\n            label='Клас 0 (не прийнято)', alpha=0.8)\n\n# Точки класу 1 (прийнято)\nplt.scatter(X_train[y_train == 1, 0], X_train[y_train == 1, 1],\n            c='#10b981', marker='o', s=100, linewidths=2,\n            label='Клас 1 (прийнято)', alpha=0.8)\n\n# Розділова межа\nx1_line = np.linspace(20, 90, 100)\nx2_line = -(w1 * x1_line + b) \u002F w2\nplt.plot(x1_line, x2_line, 'b--', linewidth=2.5, label='Розділова межа')\n\n# Регіони класів (фон)\nxx, yy = np.meshgrid(np.linspace(20, 90, 200), np.linspace(40, 100, 200))\nZ = model.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)\nplt.contourf(xx, yy, Z, alpha=0.1, levels=[-0.5, 0.5, 1.5],\n             colors=['#ef4444', '#10b981'])\n\nplt.xlabel('Іспит 1 (бали)', fontsize=12)\nplt.ylabel('Іспит 2 (бали)', fontsize=12)\nplt.title('Розділова межа логістичної регресії', fontsize=14)\nplt.legend(fontsize=11)\nplt.grid(alpha=0.3)\nplt.show()\n",[5540,8954,8955,8960,8977,8981,8986,9008,9046,9066,9070,9075,9095,9130,9149,9153,9158,9175,9180,9207,9211,9216,9246,9251,9284,9300,9304,9321,9338,9356,9370,9383],{"__ignoreMap":5538},[5543,8956,8957],{"class":5545,"line":5546},[5543,8958,8959],{"class":5549},"# Побудова графіка з розділовою межею\n",[5543,8961,8962,8964,8966,8968,8970,8972,8975],{"class":5545,"line":5553},[5543,8963,5903],{"class":5556},[5543,8965,5907],{"class":5906},[5543,8967,5910],{"class":5556},[5543,8969,6783],{"class":5560},[5543,8971,5563],{"class":5556},[5543,8973,8974],{"class":5560},"7",[5543,8976,5921],{"class":5556},[5543,8978,8979],{"class":5545,"line":5595},[5543,8980,5599],{"emptyLinePlaceholder":5598},[5543,8982,8983],{"class":5545,"line":5602},[5543,8984,8985],{"class":5549},"# Точки класу 0 (не прийнято)\n",[5543,8987,8988,8991,8993,8995,8997,9000,9002,9004,9006],{"class":5545,"line":5608},[5543,8989,8990],{"class":5556},"plt.scatter(X_train[y_train == ",[5543,8992,5477],{"class":5560},[5543,8994,5563],{"class":5556},[5543,8996,5477],{"class":5560},[5543,8998,8999],{"class":5556},"], X_train[y_train == ",[5543,9001,5477],{"class":5560},[5543,9003,5563],{"class":5556},[5543,9005,5481],{"class":5560},[5543,9007,8641],{"class":5556},[5543,9009,9010,9013,9015,9017,9019,9022,9024,9027,9029,9031,9033,9035,9037,9040,9042,9044],{"class":5545,"line":5614},[5543,9011,9012],{"class":5906},"            c",[5543,9014,5969],{"class":5556},[5543,9016,5880],{"class":5636},[5543,9018,5563],{"class":5556},[5543,9020,9021],{"class":5906},"marker",[5543,9023,5969],{"class":5556},[5543,9025,9026],{"class":5636},"'x'",[5543,9028,5563],{"class":5556},[5543,9030,5966],{"class":5906},[5543,9032,5969],{"class":5556},[5543,9034,6793],{"class":5560},[5543,9036,5563],{"class":5556},[5543,9038,9039],{"class":5906},"linewidths",[5543,9041,5969],{"class":5556},[5543,9043,5948],{"class":5560},[5543,9045,5975],{"class":5556},[5543,9047,9048,9051,9053,9056,9058,9060,9062,9064],{"class":5545,"line":5689},[5543,9049,9050],{"class":5906},"            label",[5543,9052,5969],{"class":5556},[5543,9054,9055],{"class":5636},"'Клас 0 (не прийнято)'",[5543,9057,5563],{"class":5556},[5543,9059,6089],{"class":5906},[5543,9061,5969],{"class":5556},[5543,9063,5986],{"class":5560},[5543,9065,5824],{"class":5556},[5543,9067,9068],{"class":5545,"line":5695},[5543,9069,5599],{"emptyLinePlaceholder":5598},[5543,9071,9072],{"class":5545,"line":5827},[5543,9073,9074],{"class":5549},"# Точки класу 1 (прийнято)\n",[5543,9076,9077,9079,9081,9083,9085,9087,9089,9091,9093],{"class":5545,"line":5850},[5543,9078,8990],{"class":5556},[5543,9080,5481],{"class":5560},[5543,9082,5563],{"class":5556},[5543,9084,5477],{"class":5560},[5543,9086,8999],{"class":5556},[5543,9088,5481],{"class":5560},[5543,9090,5563],{"class":5556},[5543,9092,5481],{"class":5560},[5543,9094,8641],{"class":5556},[5543,9096,9097,9099,9101,9103,9105,9107,9109,9112,9114,9116,9118,9120,9122,9124,9126,9128],{"class":5545,"line":5855},[5543,9098,9012],{"class":5906},[5543,9100,5969],{"class":5556},[5543,9102,5890],{"class":5636},[5543,9104,5563],{"class":5556},[5543,9106,9021],{"class":5906},[5543,9108,5969],{"class":5556},[5543,9110,9111],{"class":5636},"'o'",[5543,9113,5563],{"class":5556},[5543,9115,5966],{"class":5906},[5543,9117,5969],{"class":5556},[5543,9119,6793],{"class":5560},[5543,9121,5563],{"class":5556},[5543,9123,9039],{"class":5906},[5543,9125,5969],{"class":5556},[5543,9127,5948],{"class":5560},[5543,9129,5975],{"class":5556},[5543,9131,9132,9134,9136,9139,9141,9143,9145,9147],{"class":5545,"line":5869},[5543,9133,9050],{"class":5906},[5543,9135,5969],{"class":5556},[5543,9137,9138],{"class":5636},"'Клас 1 (прийнято)'",[5543,9140,5563],{"class":5556},[5543,9142,6089],{"class":5906},[5543,9144,5969],{"class":5556},[5543,9146,5986],{"class":5560},[5543,9148,5824],{"class":5556},[5543,9150,9151],{"class":5545,"line":5874},[5543,9152,5599],{"emptyLinePlaceholder":5598},[5543,9154,9155],{"class":5545,"line":5895},[5543,9156,9157],{"class":5549},"# Розділова межа\n",[5543,9159,9160,9163,9165,9167,9169,9171,9173],{"class":5545,"line":5900},[5543,9161,9162],{"class":5556},"x1_line = np.linspace(",[5543,9164,6656],{"class":5560},[5543,9166,5563],{"class":5556},[5543,9168,8619],{"class":5560},[5543,9170,5563],{"class":5556},[5543,9172,6793],{"class":5560},[5543,9174,5824],{"class":5556},[5543,9176,9177],{"class":5545,"line":5924},[5543,9178,9179],{"class":5556},"x2_line = -(w1 * x1_line + b) \u002F w2\n",[5543,9181,9182,9185,9188,9190,9192,9194,9196,9198,9200,9202,9205],{"class":5545,"line":5942},[5543,9183,9184],{"class":5556},"plt.plot(x1_line, x2_line, ",[5543,9186,9187],{"class":5636},"'b--'",[5543,9189,5563],{"class":5556},[5543,9191,7549],{"class":5906},[5543,9193,5969],{"class":5556},[5543,9195,7554],{"class":5560},[5543,9197,5563],{"class":5556},[5543,9199,6001],{"class":5906},[5543,9201,5969],{"class":5556},[5543,9203,9204],{"class":5636},"'Розділова межа'",[5543,9206,5824],{"class":5556},[5543,9208,9209],{"class":5545,"line":5978},[5543,9210,5599],{"emptyLinePlaceholder":5598},[5543,9212,9213],{"class":5545,"line":6007},[5543,9214,9215],{"class":5549},"# Регіони класів (фон)\n",[5543,9217,9218,9221,9223,9225,9227,9229,9231,9234,9236,9238,9240,9242,9244],{"class":5545,"line":6028},[5543,9219,9220],{"class":5556},"xx, yy = np.meshgrid(np.linspace(",[5543,9222,6656],{"class":5560},[5543,9224,5563],{"class":5556},[5543,9226,8619],{"class":5560},[5543,9228,5563],{"class":5556},[5543,9230,7509],{"class":5560},[5543,9232,9233],{"class":5556},"), np.linspace(",[5543,9235,6686],{"class":5560},[5543,9237,5563],{"class":5556},[5543,9239,6793],{"class":5560},[5543,9241,5563],{"class":5556},[5543,9243,7509],{"class":5560},[5543,9245,5921],{"class":5556},[5543,9247,9248],{"class":5545,"line":6047},[5543,9249,9250],{"class":5556},"Z = model.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)\n",[5543,9252,9253,9256,9258,9260,9263,9265,9268,9271,9273,9275,9277,9279,9282],{"class":5545,"line":6067},[5543,9254,9255],{"class":5556},"plt.contourf(xx, yy, Z, ",[5543,9257,6089],{"class":5906},[5543,9259,5969],{"class":5556},[5543,9261,9262],{"class":5560},"0.1",[5543,9264,5563],{"class":5556},[5543,9266,9267],{"class":5906},"levels",[5543,9269,9270],{"class":5556},"=[-",[5543,9272,7267],{"class":5560},[5543,9274,5563],{"class":5556},[5543,9276,7267],{"class":5560},[5543,9278,5563],{"class":5556},[5543,9280,9281],{"class":5560},"1.5",[5543,9283,8641],{"class":5556},[5543,9285,9286,9289,9292,9294,9296,9298],{"class":5545,"line":6083},[5543,9287,9288],{"class":5906},"             colors",[5543,9290,9291],{"class":5556},"=[",[5543,9293,5880],{"class":5636},[5543,9295,5563],{"class":5556},[5543,9297,5890],{"class":5636},[5543,9299,5592],{"class":5556},[5543,9301,9302],{"class":5545,"line":6099},[5543,9303,5599],{"emptyLinePlaceholder":5598},[5543,9305,9306,9308,9311,9313,9315,9317,9319],{"class":5545,"line":7782},[5543,9307,6010],{"class":5556},[5543,9309,9310],{"class":5636},"'Іспит 1 (бали)'",[5543,9312,5563],{"class":5556},[5543,9314,6018],{"class":5906},[5543,9316,5969],{"class":5556},[5543,9318,6023],{"class":5560},[5543,9320,5824],{"class":5556},[5543,9322,9323,9325,9328,9330,9332,9334,9336],{"class":5545,"line":7809},[5543,9324,6031],{"class":5556},[5543,9326,9327],{"class":5636},"'Іспит 2 (бали)'",[5543,9329,5563],{"class":5556},[5543,9331,6018],{"class":5906},[5543,9333,5969],{"class":5556},[5543,9335,6023],{"class":5560},[5543,9337,5824],{"class":5556},[5543,9339,9341,9343,9346,9348,9350,9352,9354],{"class":5545,"line":9340},27,[5543,9342,6050],{"class":5556},[5543,9344,9345],{"class":5636},"'Розділова межа логістичної регресії'",[5543,9347,5563],{"class":5556},[5543,9349,6018],{"class":5906},[5543,9351,5969],{"class":5556},[5543,9353,6062],{"class":5560},[5543,9355,5824],{"class":5556},[5543,9357,9359,9361,9363,9365,9368],{"class":5545,"line":9358},28,[5543,9360,6070],{"class":5556},[5543,9362,6018],{"class":5906},[5543,9364,5969],{"class":5556},[5543,9366,9367],{"class":5560},"11",[5543,9369,5824],{"class":5556},[5543,9371,9373,9375,9377,9379,9381],{"class":5545,"line":9372},29,[5543,9374,6086],{"class":5556},[5543,9376,6089],{"class":5906},[5543,9378,5969],{"class":5556},[5543,9380,6094],{"class":5560},[5543,9382,5824],{"class":5556},[5543,9384,9386],{"class":5545,"line":9385},30,[5543,9387,6102],{"class":5556},[6104,9389,9390],{"v-slot:output":5538},[5448,9391],{"alt":9392,"className":9393,"src":8470},"Розділова межа логістичної регресії у просторі балів за два іспити",[5452],[5331,9395,9397],{"id":9396},"властивості-розділової-межі","Властивості розділової межі",[7353,9399,9400,9408,9419,9430],{},[7356,9401,9403,9404,9407],{"name":9402},"Лінійність","Для логістичної регресії розділова межа ",[5224,9405,9406],{},"завжди лінійна"," (пряма, площина, гіперплощина). Це обмеження алгоритму.",[7356,9409,8333,9411,9414,9415,9418],{"name":9410},"Нахил визначається вагами",[6363,9412],{"tex":9413,":inline":6366},"w_1, w_2, \\dots, w_n"," визначають ",[5224,9416,9417],{},"орієнтацію"," межі у просторі ознак.",[7356,9420,9422,9423,9425,9426,9429],{"name":9421},"Зміщення визначається bias","Вільний член ",[6363,9424],{"tex":8876,":inline":6366}," визначає ",[5224,9427,9428],{},"положення"," межі вздовж осей (паралельний зсув).",[7356,9431,9433,9434,9437,9438,9441],{"name":9432},"Перпендикулярність до вектора ваг","Вектор ваг ",[6363,9435],{"tex":9436,":inline":6366},"\\mathbf{w}"," завжди ",[5224,9439,9440],{},"перпендикулярний"," до розділової межі. Він вказує напрямок, у якому ймовірність класу 1 зростає найшвидше.",[5301,9443,9444,9447],{},[5224,9445,9446],{},"Аналогія (Кордон між країнами):"," розділова межа — це як державний кордон на карті. З одного боку — територія класу 0 (наприклад, Польща), з іншого — класу 1 (Україна). Точки на самій межі — це \"нейтральна зона\", де модель не впевнена (ймовірність = 50%).",[5253,9449],{},[5256,9451,9453],{"id":9452},"вплив-параметрів-на-розділову-межу","Вплив параметрів на розділову межу",[5261,9455,9456,9457,9460,9461,9463],{},"Параметри моделі ",[6363,9458],{"tex":9459,":inline":6366},"w"," (ваги) та ",[6363,9462],{"tex":8876,":inline":6366}," (зміщення) повністю визначають положення та орієнтацію розділової межі.",[5331,9465,9467],{"id":9466},"вплив-ваг-w","Вплив ваг (w)",[5261,9469,9470,9471,9474,9475,9478],{},"Ваги визначають ",[5224,9472,9473],{},"нахил"," (кут) розділової межі та ",[5224,9476,9477],{},"важливість"," кожної ознаки.",[5736,9480,9482,9793],{"title":9481,"execution-count":5481},"weights_impact.ipynb",[5532,9483,9485],{"className":5534,"code":9484,"language":5537,"meta":5538,"style":5538},"# Приклад 1: рівноважні ваги\nw = np.array([1, 1])  # x1 та x2 однаково важливі\nb = -100\n\n# Рівняння: x1 + x2 = 100\n# Це пряма під кутом 45° (нахил -1)\n\nprint(\"Приклад 1: w = [1, 1], b = -100\")\nprint(\"Розділова межа: x2 = -x1 + 100 (діагональ)\")\n\nimport matplotlib.pyplot as plt\n\nx1 = np.linspace(0, 100, 100)\nx2 = -(w[0] * x1 + b) \u002F w[1]\n\nplt.figure(figsize=(7, 6))\nplt.plot(x1, x2, color='#3b82f6', linewidth=2.5, label='x1 + x2 = 100')\nplt.fill_between(x1, x2, 100, color='#10b981', alpha=0.12, label='Клас 1')\nplt.fill_between(x1, 0, x2, color='#ef4444', alpha=0.12, label='Клас 0')\nplt.xlim(0, 100); plt.ylim(0, 100)\nplt.xlabel('x1'); plt.ylabel('x2')\nplt.title('w = [1, 1], b = -100: діагональна межа (45°)', fontsize=13)\nplt.legend(); plt.grid(alpha=0.3)\nplt.show()\n",[5540,9486,9487,9492,9507,9514,9518,9523,9528,9532,9543,9554,9558,9568,9572,9589,9603,9607,9623,9653,9688,9723,9744,9759,9776,9789],{"__ignoreMap":5538},[5543,9488,9489],{"class":5545,"line":5546},[5543,9490,9491],{"class":5549},"# Приклад 1: рівноважні ваги\n",[5543,9493,9494,9496,9498,9500,9502,9504],{"class":5545,"line":5553},[5543,9495,7115],{"class":5556},[5543,9497,5481],{"class":5560},[5543,9499,5563],{"class":5556},[5543,9501,5481],{"class":5560},[5543,9503,7107],{"class":5556},[5543,9505,9506],{"class":5549},"# x1 та x2 однаково важливі\n",[5543,9508,9509,9511],{"class":5545,"line":5595},[5543,9510,7130],{"class":5556},[5543,9512,9513],{"class":5560},"100\n",[5543,9515,9516],{"class":5545,"line":5602},[5543,9517,5599],{"emptyLinePlaceholder":5598},[5543,9519,9520],{"class":5545,"line":5608},[5543,9521,9522],{"class":5549},"# Рівняння: x1 + x2 = 100\n",[5543,9524,9525],{"class":5545,"line":5614},[5543,9526,9527],{"class":5549},"# Це пряма під кутом 45° (нахил -1)\n",[5543,9529,9530],{"class":5545,"line":5689},[5543,9531,5599],{"emptyLinePlaceholder":5598},[5543,9533,9534,9536,9538,9541],{"class":5545,"line":5695},[5543,9535,5796],{"class":5795},[5543,9537,5799],{"class":5556},[5543,9539,9540],{"class":5636},"\"Приклад 1: w = [1, 1], b = -100\"",[5543,9542,5824],{"class":5556},[5543,9544,9545,9547,9549,9552],{"class":5545,"line":5827},[5543,9546,5796],{"class":5795},[5543,9548,5799],{"class":5556},[5543,9550,9551],{"class":5636},"\"Розділова межа: x2 = -x1 + 100 (діагональ)\"",[5543,9553,5824],{"class":5556},[5543,9555,9556],{"class":5545,"line":5850},[5543,9557,5599],{"emptyLinePlaceholder":5598},[5543,9559,9560,9562,9564,9566],{"class":5545,"line":5855},[5543,9561,5678],{"class":5671},[5543,9563,5860],{"class":5556},[5543,9565,5863],{"class":5671},[5543,9567,5866],{"class":5556},[5543,9569,9570],{"class":5545,"line":5869},[5543,9571,5599],{"emptyLinePlaceholder":5598},[5543,9573,9574,9577,9579,9581,9583,9585,9587],{"class":5545,"line":5874},[5543,9575,9576],{"class":5556},"x1 = np.linspace(",[5543,9578,5477],{"class":5560},[5543,9580,5563],{"class":5556},[5543,9582,6793],{"class":5560},[5543,9584,5563],{"class":5556},[5543,9586,6793],{"class":5560},[5543,9588,5824],{"class":5556},[5543,9590,9591,9594,9596,9599,9601],{"class":5545,"line":5895},[5543,9592,9593],{"class":5556},"x2 = -(w[",[5543,9595,5477],{"class":5560},[5543,9597,9598],{"class":5556},"] * x1 + b) \u002F w[",[5543,9600,5481],{"class":5560},[5543,9602,5657],{"class":5556},[5543,9604,9605],{"class":5545,"line":5900},[5543,9606,5599],{"emptyLinePlaceholder":5598},[5543,9608,9609,9611,9613,9615,9617,9619,9621],{"class":5545,"line":5924},[5543,9610,5903],{"class":5556},[5543,9612,5907],{"class":5906},[5543,9614,5910],{"class":5556},[5543,9616,8974],{"class":5560},[5543,9618,5563],{"class":5556},[5543,9620,5918],{"class":5560},[5543,9622,5921],{"class":5556},[5543,9624,9625,9628,9630,9632,9634,9636,9638,9640,9642,9644,9646,9648,9651],{"class":5545,"line":5942},[5543,9626,9627],{"class":5556},"plt.plot(x1, x2, ",[5543,9629,7559],{"class":5906},[5543,9631,5969],{"class":5556},[5543,9633,5885],{"class":5636},[5543,9635,5563],{"class":5556},[5543,9637,7549],{"class":5906},[5543,9639,5969],{"class":5556},[5543,9641,7554],{"class":5560},[5543,9643,5563],{"class":5556},[5543,9645,6001],{"class":5906},[5543,9647,5969],{"class":5556},[5543,9649,9650],{"class":5636},"'x1 + x2 = 100'",[5543,9652,5824],{"class":5556},[5543,9654,9655,9658,9660,9662,9664,9666,9668,9670,9672,9674,9677,9679,9681,9683,9686],{"class":5545,"line":5978},[5543,9656,9657],{"class":5556},"plt.fill_between(x1, x2, ",[5543,9659,6793],{"class":5560},[5543,9661,5563],{"class":5556},[5543,9663,7559],{"class":5906},[5543,9665,5969],{"class":5556},[5543,9667,5890],{"class":5636},[5543,9669,5563],{"class":5556},[5543,9671,6089],{"class":5906},[5543,9673,5969],{"class":5556},[5543,9675,9676],{"class":5560},"0.12",[5543,9678,5563],{"class":5556},[5543,9680,6001],{"class":5906},[5543,9682,5969],{"class":5556},[5543,9684,9685],{"class":5636},"'Клас 1'",[5543,9687,5824],{"class":5556},[5543,9689,9690,9693,9695,9698,9700,9702,9704,9706,9708,9710,9712,9714,9716,9718,9721],{"class":5545,"line":6007},[5543,9691,9692],{"class":5556},"plt.fill_between(x1, ",[5543,9694,5477],{"class":5560},[5543,9696,9697],{"class":5556},", x2, ",[5543,9699,7559],{"class":5906},[5543,9701,5969],{"class":5556},[5543,9703,5880],{"class":5636},[5543,9705,5563],{"class":5556},[5543,9707,6089],{"class":5906},[5543,9709,5969],{"class":5556},[5543,9711,9676],{"class":5560},[5543,9713,5563],{"class":5556},[5543,9715,6001],{"class":5906},[5543,9717,5969],{"class":5556},[5543,9719,9720],{"class":5636},"'Клас 0'",[5543,9722,5824],{"class":5556},[5543,9724,9725,9727,9729,9731,9733,9736,9738,9740,9742],{"class":5545,"line":6028},[5543,9726,8235],{"class":5556},[5543,9728,5477],{"class":5560},[5543,9730,5563],{"class":5556},[5543,9732,6793],{"class":5560},[5543,9734,9735],{"class":5556},"); plt.ylim(",[5543,9737,5477],{"class":5560},[5543,9739,5563],{"class":5556},[5543,9741,6793],{"class":5560},[5543,9743,5824],{"class":5556},[5543,9745,9746,9748,9751,9754,9757],{"class":5545,"line":6047},[5543,9747,6010],{"class":5556},[5543,9749,9750],{"class":5636},"'x1'",[5543,9752,9753],{"class":5556},"); plt.ylabel(",[5543,9755,9756],{"class":5636},"'x2'",[5543,9758,5824],{"class":5556},[5543,9760,9761,9763,9766,9768,9770,9772,9774],{"class":5545,"line":6067},[5543,9762,6050],{"class":5556},[5543,9764,9765],{"class":5636},"'w = [1, 1], b = -100: діагональна межа (45°)'",[5543,9767,5563],{"class":5556},[5543,9769,6018],{"class":5906},[5543,9771,5969],{"class":5556},[5543,9773,8268],{"class":5560},[5543,9775,5824],{"class":5556},[5543,9777,9778,9781,9783,9785,9787],{"class":5545,"line":6083},[5543,9779,9780],{"class":5556},"plt.legend(); plt.grid(",[5543,9782,6089],{"class":5906},[5543,9784,5969],{"class":5556},[5543,9786,6094],{"class":5560},[5543,9788,5824],{"class":5556},[5543,9790,9791],{"class":5545,"line":6099},[5543,9792,6102],{"class":5556},[6104,9794,9795,9802],{"v-slot:output":5538},[5261,9796,9797],{},[5448,9798],{"alt":9799,"className":9800,"src":9801},"Розділова межа для w = 1, 1, b = -100",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F10-weights-equal.png",[5532,9803,9806],{"className":9804,"code":9805,"language":6118},[6116],"Приклад 1: w = [1, 1], b = -100\nРозділова межа: x2 = -x1 + 100 (діагональ)\n",[5540,9807,9805],{"__ignoreMap":5538},[5736,9809,9811,10098],{"title":9810,"execution-count":5948},"weights_impact_2.ipynb",[5532,9812,9814],{"className":5534,"code":9813,"language":5537,"meta":5538,"style":5538},"# Приклад 2: x1 важливіший за x2\nw = np.array([3, 1])\nb = -100\n\n# Рівняння: 3*x1 + x2 = 100\n# x2 = -3*x1 + 100 (крутіший нахил)\n\nprint(\"\\nПриклад 2: w = [3, 1], b = -100\")\nprint(\"Розділова межа: x2 = -3*x1 + 100 (більше залежить від x1)\")\nprint(\"Інтерпретація: x1 в 3 рази важливіша за x2\")\n\nimport matplotlib.pyplot as plt\n\nx1 = np.linspace(0, 100, 200)\n\nplt.figure(figsize=(7, 6))\nplt.plot(x1, -(1 * x1 - 100) \u002F 1, color='#3b82f6', linewidth=2.5, label='w = [1, 1]: x2 = -x1 + 100')\nplt.plot(x1, -(3 * x1 - 100) \u002F 1, color='#ef4444', linewidth=2.5, label='w = [3, 1]: x2 = -3·x1 + 100')\nplt.xlim(0, 100); plt.ylim(0, 100)\nplt.xlabel('x1'); plt.ylabel('x2')\nplt.title('Більша вага x1 робить межу крутішою', fontsize=13)\nplt.legend(); plt.grid(alpha=0.3)\nplt.show()\n",[5540,9815,9816,9821,9833,9839,9843,9848,9853,9857,9872,9883,9894,9898,9908,9912,9928,9932,9948,9992,10033,10053,10065,10082,10094],{"__ignoreMap":5538},[5543,9817,9818],{"class":5545,"line":5546},[5543,9819,9820],{"class":5549},"# Приклад 2: x1 важливіший за x2\n",[5543,9822,9823,9825,9827,9829,9831],{"class":5545,"line":5553},[5543,9824,7115],{"class":5556},[5543,9826,5954],{"class":5560},[5543,9828,5563],{"class":5556},[5543,9830,5481],{"class":5560},[5543,9832,5592],{"class":5556},[5543,9834,9835,9837],{"class":5545,"line":5595},[5543,9836,7130],{"class":5556},[5543,9838,9513],{"class":5560},[5543,9840,9841],{"class":5545,"line":5602},[5543,9842,5599],{"emptyLinePlaceholder":5598},[5543,9844,9845],{"class":5545,"line":5608},[5543,9846,9847],{"class":5549},"# Рівняння: 3*x1 + x2 = 100\n",[5543,9849,9850],{"class":5545,"line":5614},[5543,9851,9852],{"class":5549},"# x2 = -3*x1 + 100 (крутіший нахил)\n",[5543,9854,9855],{"class":5545,"line":5689},[5543,9856,5599],{"emptyLinePlaceholder":5598},[5543,9858,9859,9861,9863,9865,9867,9870],{"class":5545,"line":5695},[5543,9860,5796],{"class":5795},[5543,9862,5799],{"class":5556},[5543,9864,5821],{"class":5636},[5543,9866,8897],{"class":8896},[5543,9868,9869],{"class":5636},"Приклад 2: w = [3, 1], b = -100\"",[5543,9871,5824],{"class":5556},[5543,9873,9874,9876,9878,9881],{"class":5545,"line":5827},[5543,9875,5796],{"class":5795},[5543,9877,5799],{"class":5556},[5543,9879,9880],{"class":5636},"\"Розділова межа: x2 = -3*x1 + 100 (більше залежить від x1)\"",[5543,9882,5824],{"class":5556},[5543,9884,9885,9887,9889,9892],{"class":5545,"line":5850},[5543,9886,5796],{"class":5795},[5543,9888,5799],{"class":5556},[5543,9890,9891],{"class":5636},"\"Інтерпретація: x1 в 3 рази важливіша за x2\"",[5543,9893,5824],{"class":5556},[5543,9895,9896],{"class":5545,"line":5855},[5543,9897,5599],{"emptyLinePlaceholder":5598},[5543,9899,9900,9902,9904,9906],{"class":5545,"line":5869},[5543,9901,5678],{"class":5671},[5543,9903,5860],{"class":5556},[5543,9905,5863],{"class":5671},[5543,9907,5866],{"class":5556},[5543,9909,9910],{"class":5545,"line":5874},[5543,9911,5599],{"emptyLinePlaceholder":5598},[5543,9913,9914,9916,9918,9920,9922,9924,9926],{"class":5545,"line":5895},[5543,9915,9576],{"class":5556},[5543,9917,5477],{"class":5560},[5543,9919,5563],{"class":5556},[5543,9921,6793],{"class":5560},[5543,9923,5563],{"class":5556},[5543,9925,7509],{"class":5560},[5543,9927,5824],{"class":5556},[5543,9929,9930],{"class":5545,"line":5900},[5543,9931,5599],{"emptyLinePlaceholder":5598},[5543,9933,9934,9936,9938,9940,9942,9944,9946],{"class":5545,"line":5924},[5543,9935,5903],{"class":5556},[5543,9937,5907],{"class":5906},[5543,9939,5910],{"class":5556},[5543,9941,8974],{"class":5560},[5543,9943,5563],{"class":5556},[5543,9945,5918],{"class":5560},[5543,9947,5921],{"class":5556},[5543,9949,9950,9953,9955,9958,9960,9963,9965,9967,9969,9971,9973,9975,9977,9979,9981,9983,9985,9987,9990],{"class":5545,"line":5942},[5543,9951,9952],{"class":5556},"plt.plot(x1, -(",[5543,9954,5481],{"class":5560},[5543,9956,9957],{"class":5556}," * x1 - ",[5543,9959,6793],{"class":5560},[5543,9961,9962],{"class":5556},") \u002F ",[5543,9964,5481],{"class":5560},[5543,9966,5563],{"class":5556},[5543,9968,7559],{"class":5906},[5543,9970,5969],{"class":5556},[5543,9972,5885],{"class":5636},[5543,9974,5563],{"class":5556},[5543,9976,7549],{"class":5906},[5543,9978,5969],{"class":5556},[5543,9980,7554],{"class":5560},[5543,9982,5563],{"class":5556},[5543,9984,6001],{"class":5906},[5543,9986,5969],{"class":5556},[5543,9988,9989],{"class":5636},"'w = [1, 1]: x2 = -x1 + 100'",[5543,9991,5824],{"class":5556},[5543,9993,9994,9996,9998,10000,10002,10004,10006,10008,10010,10012,10014,10016,10018,10020,10022,10024,10026,10028,10031],{"class":5545,"line":5978},[5543,9995,9952],{"class":5556},[5543,9997,5954],{"class":5560},[5543,9999,9957],{"class":5556},[5543,10001,6793],{"class":5560},[5543,10003,9962],{"class":5556},[5543,10005,5481],{"class":5560},[5543,10007,5563],{"class":5556},[5543,10009,7559],{"class":5906},[5543,10011,5969],{"class":5556},[5543,10013,5880],{"class":5636},[5543,10015,5563],{"class":5556},[5543,10017,7549],{"class":5906},[5543,10019,5969],{"class":5556},[5543,10021,7554],{"class":5560},[5543,10023,5563],{"class":5556},[5543,10025,6001],{"class":5906},[5543,10027,5969],{"class":5556},[5543,10029,10030],{"class":5636},"'w = [3, 1]: x2 = -3·x1 + 100'",[5543,10032,5824],{"class":5556},[5543,10034,10035,10037,10039,10041,10043,10045,10047,10049,10051],{"class":5545,"line":6007},[5543,10036,8235],{"class":5556},[5543,10038,5477],{"class":5560},[5543,10040,5563],{"class":5556},[5543,10042,6793],{"class":5560},[5543,10044,9735],{"class":5556},[5543,10046,5477],{"class":5560},[5543,10048,5563],{"class":5556},[5543,10050,6793],{"class":5560},[5543,10052,5824],{"class":5556},[5543,10054,10055,10057,10059,10061,10063],{"class":5545,"line":6028},[5543,10056,6010],{"class":5556},[5543,10058,9750],{"class":5636},[5543,10060,9753],{"class":5556},[5543,10062,9756],{"class":5636},[5543,10064,5824],{"class":5556},[5543,10066,10067,10069,10072,10074,10076,10078,10080],{"class":5545,"line":6047},[5543,10068,6050],{"class":5556},[5543,10070,10071],{"class":5636},"'Більша вага x1 робить межу крутішою'",[5543,10073,5563],{"class":5556},[5543,10075,6018],{"class":5906},[5543,10077,5969],{"class":5556},[5543,10079,8268],{"class":5560},[5543,10081,5824],{"class":5556},[5543,10083,10084,10086,10088,10090,10092],{"class":5545,"line":6067},[5543,10085,9780],{"class":5556},[5543,10087,6089],{"class":5906},[5543,10089,5969],{"class":5556},[5543,10091,6094],{"class":5560},[5543,10093,5824],{"class":5556},[5543,10095,10096],{"class":5545,"line":6083},[5543,10097,6102],{"class":5556},[6104,10099,10100,10107],{"v-slot:output":5538},[5261,10101,10102],{},[5448,10103],{"alt":10104,"className":10105,"src":10106},"Порівняння меж для w = 1, 1 та w = 3, 1",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F11-weights-dominant.png",[5532,10108,10111],{"className":10109,"code":10110,"language":6118},[6116],"Приклад 2: w = [3, 1], b = -100\nРозділова межа: x2 = -3*x1 + 100 (більше залежить від x1)\nІнтерпретація: x1 в 3 рази важливіша за x2\n",[5540,10112,10110],{"__ignoreMap":5538},[5422,10114,10115,10118,10119,10122,10123,10126,10127,10130],{},[5224,10116,10117],{},"Правило:"," чим більший абсолютний коефіцієнт ",[6363,10120],{"tex":10121,":inline":6366},"|w_i|",", тим ",[5224,10124,10125],{},"більше"," ця ознака впливає на рішення моделі. Від'ємна вага означає ",[5224,10128,10129],{},"зворотний зв'язок",": зростання ознаки знижує ймовірність класу 1.",[5261,10132,10133],{},[5448,10134],{"alt":10135,"className":10136,"src":10137},"Вплив ваг (w) на орієнтацію та нахил розділової межі: рівноважні ваги проти домінування однієї з ознак",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F05-weights-impact.png",[5331,10139,10141],{"id":10140},"вплив-зміщення-bias","Вплив зміщення (bias)",[5261,10143,10144,10145,10147,10148,10151],{},"Bias ",[6363,10146],{"tex":8876,":inline":6366}," зміщує розділову межу ",[5224,10149,10150],{},"паралельно сама собі",", не змінюючи її нахилу.",[5736,10153,10155,10457],{"title":10154,"execution-count":5481},"bias_impact.ipynb",[5532,10156,10158],{"className":5534,"code":10157,"language":5537,"meta":5538,"style":5538},"# Фіксуємо ваги, змінюємо bias\nw = np.array([1, 1])\n\n# Три різні bias\nbiases = [-80, -100, -120]\n\nfor b in biases:\n    # x1 + x2 + b = 0  =>  x2 = -x1 - b\n    print(f\"b = {b:4d}  =>  x2 = -x1 + {-b} (пряма проходить через точку (0, {-b}))\")\n\nimport matplotlib.pyplot as plt\n\nx1 = np.linspace(0, 130, 200)\ncolors = ['#10b981', '#3b82f6', '#ef4444']\n\nplt.figure(figsize=(7, 6))\nfor b, c in zip(biases, colors):\n    plt.plot(x1, -x1 - b, color=c, linewidth=2.5, label=f'b = {b}')\nplt.xlim(0, 130); plt.ylim(0, 130)\nplt.xlabel('x1'); plt.ylabel('x2')\nplt.title('Зміна bias зсуває межу паралельно', fontsize=13)\nplt.legend(); plt.grid(alpha=0.3)\nplt.show()\n",[5540,10159,10160,10165,10177,10181,10186,10205,10209,10221,10226,10269,10273,10283,10287,10304,10320,10324,10340,10355,10392,10412,10424,10441,10453],{"__ignoreMap":5538},[5543,10161,10162],{"class":5545,"line":5546},[5543,10163,10164],{"class":5549},"# Фіксуємо ваги, змінюємо bias\n",[5543,10166,10167,10169,10171,10173,10175],{"class":5545,"line":5553},[5543,10168,7115],{"class":5556},[5543,10170,5481],{"class":5560},[5543,10172,5563],{"class":5556},[5543,10174,5481],{"class":5560},[5543,10176,5592],{"class":5556},[5543,10178,10179],{"class":5545,"line":5595},[5543,10180,5599],{"emptyLinePlaceholder":5598},[5543,10182,10183],{"class":5545,"line":5602},[5543,10184,10185],{"class":5549},"# Три різні bias\n",[5543,10187,10188,10191,10193,10196,10198,10200,10203],{"class":5545,"line":5608},[5543,10189,10190],{"class":5556},"biases = [-",[5543,10192,8657],{"class":5560},[5543,10194,10195],{"class":5556},", -",[5543,10197,6793],{"class":5560},[5543,10199,10195],{"class":5556},[5543,10201,10202],{"class":5560},"120",[5543,10204,5657],{"class":5556},[5543,10206,10207],{"class":5545,"line":5614},[5543,10208,5599],{"emptyLinePlaceholder":5598},[5543,10210,10211,10213,10216,10218],{"class":5545,"line":5689},[5543,10212,5927],{"class":5671},[5543,10214,10215],{"class":5556}," b ",[5543,10217,5933],{"class":5671},[5543,10219,10220],{"class":5556}," biases:\n",[5543,10222,10223],{"class":5545,"line":5695},[5543,10224,10225],{"class":5549},"    # x1 + x2 + b = 0  =>  x2 = -x1 - b\n",[5543,10227,10228,10231,10233,10235,10238,10240,10242,10245,10248,10250,10253,10255,10258,10260,10262,10264,10267],{"class":5545,"line":5827},[5543,10229,10230],{"class":5795},"    print",[5543,10232,5799],{"class":5556},[5543,10234,5803],{"class":5802},[5543,10236,10237],{"class":5636},"\"b = ",[5543,10239,5809],{"class":5802},[5543,10241,8876],{"class":5556},[5543,10243,10244],{"class":5802},":4d}",[5543,10246,10247],{"class":5636},"  =>  x2 = -x1 + ",[5543,10249,5809],{"class":5802},[5543,10251,10252],{"class":5556},"-b",[5543,10254,5818],{"class":5802},[5543,10256,10257],{"class":5636}," (пряма проходить через точку (0, ",[5543,10259,5809],{"class":5802},[5543,10261,10252],{"class":5556},[5543,10263,5818],{"class":5802},[5543,10265,10266],{"class":5636},"))\"",[5543,10268,5824],{"class":5556},[5543,10270,10271],{"class":5545,"line":5850},[5543,10272,5599],{"emptyLinePlaceholder":5598},[5543,10274,10275,10277,10279,10281],{"class":5545,"line":5855},[5543,10276,5678],{"class":5671},[5543,10278,5860],{"class":5556},[5543,10280,5863],{"class":5671},[5543,10282,5866],{"class":5556},[5543,10284,10285],{"class":5545,"line":5869},[5543,10286,5599],{"emptyLinePlaceholder":5598},[5543,10288,10289,10291,10293,10295,10298,10300,10302],{"class":5545,"line":5874},[5543,10290,9576],{"class":5556},[5543,10292,5477],{"class":5560},[5543,10294,5563],{"class":5556},[5543,10296,10297],{"class":5560},"130",[5543,10299,5563],{"class":5556},[5543,10301,7509],{"class":5560},[5543,10303,5824],{"class":5556},[5543,10305,10306,10308,10310,10312,10314,10316,10318],{"class":5545,"line":5895},[5543,10307,5877],{"class":5556},[5543,10309,5890],{"class":5636},[5543,10311,5563],{"class":5556},[5543,10313,5885],{"class":5636},[5543,10315,5563],{"class":5556},[5543,10317,5880],{"class":5636},[5543,10319,5657],{"class":5556},[5543,10321,10322],{"class":5545,"line":5900},[5543,10323,5599],{"emptyLinePlaceholder":5598},[5543,10325,10326,10328,10330,10332,10334,10336,10338],{"class":5545,"line":5924},[5543,10327,5903],{"class":5556},[5543,10329,5907],{"class":5906},[5543,10331,5910],{"class":5556},[5543,10333,8974],{"class":5560},[5543,10335,5563],{"class":5556},[5543,10337,5918],{"class":5560},[5543,10339,5921],{"class":5556},[5543,10341,10342,10344,10347,10349,10352],{"class":5545,"line":5942},[5543,10343,5927],{"class":5671},[5543,10345,10346],{"class":5556}," b, c ",[5543,10348,5933],{"class":5671},[5543,10350,10351],{"class":5795}," zip",[5543,10353,10354],{"class":5556},"(biases, colors):\n",[5543,10356,10357,10360,10362,10365,10367,10369,10371,10373,10375,10377,10379,10382,10384,10386,10388,10390],{"class":5545,"line":5978},[5543,10358,10359],{"class":5556},"    plt.plot(x1, -x1 - b, ",[5543,10361,7559],{"class":5906},[5543,10363,10364],{"class":5556},"=c, ",[5543,10366,7549],{"class":5906},[5543,10368,5969],{"class":5556},[5543,10370,7554],{"class":5560},[5543,10372,5563],{"class":5556},[5543,10374,6001],{"class":5906},[5543,10376,5969],{"class":5556},[5543,10378,5803],{"class":5802},[5543,10380,10381],{"class":5636},"'b = ",[5543,10383,5809],{"class":5802},[5543,10385,8876],{"class":5556},[5543,10387,5818],{"class":5802},[5543,10389,8172],{"class":5636},[5543,10391,5824],{"class":5556},[5543,10393,10394,10396,10398,10400,10402,10404,10406,10408,10410],{"class":5545,"line":6007},[5543,10395,8235],{"class":5556},[5543,10397,5477],{"class":5560},[5543,10399,5563],{"class":5556},[5543,10401,10297],{"class":5560},[5543,10403,9735],{"class":5556},[5543,10405,5477],{"class":5560},[5543,10407,5563],{"class":5556},[5543,10409,10297],{"class":5560},[5543,10411,5824],{"class":5556},[5543,10413,10414,10416,10418,10420,10422],{"class":5545,"line":6028},[5543,10415,6010],{"class":5556},[5543,10417,9750],{"class":5636},[5543,10419,9753],{"class":5556},[5543,10421,9756],{"class":5636},[5543,10423,5824],{"class":5556},[5543,10425,10426,10428,10431,10433,10435,10437,10439],{"class":5545,"line":6047},[5543,10427,6050],{"class":5556},[5543,10429,10430],{"class":5636},"'Зміна bias зсуває межу паралельно'",[5543,10432,5563],{"class":5556},[5543,10434,6018],{"class":5906},[5543,10436,5969],{"class":5556},[5543,10438,8268],{"class":5560},[5543,10440,5824],{"class":5556},[5543,10442,10443,10445,10447,10449,10451],{"class":5545,"line":6067},[5543,10444,9780],{"class":5556},[5543,10446,6089],{"class":5906},[5543,10448,5969],{"class":5556},[5543,10450,6094],{"class":5560},[5543,10452,5824],{"class":5556},[5543,10454,10455],{"class":5545,"line":6083},[5543,10456,6102],{"class":5556},[6104,10458,10459,10466],{"v-slot:output":5538},[5261,10460,10461],{},[5448,10462],{"alt":10463,"className":10464,"src":10465},"Паралельний зсув розділової межі при різних значеннях bias",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F12-bias-shift.png",[5532,10467,10470],{"className":10468,"code":10469,"language":6118},[6116],"b =  -80  =>  x2 = -x1 + 80 (пряма проходить через точку (0, 80))\nb = -100  =>  x2 = -x1 + 100 (пряма проходить через точку (0, 100))\nb = -120  =>  x2 = -x1 + 120 (пряма проходить через точку (0, 120))\n",[5540,10471,10469],{"__ignoreMap":5538},[5301,10473,10474,10477,10478,10480],{},[5224,10475,10476],{},"Візуальний образ:"," уявіть, що ви тримаєте лінійку під фіксованим кутом. Зміна ",[6363,10479],{"tex":8876,":inline":6366}," — це як пересунути лінійку вгору чи вниз, не обертаючи її.",[5261,10482,10483],{},[5448,10484],{"alt":10485,"className":10486,"src":10487},"Вплив зміщення (bias b) на паралельний зсув розділової межі у 2D просторі та горизонтальний зсув кривої ймовірності",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F05-bias-impact.png",[5253,10489],{},[5256,10491,10493],{"id":10492},"нелінійні-розділові-межі-обмеження-логістичної-регресії","Нелінійні розділові межі: обмеження логістичної регресії",[5261,10495,10496,10497,10500],{},"Базова логістична регресія може будувати лише ",[5224,10498,10499],{},"лінійні"," розділові межі. Для складних паттернів, де класи розділені кривою, колом чи іншою нелінійною формою, потрібні розширення.",[5261,10502,10503],{},[5448,10504],{"alt":10505,"className":10506,"src":10507},"Приклад лінійно нероздільних даних (XOR-задача)",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F06-linearly-nonseparable.png",[5331,10509,10511],{"id":10510},"приклад-xor-задача","Приклад: XOR-задача",[5261,10513,10514],{},"Розглянемо класичну задачу XOR (виключне АБО):",[5736,10516,10518,11007],{"title":10517,"execution-count":5481},"xor_problem.ipynb",[5532,10519,10521],{"className":5534,"code":10520,"language":5537,"meta":5538,"style":5538},"# Дані XOR: клас 1 у протилежних кутах квадрата\nX_xor = np.array([\n    [0, 0],  # клас 0\n    [0, 1],  # клас 1\n    [1, 0],  # клас 1\n    [1, 1]   # клас 0\n])\ny_xor = np.array([0, 1, 1, 0])\n\n# Спроба навчити звичайну логістичну регресію\nmodel_linear = LogisticRegression()\nmodel_linear.fit(X_xor, y_xor)\n\naccuracy = model_linear.score(X_xor, y_xor)\nprint(f\"Точність лінійної моделі на XOR: {accuracy:.0%}\")\nprint(\"Проблема: жодна пряма лінія не може розділити ці точки!\")\n\nimport matplotlib.pyplot as plt\n\nxx, yy = np.meshgrid(np.linspace(-0.5, 1.5, 300), np.linspace(-0.5, 1.5, 300))\nZ = model_linear.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:, 1].reshape(xx.shape)\n\nplt.figure(figsize=(7, 6))\nplt.contourf(xx, yy, Z, levels=20, cmap='RdYlGn', alpha=0.35)\nplt.contour(xx, yy, Z, levels=[0.5], colors='#1f2937', linewidths=2.5, linestyles='--')\nplt.scatter(X_xor[y_xor == 0, 0], X_xor[y_xor == 0, 1], c='#ef4444', marker='x', s=200, linewidths=3, label='Клас 0')\nplt.scatter(X_xor[y_xor == 1, 0], X_xor[y_xor == 1, 1], c='#10b981', marker='o', s=200, edgecolor='white', label='Клас 1')\nplt.xlabel('x1'); plt.ylabel('x2')\nplt.title(f'XOR: лінійна модель, точність {accuracy:.0%}', fontsize=13)\nplt.legend(); plt.grid(alpha=0.3)\nplt.show()\n",[5540,10522,10523,10528,10533,10549,10564,10578,10593,10597,10618,10622,10627,10632,10637,10641,10646,10669,10680,10684,10694,10698,10729,10739,10743,10759,10790,10829,10891,10951,10963,10990,11002],{"__ignoreMap":5538},[5543,10524,10525],{"class":5545,"line":5546},[5543,10526,10527],{"class":5549},"# Дані XOR: клас 1 у протилежних кутах квадрата\n",[5543,10529,10530],{"class":5545,"line":5553},[5543,10531,10532],{"class":5556},"X_xor = np.array([\n",[5543,10534,10535,10537,10539,10541,10543,10546],{"class":5545,"line":5595},[5543,10536,8593],{"class":5556},[5543,10538,5477],{"class":5560},[5543,10540,5563],{"class":5556},[5543,10542,5477],{"class":5560},[5543,10544,10545],{"class":5556},"],  ",[5543,10547,10548],{"class":5549},"# клас 0\n",[5543,10550,10551,10553,10555,10557,10559,10561],{"class":5545,"line":5602},[5543,10552,8593],{"class":5556},[5543,10554,5477],{"class":5560},[5543,10556,5563],{"class":5556},[5543,10558,5481],{"class":5560},[5543,10560,10545],{"class":5556},[5543,10562,10563],{"class":5549},"# клас 1\n",[5543,10565,10566,10568,10570,10572,10574,10576],{"class":5545,"line":5608},[5543,10567,8593],{"class":5556},[5543,10569,5481],{"class":5560},[5543,10571,5563],{"class":5556},[5543,10573,5477],{"class":5560},[5543,10575,10545],{"class":5556},[5543,10577,10563],{"class":5549},[5543,10579,10580,10582,10584,10586,10588,10591],{"class":5545,"line":5614},[5543,10581,8593],{"class":5556},[5543,10583,5481],{"class":5560},[5543,10585,5563],{"class":5556},[5543,10587,5481],{"class":5560},[5543,10589,10590],{"class":5556},"]   ",[5543,10592,10548],{"class":5549},[5543,10594,10595],{"class":5545,"line":5689},[5543,10596,5592],{"class":5556},[5543,10598,10599,10602,10604,10606,10608,10610,10612,10614,10616],{"class":5545,"line":5695},[5543,10600,10601],{"class":5556},"y_xor = np.array([",[5543,10603,5477],{"class":5560},[5543,10605,5563],{"class":5556},[5543,10607,5481],{"class":5560},[5543,10609,5563],{"class":5556},[5543,10611,5481],{"class":5560},[5543,10613,5563],{"class":5556},[5543,10615,5477],{"class":5560},[5543,10617,5592],{"class":5556},[5543,10619,10620],{"class":5545,"line":5827},[5543,10621,5599],{"emptyLinePlaceholder":5598},[5543,10623,10624],{"class":5545,"line":5850},[5543,10625,10626],{"class":5549},"# Спроба навчити звичайну логістичну регресію\n",[5543,10628,10629],{"class":5545,"line":5855},[5543,10630,10631],{"class":5556},"model_linear = LogisticRegression()\n",[5543,10633,10634],{"class":5545,"line":5869},[5543,10635,10636],{"class":5556},"model_linear.fit(X_xor, y_xor)\n",[5543,10638,10639],{"class":5545,"line":5874},[5543,10640,5599],{"emptyLinePlaceholder":5598},[5543,10642,10643],{"class":5545,"line":5895},[5543,10644,10645],{"class":5556},"accuracy = model_linear.score(X_xor, y_xor)\n",[5543,10647,10648,10650,10652,10654,10657,10659,10662,10665,10667],{"class":5545,"line":5900},[5543,10649,5796],{"class":5795},[5543,10651,5799],{"class":5556},[5543,10653,5803],{"class":5802},[5543,10655,10656],{"class":5636},"\"Точність лінійної моделі на XOR: ",[5543,10658,5809],{"class":5802},[5543,10660,10661],{"class":5556},"accuracy",[5543,10663,10664],{"class":5802},":.0%}",[5543,10666,5821],{"class":5636},[5543,10668,5824],{"class":5556},[5543,10670,10671,10673,10675,10678],{"class":5545,"line":5924},[5543,10672,5796],{"class":5795},[5543,10674,5799],{"class":5556},[5543,10676,10677],{"class":5636},"\"Проблема: жодна пряма лінія не може розділити ці точки!\"",[5543,10679,5824],{"class":5556},[5543,10681,10682],{"class":5545,"line":5942},[5543,10683,5599],{"emptyLinePlaceholder":5598},[5543,10685,10686,10688,10690,10692],{"class":5545,"line":5978},[5543,10687,5678],{"class":5671},[5543,10689,5860],{"class":5556},[5543,10691,5863],{"class":5671},[5543,10693,5866],{"class":5556},[5543,10695,10696],{"class":5545,"line":6007},[5543,10697,5599],{"emptyLinePlaceholder":5598},[5543,10699,10700,10703,10705,10707,10709,10711,10714,10717,10719,10721,10723,10725,10727],{"class":5545,"line":6028},[5543,10701,10702],{"class":5556},"xx, yy = np.meshgrid(np.linspace(-",[5543,10704,7267],{"class":5560},[5543,10706,5563],{"class":5556},[5543,10708,9281],{"class":5560},[5543,10710,5563],{"class":5556},[5543,10712,10713],{"class":5560},"300",[5543,10715,10716],{"class":5556},"), np.linspace(-",[5543,10718,7267],{"class":5560},[5543,10720,5563],{"class":5556},[5543,10722,9281],{"class":5560},[5543,10724,5563],{"class":5556},[5543,10726,10713],{"class":5560},[5543,10728,5921],{"class":5556},[5543,10730,10731,10734,10736],{"class":5545,"line":6047},[5543,10732,10733],{"class":5556},"Z = model_linear.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:, ",[5543,10735,5481],{"class":5560},[5543,10737,10738],{"class":5556},"].reshape(xx.shape)\n",[5543,10740,10741],{"class":5545,"line":6067},[5543,10742,5599],{"emptyLinePlaceholder":5598},[5543,10744,10745,10747,10749,10751,10753,10755,10757],{"class":5545,"line":6083},[5543,10746,5903],{"class":5556},[5543,10748,5907],{"class":5906},[5543,10750,5910],{"class":5556},[5543,10752,8974],{"class":5560},[5543,10754,5563],{"class":5556},[5543,10756,5918],{"class":5560},[5543,10758,5921],{"class":5556},[5543,10760,10761,10763,10765,10767,10769,10771,10774,10776,10779,10781,10783,10785,10788],{"class":5545,"line":6099},[5543,10762,9255],{"class":5556},[5543,10764,9267],{"class":5906},[5543,10766,5969],{"class":5556},[5543,10768,6656],{"class":5560},[5543,10770,5563],{"class":5556},[5543,10772,10773],{"class":5906},"cmap",[5543,10775,5969],{"class":5556},[5543,10777,10778],{"class":5636},"'RdYlGn'",[5543,10780,5563],{"class":5556},[5543,10782,6089],{"class":5906},[5543,10784,5969],{"class":5556},[5543,10786,10787],{"class":5560},"0.35",[5543,10789,5824],{"class":5556},[5543,10791,10792,10795,10797,10799,10801,10803,10806,10808,10810,10812,10814,10816,10818,10820,10823,10825,10827],{"class":5545,"line":7782},[5543,10793,10794],{"class":5556},"plt.contour(xx, yy, Z, ",[5543,10796,9267],{"class":5906},[5543,10798,9291],{"class":5556},[5543,10800,7267],{"class":5560},[5543,10802,5957],{"class":5556},[5543,10804,10805],{"class":5906},"colors",[5543,10807,5969],{"class":5556},[5543,10809,8136],{"class":5636},[5543,10811,5563],{"class":5556},[5543,10813,9039],{"class":5906},[5543,10815,5969],{"class":5556},[5543,10817,7554],{"class":5560},[5543,10819,5563],{"class":5556},[5543,10821,10822],{"class":5906},"linestyles",[5543,10824,5969],{"class":5556},[5543,10826,7604],{"class":5636},[5543,10828,5824],{"class":5556},[5543,10830,10831,10834,10836,10838,10840,10843,10845,10847,10849,10851,10853,10855,10857,10859,10861,10863,10865,10867,10869,10871,10873,10875,10877,10879,10881,10883,10885,10887,10889],{"class":5545,"line":7809},[5543,10832,10833],{"class":5556},"plt.scatter(X_xor[y_xor == ",[5543,10835,5477],{"class":5560},[5543,10837,5563],{"class":5556},[5543,10839,5477],{"class":5560},[5543,10841,10842],{"class":5556},"], X_xor[y_xor == ",[5543,10844,5477],{"class":5560},[5543,10846,5563],{"class":5556},[5543,10848,5481],{"class":5560},[5543,10850,5957],{"class":5556},[5543,10852,5960],{"class":5906},[5543,10854,5969],{"class":5556},[5543,10856,5880],{"class":5636},[5543,10858,5563],{"class":5556},[5543,10860,9021],{"class":5906},[5543,10862,5969],{"class":5556},[5543,10864,9026],{"class":5636},[5543,10866,5563],{"class":5556},[5543,10868,5966],{"class":5906},[5543,10870,5969],{"class":5556},[5543,10872,7509],{"class":5560},[5543,10874,5563],{"class":5556},[5543,10876,9039],{"class":5906},[5543,10878,5969],{"class":5556},[5543,10880,5954],{"class":5560},[5543,10882,5563],{"class":5556},[5543,10884,6001],{"class":5906},[5543,10886,5969],{"class":5556},[5543,10888,9720],{"class":5636},[5543,10890,5824],{"class":5556},[5543,10892,10893,10895,10897,10899,10901,10903,10905,10907,10909,10911,10913,10915,10917,10919,10921,10923,10925,10927,10929,10931,10933,10935,10937,10939,10941,10943,10945,10947,10949],{"class":5545,"line":9340},[5543,10894,10833],{"class":5556},[5543,10896,5481],{"class":5560},[5543,10898,5563],{"class":5556},[5543,10900,5477],{"class":5560},[5543,10902,10842],{"class":5556},[5543,10904,5481],{"class":5560},[5543,10906,5563],{"class":5556},[5543,10908,5481],{"class":5560},[5543,10910,5957],{"class":5556},[5543,10912,5960],{"class":5906},[5543,10914,5969],{"class":5556},[5543,10916,5890],{"class":5636},[5543,10918,5563],{"class":5556},[5543,10920,9021],{"class":5906},[5543,10922,5969],{"class":5556},[5543,10924,9111],{"class":5636},[5543,10926,5563],{"class":5556},[5543,10928,5966],{"class":5906},[5543,10930,5969],{"class":5556},[5543,10932,7509],{"class":5560},[5543,10934,5563],{"class":5556},[5543,10936,5991],{"class":5906},[5543,10938,5969],{"class":5556},[5543,10940,5996],{"class":5636},[5543,10942,5563],{"class":5556},[5543,10944,6001],{"class":5906},[5543,10946,5969],{"class":5556},[5543,10948,9685],{"class":5636},[5543,10950,5824],{"class":5556},[5543,10952,10953,10955,10957,10959,10961],{"class":5545,"line":9358},[5543,10954,6010],{"class":5556},[5543,10956,9750],{"class":5636},[5543,10958,9753],{"class":5556},[5543,10960,9756],{"class":5636},[5543,10962,5824],{"class":5556},[5543,10964,10965,10967,10969,10972,10974,10976,10978,10980,10982,10984,10986,10988],{"class":5545,"line":9372},[5543,10966,6050],{"class":5556},[5543,10968,5803],{"class":5802},[5543,10970,10971],{"class":5636},"'XOR: лінійна модель, точність ",[5543,10973,5809],{"class":5802},[5543,10975,10661],{"class":5556},[5543,10977,10664],{"class":5802},[5543,10979,8172],{"class":5636},[5543,10981,5563],{"class":5556},[5543,10983,6018],{"class":5906},[5543,10985,5969],{"class":5556},[5543,10987,8268],{"class":5560},[5543,10989,5824],{"class":5556},[5543,10991,10992,10994,10996,10998,11000],{"class":5545,"line":9385},[5543,10993,9780],{"class":5556},[5543,10995,6089],{"class":5906},[5543,10997,5969],{"class":5556},[5543,10999,6094],{"class":5560},[5543,11001,5824],{"class":5556},[5543,11003,11005],{"class":5545,"line":11004},31,[5543,11006,6102],{"class":5556},[6104,11008,11009,11016],{"v-slot:output":5538},[5261,11010,11011],{},[5448,11012],{"alt":11013,"className":11014,"src":11015},"XOR-дані та розділова межа лінійної логістичної регресії",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F13-xor-linear-fail.png",[5532,11017,11020],{"className":11018,"code":11019,"language":6118},[6116],"Точність лінійної моделі на XOR: 50%\nПроблема: жодна пряма лінія не може розділити ці точки!\n",[5540,11021,11019],{"__ignoreMap":5538},[5331,11023,11025],{"id":11024},"рішення-поліноміальні-ознаки","Рішення: поліноміальні ознаки",[5261,11027,11028,11029,11032],{},"Щоб розв'язати нелінійні задачі, можна ",[5224,11030,11031],{},"штучно створити нелінійні ознаки"," — квадрати, добутки, степені вихідних змінних.",[5736,11034,11036,11133],{"title":11035,"execution-count":5481},"polynomial_features.ipynb",[5532,11037,11039],{"className":5534,"code":11038,"language":5537,"meta":5538,"style":5538},"from sklearn.preprocessing import PolynomialFeatures\n\n# Створюємо поліноміальні ознаки (квадрати та добутки)\npoly = PolynomialFeatures(degree=2, include_bias=False)\nX_poly = poly.fit_transform(X_xor)\n\nprint(\"Вихідні ознаки:\")\nprint(X_xor)\nprint(\"\\nПісля перетворення (x1, x2, x1², x1*x2, x2²):\")\nprint(X_poly)\n",[5540,11040,11041,11052,11056,11061,11084,11089,11093,11104,11111,11126],{"__ignoreMap":5538},[5543,11042,11043,11045,11047,11049],{"class":5545,"line":5546},[5543,11044,5672],{"class":5671},[5543,11046,5675],{"class":5556},[5543,11048,5678],{"class":5671},[5543,11050,11051],{"class":5556}," PolynomialFeatures\n",[5543,11053,11054],{"class":5545,"line":5553},[5543,11055,5599],{"emptyLinePlaceholder":5598},[5543,11057,11058],{"class":5545,"line":5595},[5543,11059,11060],{"class":5549},"# Створюємо поліноміальні ознаки (квадрати та добутки)\n",[5543,11062,11063,11066,11069,11071,11073,11075,11078,11080,11082],{"class":5545,"line":5602},[5543,11064,11065],{"class":5556},"poly = PolynomialFeatures(",[5543,11067,11068],{"class":5906},"degree",[5543,11070,5969],{"class":5556},[5543,11072,5948],{"class":5560},[5543,11074,5563],{"class":5556},[5543,11076,11077],{"class":5906},"include_bias",[5543,11079,5969],{"class":5556},[5543,11081,5504],{"class":5802},[5543,11083,5824],{"class":5556},[5543,11085,11086],{"class":5545,"line":5608},[5543,11087,11088],{"class":5556},"X_poly = poly.fit_transform(X_xor)\n",[5543,11090,11091],{"class":5545,"line":5614},[5543,11092,5599],{"emptyLinePlaceholder":5598},[5543,11094,11095,11097,11099,11102],{"class":5545,"line":5689},[5543,11096,5796],{"class":5795},[5543,11098,5799],{"class":5556},[5543,11100,11101],{"class":5636},"\"Вихідні ознаки:\"",[5543,11103,5824],{"class":5556},[5543,11105,11106,11108],{"class":5545,"line":5695},[5543,11107,5796],{"class":5795},[5543,11109,11110],{"class":5556},"(X_xor)\n",[5543,11112,11113,11115,11117,11119,11121,11124],{"class":5545,"line":5827},[5543,11114,5796],{"class":5795},[5543,11116,5799],{"class":5556},[5543,11118,5821],{"class":5636},[5543,11120,8897],{"class":8896},[5543,11122,11123],{"class":5636},"Після перетворення (x1, x2, x1², x1*x2, x2²):\"",[5543,11125,5824],{"class":5556},[5543,11127,11128,11130],{"class":5545,"line":5850},[5543,11129,5796],{"class":5795},[5543,11131,11132],{"class":5556},"(X_poly)\n",[6104,11134,11135],{"v-slot:output":5538},[5532,11136,11139],{"className":11137,"code":11138,"language":6118},[6116],"Вихідні ознаки:\n[[0 0]\n [0 1]\n [1 0]\n [1 1]]\n\nПісля перетворення (x1, x2, x1², x1*x2, x2²):\n[[0. 0. 0. 0. 0.]\n [0. 1. 0. 0. 1.]\n [1. 0. 1. 0. 0.]\n [1. 1. 1. 1. 1.]]\n",[5540,11140,11138],{"__ignoreMap":5538},[5736,11142,11144,11539],{"title":11143,"execution-count":5948},"polynomial_logistic.ipynb",[5532,11145,11147],{"className":5534,"code":11146,"language":5537,"meta":5538,"style":5538},"# Навчання моделі на поліноміальних ознаках\n# C=100 — слабка регуляризація, бо даних лише 4 точки\nmodel_poly = LogisticRegression(C=100)\nmodel_poly.fit(X_poly, y_xor)\n\naccuracy_poly = model_poly.score(X_poly, y_xor)\nprint(f\"Точність моделі з поліноміальними ознаками: {accuracy_poly:.0%}\")\nprint(\"Успіх! Тепер розділова межа — це крива, а не пряма.\")\n\nimport matplotlib.pyplot as plt\n\nxx, yy = np.meshgrid(np.linspace(-0.5, 1.5, 300), np.linspace(-0.5, 1.5, 300))\ngrid_poly = poly.transform(np.c_[xx.ravel(), yy.ravel()])\nZ = model_poly.predict_proba(grid_poly)[:, 1].reshape(xx.shape)\n\nplt.figure(figsize=(7, 6))\nplt.contourf(xx, yy, Z, levels=20, cmap='RdYlGn', alpha=0.35)\nplt.contour(xx, yy, Z, levels=[0.5], colors='#1f2937', linewidths=2.5, linestyles='--')\nplt.scatter(X_xor[y_xor == 0, 0], X_xor[y_xor == 0, 1], c='#ef4444', marker='x', s=200, linewidths=3, label='Клас 0')\nplt.scatter(X_xor[y_xor == 1, 0], X_xor[y_xor == 1, 1], c='#10b981', marker='o', s=200, edgecolor='white', label='Клас 1')\nplt.xlabel('x1'); plt.ylabel('x2')\nplt.title(f'XOR: поліноміальні ознаки, точність {accuracy_poly:.0%}', fontsize=13)\nplt.legend(); plt.grid(alpha=0.3)\nplt.show()\n",[5540,11148,11149,11154,11159,11173,11178,11182,11187,11209,11220,11224,11234,11238,11266,11271,11280,11284,11300,11328,11364,11424,11484,11496,11523,11535],{"__ignoreMap":5538},[5543,11150,11151],{"class":5545,"line":5546},[5543,11152,11153],{"class":5549},"# Навчання моделі на поліноміальних ознаках\n",[5543,11155,11156],{"class":5545,"line":5553},[5543,11157,11158],{"class":5549},"# C=100 — слабка регуляризація, бо даних лише 4 точки\n",[5543,11160,11161,11164,11167,11169,11171],{"class":5545,"line":5595},[5543,11162,11163],{"class":5556},"model_poly = LogisticRegression(",[5543,11165,11166],{"class":5906},"C",[5543,11168,5969],{"class":5556},[5543,11170,6793],{"class":5560},[5543,11172,5824],{"class":5556},[5543,11174,11175],{"class":5545,"line":5602},[5543,11176,11177],{"class":5556},"model_poly.fit(X_poly, y_xor)\n",[5543,11179,11180],{"class":5545,"line":5608},[5543,11181,5599],{"emptyLinePlaceholder":5598},[5543,11183,11184],{"class":5545,"line":5614},[5543,11185,11186],{"class":5556},"accuracy_poly = model_poly.score(X_poly, y_xor)\n",[5543,11188,11189,11191,11193,11195,11198,11200,11203,11205,11207],{"class":5545,"line":5689},[5543,11190,5796],{"class":5795},[5543,11192,5799],{"class":5556},[5543,11194,5803],{"class":5802},[5543,11196,11197],{"class":5636},"\"Точність моделі з поліноміальними ознаками: ",[5543,11199,5809],{"class":5802},[5543,11201,11202],{"class":5556},"accuracy_poly",[5543,11204,10664],{"class":5802},[5543,11206,5821],{"class":5636},[5543,11208,5824],{"class":5556},[5543,11210,11211,11213,11215,11218],{"class":5545,"line":5695},[5543,11212,5796],{"class":5795},[5543,11214,5799],{"class":5556},[5543,11216,11217],{"class":5636},"\"Успіх! Тепер розділова межа — це крива, а не пряма.\"",[5543,11219,5824],{"class":5556},[5543,11221,11222],{"class":5545,"line":5827},[5543,11223,5599],{"emptyLinePlaceholder":5598},[5543,11225,11226,11228,11230,11232],{"class":5545,"line":5850},[5543,11227,5678],{"class":5671},[5543,11229,5860],{"class":5556},[5543,11231,5863],{"class":5671},[5543,11233,5866],{"class":5556},[5543,11235,11236],{"class":5545,"line":5855},[5543,11237,5599],{"emptyLinePlaceholder":5598},[5543,11239,11240,11242,11244,11246,11248,11250,11252,11254,11256,11258,11260,11262,11264],{"class":5545,"line":5869},[5543,11241,10702],{"class":5556},[5543,11243,7267],{"class":5560},[5543,11245,5563],{"class":5556},[5543,11247,9281],{"class":5560},[5543,11249,5563],{"class":5556},[5543,11251,10713],{"class":5560},[5543,11253,10716],{"class":5556},[5543,11255,7267],{"class":5560},[5543,11257,5563],{"class":5556},[5543,11259,9281],{"class":5560},[5543,11261,5563],{"class":5556},[5543,11263,10713],{"class":5560},[5543,11265,5921],{"class":5556},[5543,11267,11268],{"class":5545,"line":5874},[5543,11269,11270],{"class":5556},"grid_poly = poly.transform(np.c_[xx.ravel(), yy.ravel()])\n",[5543,11272,11273,11276,11278],{"class":5545,"line":5895},[5543,11274,11275],{"class":5556},"Z = model_poly.predict_proba(grid_poly)[:, ",[5543,11277,5481],{"class":5560},[5543,11279,10738],{"class":5556},[5543,11281,11282],{"class":5545,"line":5900},[5543,11283,5599],{"emptyLinePlaceholder":5598},[5543,11285,11286,11288,11290,11292,11294,11296,11298],{"class":5545,"line":5924},[5543,11287,5903],{"class":5556},[5543,11289,5907],{"class":5906},[5543,11291,5910],{"class":5556},[5543,11293,8974],{"class":5560},[5543,11295,5563],{"class":5556},[5543,11297,5918],{"class":5560},[5543,11299,5921],{"class":5556},[5543,11301,11302,11304,11306,11308,11310,11312,11314,11316,11318,11320,11322,11324,11326],{"class":5545,"line":5942},[5543,11303,9255],{"class":5556},[5543,11305,9267],{"class":5906},[5543,11307,5969],{"class":5556},[5543,11309,6656],{"class":5560},[5543,11311,5563],{"class":5556},[5543,11313,10773],{"class":5906},[5543,11315,5969],{"class":5556},[5543,11317,10778],{"class":5636},[5543,11319,5563],{"class":5556},[5543,11321,6089],{"class":5906},[5543,11323,5969],{"class":5556},[5543,11325,10787],{"class":5560},[5543,11327,5824],{"class":5556},[5543,11329,11330,11332,11334,11336,11338,11340,11342,11344,11346,11348,11350,11352,11354,11356,11358,11360,11362],{"class":5545,"line":5978},[5543,11331,10794],{"class":5556},[5543,11333,9267],{"class":5906},[5543,11335,9291],{"class":5556},[5543,11337,7267],{"class":5560},[5543,11339,5957],{"class":5556},[5543,11341,10805],{"class":5906},[5543,11343,5969],{"class":5556},[5543,11345,8136],{"class":5636},[5543,11347,5563],{"class":5556},[5543,11349,9039],{"class":5906},[5543,11351,5969],{"class":5556},[5543,11353,7554],{"class":5560},[5543,11355,5563],{"class":5556},[5543,11357,10822],{"class":5906},[5543,11359,5969],{"class":5556},[5543,11361,7604],{"class":5636},[5543,11363,5824],{"class":5556},[5543,11365,11366,11368,11370,11372,11374,11376,11378,11380,11382,11384,11386,11388,11390,11392,11394,11396,11398,11400,11402,11404,11406,11408,11410,11412,11414,11416,11418,11420,11422],{"class":5545,"line":6007},[5543,11367,10833],{"class":5556},[5543,11369,5477],{"class":5560},[5543,11371,5563],{"class":5556},[5543,11373,5477],{"class":5560},[5543,11375,10842],{"class":5556},[5543,11377,5477],{"class":5560},[5543,11379,5563],{"class":5556},[5543,11381,5481],{"class":5560},[5543,11383,5957],{"class":5556},[5543,11385,5960],{"class":5906},[5543,11387,5969],{"class":5556},[5543,11389,5880],{"class":5636},[5543,11391,5563],{"class":5556},[5543,11393,9021],{"class":5906},[5543,11395,5969],{"class":5556},[5543,11397,9026],{"class":5636},[5543,11399,5563],{"class":5556},[5543,11401,5966],{"class":5906},[5543,11403,5969],{"class":5556},[5543,11405,7509],{"class":5560},[5543,11407,5563],{"class":5556},[5543,11409,9039],{"class":5906},[5543,11411,5969],{"class":5556},[5543,11413,5954],{"class":5560},[5543,11415,5563],{"class":5556},[5543,11417,6001],{"class":5906},[5543,11419,5969],{"class":5556},[5543,11421,9720],{"class":5636},[5543,11423,5824],{"class":5556},[5543,11425,11426,11428,11430,11432,11434,11436,11438,11440,11442,11444,11446,11448,11450,11452,11454,11456,11458,11460,11462,11464,11466,11468,11470,11472,11474,11476,11478,11480,11482],{"class":5545,"line":6028},[5543,11427,10833],{"class":5556},[5543,11429,5481],{"class":5560},[5543,11431,5563],{"class":5556},[5543,11433,5477],{"class":5560},[5543,11435,10842],{"class":5556},[5543,11437,5481],{"class":5560},[5543,11439,5563],{"class":5556},[5543,11441,5481],{"class":5560},[5543,11443,5957],{"class":5556},[5543,11445,5960],{"class":5906},[5543,11447,5969],{"class":5556},[5543,11449,5890],{"class":5636},[5543,11451,5563],{"class":5556},[5543,11453,9021],{"class":5906},[5543,11455,5969],{"class":5556},[5543,11457,9111],{"class":5636},[5543,11459,5563],{"class":5556},[5543,11461,5966],{"class":5906},[5543,11463,5969],{"class":5556},[5543,11465,7509],{"class":5560},[5543,11467,5563],{"class":5556},[5543,11469,5991],{"class":5906},[5543,11471,5969],{"class":5556},[5543,11473,5996],{"class":5636},[5543,11475,5563],{"class":5556},[5543,11477,6001],{"class":5906},[5543,11479,5969],{"class":5556},[5543,11481,9685],{"class":5636},[5543,11483,5824],{"class":5556},[5543,11485,11486,11488,11490,11492,11494],{"class":5545,"line":6047},[5543,11487,6010],{"class":5556},[5543,11489,9750],{"class":5636},[5543,11491,9753],{"class":5556},[5543,11493,9756],{"class":5636},[5543,11495,5824],{"class":5556},[5543,11497,11498,11500,11502,11505,11507,11509,11511,11513,11515,11517,11519,11521],{"class":5545,"line":6067},[5543,11499,6050],{"class":5556},[5543,11501,5803],{"class":5802},[5543,11503,11504],{"class":5636},"'XOR: поліноміальні ознаки, точність ",[5543,11506,5809],{"class":5802},[5543,11508,11202],{"class":5556},[5543,11510,10664],{"class":5802},[5543,11512,8172],{"class":5636},[5543,11514,5563],{"class":5556},[5543,11516,6018],{"class":5906},[5543,11518,5969],{"class":5556},[5543,11520,8268],{"class":5560},[5543,11522,5824],{"class":5556},[5543,11524,11525,11527,11529,11531,11533],{"class":5545,"line":6083},[5543,11526,9780],{"class":5556},[5543,11528,6089],{"class":5906},[5543,11530,5969],{"class":5556},[5543,11532,6094],{"class":5560},[5543,11534,5824],{"class":5556},[5543,11536,11537],{"class":5545,"line":6099},[5543,11538,6102],{"class":5556},[6104,11540,11541,11548],{"v-slot:output":5538},[5261,11542,11543],{},[5448,11544],{"alt":11545,"className":11546,"src":11547},"Нелінійна розділова межа після додавання поліноміальних ознак",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F14-xor-polynomial.png",[5532,11549,11552],{"className":11550,"code":11551,"language":6118},[6116],"Точність моделі з поліноміальними ознаками: 100%\nУспіх! Тепер розділова межа — це крива, а не пряма.\n",[5540,11553,11551],{"__ignoreMap":5538},[5422,11555,11556,11562],{},[5261,11557,11558,11561],{},[5224,11559,11560],{},"Стратегія:"," якщо лінійна логістична регресія дає низьку точність (\u003C70%), спробуйте:",[6984,11563,11564,11567,11570],{},[5201,11565,11566],{},"Додати поліноміальні ознаки (степені 2 або 3)",[5201,11568,11569],{},"Використати ядрові методи (SVM з RBF ядром)",[5201,11571,11572],{},"Перейти до нелінійних моделей (дерева рішень, нейронні мережі)",[5253,11574],{},[5256,11576,11578],{"id":11577},"поріг-прийняття-рішень-decision-threshold","Поріг прийняття рішень (Decision Threshold)",[5261,11580,11581,11582,11585,11586,11589],{},"За замовчуванням, логістична регресія використовує поріг 0.5: якщо ",[6363,11583],{"tex":11584,":inline":6366},"P(y=1) \\ge 0.5",", прогнозується клас 1. Але цей поріг можна ",[5224,11587,11588],{},"налаштувати"," під специфіку задачі.",[6927,11591,6935,11594,6935,11597,6935,11600],{"controls":5598,"autoPlay":5598,"loop":5598,"muted":5598,"playsInline":5598,"poster":11592,"className":11593},"\u002Fvideos\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002Flogistic_regression_threshold_tuning_poster.png",[5452,6931,6932,6933,6934],[6937,11595],{"src":11596,"type":6940},"\u002Fvideos\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002Flogistic_regression_threshold_tuning.mp4",[6937,11598],{"src":11599,"type":6944},"\u002Fvideos\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002Flogistic_regression_threshold_tuning.webm",[5448,11601],{"src":11602,"alt":11603,"className":11604},"\u002Fvideos\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002Flogistic_regression_threshold_tuning.gif","Анімація налаштування порогу рішення: динаміка розділової межі у 2D просторі та баланс Precision\u002FRecall",[5452],[5331,11606,11608],{"id":11607},"чому-важливий-вибір-порогу","Чому важливий вибір порогу?",[5261,11610,11611,11612,5273],{},"У різних задачах ",[5224,11613,11614],{},"помилки класифікації мають різну ціну",[5190,11616,11617,11639],{},[5193,11618,11621,11627,11633],{"icon":11619,"title":11620},"i-lucide-heart-pulse","🏥 Медична діагностика",[5261,11622,11623,11626],{},[5224,11624,11625],{},"False Negative (пропустили хвороби)"," — дуже небезпечно! Пацієнт не отримає лікування.",[5261,11628,11629,11632],{},[5224,11630,11631],{},"False Positive (хибна тривога)"," — менш критично, додаткові обстеження.",[5261,11634,11635,11638],{},[5224,11636,11637],{},"Рішення:"," знизити поріг до 0.3, щоб виявити більше потенційних хворих.",[5193,11640,11643,11649,11655],{"icon":11641,"title":11642},"i-lucide-shield-alert","🛡️ Детекція спаму",[5261,11644,11645,11648],{},[5224,11646,11647],{},"False Positive (важливий лист у спам)"," — дуже погано! Користувач пропустить важливу інформацію.",[5261,11650,11651,11654],{},[5224,11652,11653],{},"False Negative (спам у вхідних)"," — менш критично, трохи дратує.",[5261,11656,11657,11659],{},[5224,11658,11637],{}," підвищити поріг до 0.7, щоб бути впевненим перед блокуванням листа.",[5331,11661,11663],{"id":11662},"зміна-порогу-у-коді","Зміна порогу у коді",[5736,11665,11667,11673,12110],{"title":11666,"kernel":6580},"custom_threshold.ipynb",[6582,11668,11669],{"type":6584},[5331,11670,11672],{"id":11671},"налаштування-власного-порогу","Налаштування власного порогу",[6582,11674,11676,12095],{"execution-count":5481,"execution-time":11675},"0.08s",[5532,11677,11679],{"className":5534,"code":11678,"language":5537,"meta":5538,"style":5538},"from sklearn.linear_model import LogisticRegression\nimport numpy as np\n\n# Припустимо, модель вже навчена\n# model = LogisticRegression()\n# model.fit(X_train, y_train)\n\n# Отримуємо ймовірності для тестової вибірки\nX_test = np.array([[50, 75], [70, 90], [40, 60]])\ny_probs = model.predict_proba(X_test)[:, 1]  # Ймовірність класу 1\n\nprint(\"Ймовірності класу 1:\")\nprint(y_probs)\n\nimport matplotlib.pyplot as plt\n\nlabels = [f'Об\\'єкт {i + 1}' for i in range(len(y_probs))]\n\nplt.figure(figsize=(9, 5))\nplt.bar(labels, y_probs, color='#3b82f6', alpha=0.85, width=0.5)\nfor t, c in zip([0.3, 0.5, 0.7], ['#10b981', '#1f2937', '#ef4444']):\n    plt.axhline(t, color=c, linestyle='--', linewidth=2, label=f'Поріг {t}')\nfor i, p in enumerate(y_probs):\n    plt.text(i, p + 0.02, f'{p:.2f}', ha='center', fontsize=12)\nplt.ylim(0, 1)\nplt.ylabel('P(y = 1)')\nplt.title('Той самий об\\'єкт — різні рішення при різних порогах', fontsize=13)\nplt.legend()\nplt.show()\n",[5540,11680,11681,11691,11701,11705,11710,11715,11720,11724,11729,11758,11770,11774,11785,11792,11796,11806,11810,11855,11859,11875,11906,11945,11990,12004,12043,12056,12065,12087,12091],{"__ignoreMap":5538},[5543,11682,11683,11685,11687,11689],{"class":5545,"line":5546},[5543,11684,5672],{"class":5671},[5543,11686,5762],{"class":5556},[5543,11688,5678],{"class":5671},[5543,11690,5767],{"class":5556},[5543,11692,11693,11695,11697,11699],{"class":5545,"line":5553},[5543,11694,5678],{"class":5671},[5543,11696,6603],{"class":5556},[5543,11698,5863],{"class":5671},[5543,11700,6608],{"class":5556},[5543,11702,11703],{"class":5545,"line":5595},[5543,11704,5599],{"emptyLinePlaceholder":5598},[5543,11706,11707],{"class":5545,"line":5602},[5543,11708,11709],{"class":5549},"# Припустимо, модель вже навчена\n",[5543,11711,11712],{"class":5545,"line":5608},[5543,11713,11714],{"class":5549},"# model = LogisticRegression()\n",[5543,11716,11717],{"class":5545,"line":5614},[5543,11718,11719],{"class":5549},"# model.fit(X_train, y_train)\n",[5543,11721,11722],{"class":5545,"line":5689},[5543,11723,5599],{"emptyLinePlaceholder":5598},[5543,11725,11726],{"class":5545,"line":5695},[5543,11727,11728],{"class":5549},"# Отримуємо ймовірності для тестової вибірки\n",[5543,11730,11731,11734,11736,11738,11740,11742,11744,11746,11748,11750,11752,11754,11756],{"class":5545,"line":5827},[5543,11732,11733],{"class":5556},"X_test = np.array([[",[5543,11735,6788],{"class":5560},[5543,11737,5563],{"class":5556},[5543,11739,8629],{"class":5560},[5543,11741,8093],{"class":5556},[5543,11743,8610],{"class":5560},[5543,11745,5563],{"class":5556},[5543,11747,8619],{"class":5560},[5543,11749,8093],{"class":5556},[5543,11751,6686],{"class":5560},[5543,11753,5563],{"class":5556},[5543,11755,5972],{"class":5560},[5543,11757,7919],{"class":5556},[5543,11759,11760,11763,11765,11768],{"class":5545,"line":5850},[5543,11761,11762],{"class":5556},"y_probs = model.predict_proba(X_test)[:, ",[5543,11764,5481],{"class":5560},[5543,11766,11767],{"class":5556},"]  ",[5543,11769,7220],{"class":5549},[5543,11771,11772],{"class":5545,"line":5855},[5543,11773,5599],{"emptyLinePlaceholder":5598},[5543,11775,11776,11778,11780,11783],{"class":5545,"line":5869},[5543,11777,5796],{"class":5795},[5543,11779,5799],{"class":5556},[5543,11781,11782],{"class":5636},"\"Ймовірності класу 1:\"",[5543,11784,5824],{"class":5556},[5543,11786,11787,11789],{"class":5545,"line":5874},[5543,11788,5796],{"class":5795},[5543,11790,11791],{"class":5556},"(y_probs)\n",[5543,11793,11794],{"class":5545,"line":5895},[5543,11795,5599],{"emptyLinePlaceholder":5598},[5543,11797,11798,11800,11802,11804],{"class":5545,"line":5900},[5543,11799,5678],{"class":5671},[5543,11801,5860],{"class":5556},[5543,11803,5863],{"class":5671},[5543,11805,5866],{"class":5556},[5543,11807,11808],{"class":5545,"line":5924},[5543,11809,5599],{"emptyLinePlaceholder":5598},[5543,11811,11812,11815,11817,11820,11823,11826,11828,11831,11833,11835,11837,11840,11843,11845,11848,11850,11852],{"class":5545,"line":5942},[5543,11813,11814],{"class":5556},"labels = [",[5543,11816,5803],{"class":5802},[5543,11818,11819],{"class":5636},"'Об",[5543,11821,11822],{"class":8896},"\\'",[5543,11824,11825],{"class":5636},"єкт ",[5543,11827,5809],{"class":5802},[5543,11829,11830],{"class":5556},"i + ",[5543,11832,5481],{"class":5560},[5543,11834,5818],{"class":5802},[5543,11836,8172],{"class":5636},[5543,11838,11839],{"class":5671}," for",[5543,11841,11842],{"class":5556}," i ",[5543,11844,5933],{"class":5671},[5543,11846,11847],{"class":5795}," range",[5543,11849,5799],{"class":5556},[5543,11851,5812],{"class":5795},[5543,11853,11854],{"class":5556},"(y_probs))]\n",[5543,11856,11857],{"class":5545,"line":5978},[5543,11858,5599],{"emptyLinePlaceholder":5598},[5543,11860,11861,11863,11865,11867,11869,11871,11873],{"class":5545,"line":6007},[5543,11862,5903],{"class":5556},[5543,11864,5907],{"class":5906},[5543,11866,5910],{"class":5556},[5543,11868,5913],{"class":5560},[5543,11870,5563],{"class":5556},[5543,11872,7770],{"class":5560},[5543,11874,5921],{"class":5556},[5543,11876,11877,11880,11882,11884,11886,11888,11890,11892,11895,11897,11900,11902,11904],{"class":5545,"line":6028},[5543,11878,11879],{"class":5556},"plt.bar(labels, y_probs, ",[5543,11881,7559],{"class":5906},[5543,11883,5969],{"class":5556},[5543,11885,5885],{"class":5636},[5543,11887,5563],{"class":5556},[5543,11889,6089],{"class":5906},[5543,11891,5969],{"class":5556},[5543,11893,11894],{"class":5560},"0.85",[5543,11896,5563],{"class":5556},[5543,11898,11899],{"class":5906},"width",[5543,11901,5969],{"class":5556},[5543,11903,7267],{"class":5560},[5543,11905,5824],{"class":5556},[5543,11907,11908,11910,11913,11915,11917,11920,11922,11924,11926,11928,11930,11932,11934,11936,11938,11940,11942],{"class":5545,"line":6047},[5543,11909,5927],{"class":5671},[5543,11911,11912],{"class":5556}," t, c ",[5543,11914,5933],{"class":5671},[5543,11916,10351],{"class":5795},[5543,11918,11919],{"class":5556},"([",[5543,11921,6094],{"class":5560},[5543,11923,5563],{"class":5556},[5543,11925,7267],{"class":5560},[5543,11927,5563],{"class":5556},[5543,11929,7613],{"class":5560},[5543,11931,8093],{"class":5556},[5543,11933,5890],{"class":5636},[5543,11935,5563],{"class":5556},[5543,11937,8136],{"class":5636},[5543,11939,5563],{"class":5556},[5543,11941,5880],{"class":5636},[5543,11943,11944],{"class":5556},"]):\n",[5543,11946,11947,11950,11952,11954,11956,11958,11960,11962,11964,11966,11968,11970,11972,11974,11976,11979,11981,11984,11986,11988],{"class":5545,"line":6067},[5543,11948,11949],{"class":5556},"    plt.axhline(t, ",[5543,11951,7559],{"class":5906},[5543,11953,10364],{"class":5556},[5543,11955,7599],{"class":5906},[5543,11957,5969],{"class":5556},[5543,11959,7604],{"class":5636},[5543,11961,5563],{"class":5556},[5543,11963,7549],{"class":5906},[5543,11965,5969],{"class":5556},[5543,11967,5948],{"class":5560},[5543,11969,5563],{"class":5556},[5543,11971,6001],{"class":5906},[5543,11973,5969],{"class":5556},[5543,11975,5803],{"class":5802},[5543,11977,11978],{"class":5636},"'Поріг ",[5543,11980,5809],{"class":5802},[5543,11982,11983],{"class":5556},"t",[5543,11985,5818],{"class":5802},[5543,11987,8172],{"class":5636},[5543,11989,5824],{"class":5556},[5543,11991,11992,11994,11997,11999,12001],{"class":5545,"line":6083},[5543,11993,5927],{"class":5671},[5543,11995,11996],{"class":5556}," i, p ",[5543,11998,5933],{"class":5671},[5543,12000,5936],{"class":5795},[5543,12002,12003],{"class":5556},"(y_probs):\n",[5543,12005,12006,12009,12011,12013,12015,12017,12019,12021,12023,12025,12027,12029,12031,12033,12035,12037,12039,12041],{"class":5545,"line":6099},[5543,12007,12008],{"class":5556},"    plt.text(i, p + ",[5543,12010,7123],{"class":5560},[5543,12012,5563],{"class":5556},[5543,12014,5803],{"class":5802},[5543,12016,8172],{"class":5636},[5543,12018,5809],{"class":5802},[5543,12020,5261],{"class":5556},[5543,12022,7163],{"class":5802},[5543,12024,8172],{"class":5636},[5543,12026,5563],{"class":5556},[5543,12028,8185],{"class":5906},[5543,12030,5969],{"class":5556},[5543,12032,8190],{"class":5636},[5543,12034,5563],{"class":5556},[5543,12036,6018],{"class":5906},[5543,12038,5969],{"class":5556},[5543,12040,6023],{"class":5560},[5543,12042,5824],{"class":5556},[5543,12044,12045,12048,12050,12052,12054],{"class":5545,"line":7782},[5543,12046,12047],{"class":5556},"plt.ylim(",[5543,12049,5477],{"class":5560},[5543,12051,5563],{"class":5556},[5543,12053,5481],{"class":5560},[5543,12055,5824],{"class":5556},[5543,12057,12058,12060,12063],{"class":5545,"line":7809},[5543,12059,6031],{"class":5556},[5543,12061,12062],{"class":5636},"'P(y = 1)'",[5543,12064,5824],{"class":5556},[5543,12066,12067,12069,12072,12074,12077,12079,12081,12083,12085],{"class":5545,"line":9340},[5543,12068,6050],{"class":5556},[5543,12070,12071],{"class":5636},"'Той самий об",[5543,12073,11822],{"class":8896},[5543,12075,12076],{"class":5636},"єкт — різні рішення при різних порогах'",[5543,12078,5563],{"class":5556},[5543,12080,6018],{"class":5906},[5543,12082,5969],{"class":5556},[5543,12084,8268],{"class":5560},[5543,12086,5824],{"class":5556},[5543,12088,12089],{"class":5545,"line":9358},[5543,12090,7738],{"class":5556},[5543,12092,12093],{"class":5545,"line":9372},[5543,12094,6102],{"class":5556},[6104,12096,12097,12104],{"v-slot:output":5538},[5261,12098,12099],{},[5448,12100],{"alt":12101,"className":12102,"src":12103},"Ймовірності трьох об'єктів та пороги 0.3, 0.5, 0.7",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F15-custom-threshold.png",[5532,12105,12108],{"className":12106,"code":12107,"language":6118},[6116],"Ймовірності класу 1:\n[0.35 0.82 0.18]\n",[5540,12109,12107],{"__ignoreMap":5538},[6582,12111,12113,12201],{"execution-count":5948,"execution-time":12112},"0.03s",[5532,12114,12116],{"className":5534,"code":12115,"language":5537,"meta":5538,"style":5538},"# Застосування різних порогів\nthresholds = [0.3, 0.5, 0.7]\n\nfor threshold in thresholds:\n    y_pred = (y_probs >= threshold).astype(int)\n    print(f\"\\nПоріг {threshold}: прогнози = {y_pred}\")\n",[5540,12117,12118,12123,12140,12144,12156,12167],{"__ignoreMap":5538},[5543,12119,12120],{"class":5545,"line":5546},[5543,12121,12122],{"class":5549},"# Застосування різних порогів\n",[5543,12124,12125,12128,12130,12132,12134,12136,12138],{"class":5545,"line":5553},[5543,12126,12127],{"class":5556},"thresholds = [",[5543,12129,6094],{"class":5560},[5543,12131,5563],{"class":5556},[5543,12133,7267],{"class":5560},[5543,12135,5563],{"class":5556},[5543,12137,7613],{"class":5560},[5543,12139,5657],{"class":5556},[5543,12141,12142],{"class":5545,"line":5595},[5543,12143,5599],{"emptyLinePlaceholder":5598},[5543,12145,12146,12148,12151,12153],{"class":5545,"line":5602},[5543,12147,5927],{"class":5671},[5543,12149,12150],{"class":5556}," threshold ",[5543,12152,5933],{"class":5671},[5543,12154,12155],{"class":5556}," thresholds:\n",[5543,12157,12158,12161,12165],{"class":5545,"line":5608},[5543,12159,12160],{"class":5556},"    y_pred = (y_probs >= threshold).astype(",[5543,12162,12164],{"class":12163},"sN1BT","int",[5543,12166,5824],{"class":5556},[5543,12168,12169,12171,12173,12175,12177,12179,12182,12184,12186,12188,12191,12193,12195,12197,12199],{"class":5545,"line":5614},[5543,12170,10230],{"class":5795},[5543,12172,5799],{"class":5556},[5543,12174,5803],{"class":5802},[5543,12176,5821],{"class":5636},[5543,12178,8897],{"class":8896},[5543,12180,12181],{"class":5636},"Поріг ",[5543,12183,5809],{"class":5802},[5543,12185,7871],{"class":5556},[5543,12187,5818],{"class":5802},[5543,12189,12190],{"class":5636},": прогнози = ",[5543,12192,5809],{"class":5802},[5543,12194,7289],{"class":5556},[5543,12196,5818],{"class":5802},[5543,12198,5821],{"class":5636},[5543,12200,5824],{"class":5556},[6104,12202,12203],{"v-slot:output":5538},[5532,12204,12207],{"className":12205,"code":12206,"language":6118},[6116],"Поріг 0.3: прогнози = [1 1 0]\nПоріг 0.5: прогнози = [0 1 0]\nПоріг 0.7: прогнози = [0 1 0]\n",[5540,12208,12206],{"__ignoreMap":5538},[5301,12210,12211,12216],{},[5261,12212,12213],{},[5224,12214,12215],{},"Практичне правило:",[5198,12217,12218,12227],{},[5201,12219,12220,12223,12224,5499],{},[5224,12221,12222],{},"Низький поріг (0.3)"," → модель стає більш \"обережною\", частіше прогнозує клас 1 (висока повнота, ",[5296,12225,12226],{},"recall",[5201,12228,12229,12232,12233,5499],{},[5224,12230,12231],{},"Високий поріг (0.7)"," → модель стає більш \"консервативною\", рідше прогнозує клас 1 (висока точність, ",[5296,12234,12235],{},"precision",[5253,12237],{},[5256,12239,12241],{"id":12240},"багатокласова-логістична-регресія-multiclass","Багатокласова логістична регресія (Multiclass)",[5261,12243,12244,12245,12248],{},"Базова логістична регресія призначена для ",[5224,12246,12247],{},"бінарної класифікації"," (2 класи). Для задач з 3+ класами використовують розширення.",[5331,12250,12252],{"id":12251},"стратегія-один-проти-всіх-one-vs-rest","Стратегія \"Один проти всіх\" (One-vs-Rest)",[5261,12254,12255,12258,12259,12262,12263,12265,12266,12269],{},[5224,12256,12257],{},"Ідея:"," навчити ",[6363,12260],{"tex":12261,":inline":6366},"K"," окремих бінарних класифікаторів (де ",[6363,12264],{"tex":12261,":inline":6366}," — кількість класів). Кожен класифікатор відповідає на питання: \"Чи належить об'єкт до класу ",[6363,12267],{"tex":12268,":inline":6366},"k","?\"",[5261,12271,12272],{},[5448,12273],{"alt":12274,"className":12275,"src":12276},"Схема стратегії One-vs-Rest для трьох класів",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F07-one-vs-rest.png",[5736,12278,12280,12286,12510],{"title":12279,"kernel":6580},"multiclass_ovr.ipynb",[6582,12281,12282],{"type":6584},[5331,12283,12285],{"id":12284},"приклад-класифікація-квітів-iris-3-класи","Приклад: класифікація квітів Iris (3 класи)",[6582,12287,12289,12502],{"execution-count":5481,"execution-time":12288},"0.11s",[5532,12290,12292],{"className":5534,"code":12291,"language":5537,"meta":5538,"style":5538},"from sklearn.datasets import load_iris\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.model_selection import train_test_split\n\n# Завантаження датасету Iris\niris = load_iris()\nX, y = iris.data, iris.target\n\n# Розбиття на навчальну та тестову вибірки\nX_train, X_test, y_train, y_test = train_test_split(\n    X, y, test_size=0.3, random_state=42\n)\n\n# Навчання моделі з multi_class='ovr'\nmodel_ovr = LogisticRegression(multi_class='ovr', max_iter=200)\nmodel_ovr.fit(X_train, y_train)\n\naccuracy = model_ovr.score(X_test, y_test)\nprint(f\"Точність на тестовій вибірці: {accuracy:.1%}\")\nprint(f\"\\nМодель навчила {len(model_ovr.coef_)} бінарних класифікаторів\")\nprint(f\"Форма матриці ваг: {model_ovr.coef_.shape}\")\n",[5540,12293,12294,12304,12314,12326,12330,12335,12339,12343,12347,12352,12357,12379,12383,12387,12392,12416,12421,12425,12430,12451,12480],{"__ignoreMap":5538},[5543,12295,12296,12298,12300,12302],{"class":5545,"line":5546},[5543,12297,5672],{"class":5671},[5543,12299,5750],{"class":5556},[5543,12301,5678],{"class":5671},[5543,12303,5755],{"class":5556},[5543,12305,12306,12308,12310,12312],{"class":5545,"line":5553},[5543,12307,5672],{"class":5671},[5543,12309,5762],{"class":5556},[5543,12311,5678],{"class":5671},[5543,12313,5767],{"class":5556},[5543,12315,12316,12318,12321,12323],{"class":5545,"line":5595},[5543,12317,5672],{"class":5671},[5543,12319,12320],{"class":5556}," sklearn.model_selection ",[5543,12322,5678],{"class":5671},[5543,12324,12325],{"class":5556}," train_test_split\n",[5543,12327,12328],{"class":5545,"line":5602},[5543,12329,5599],{"emptyLinePlaceholder":5598},[5543,12331,12332],{"class":5545,"line":5608},[5543,12333,12334],{"class":5549},"# Завантаження датасету Iris\n",[5543,12336,12337],{"class":5545,"line":5614},[5543,12338,5781],{"class":5556},[5543,12340,12341],{"class":5545,"line":5689},[5543,12342,5786],{"class":5556},[5543,12344,12345],{"class":5545,"line":5695},[5543,12346,5599],{"emptyLinePlaceholder":5598},[5543,12348,12349],{"class":5545,"line":5827},[5543,12350,12351],{"class":5549},"# Розбиття на навчальну та тестову вибірки\n",[5543,12353,12354],{"class":5545,"line":5850},[5543,12355,12356],{"class":5556},"X_train, X_test, y_train, y_test = train_test_split(\n",[5543,12358,12359,12362,12365,12367,12369,12371,12374,12376],{"class":5545,"line":5855},[5543,12360,12361],{"class":5556},"    X, y, ",[5543,12363,12364],{"class":5906},"test_size",[5543,12366,5969],{"class":5556},[5543,12368,6094],{"class":5560},[5543,12370,5563],{"class":5556},[5543,12372,12373],{"class":5906},"random_state",[5543,12375,5969],{"class":5556},[5543,12377,12378],{"class":5560},"42\n",[5543,12380,12381],{"class":5545,"line":5869},[5543,12382,5824],{"class":5556},[5543,12384,12385],{"class":5545,"line":5874},[5543,12386,5599],{"emptyLinePlaceholder":5598},[5543,12388,12389],{"class":5545,"line":5895},[5543,12390,12391],{"class":5549},"# Навчання моделі з multi_class='ovr'\n",[5543,12393,12394,12397,12400,12402,12405,12407,12410,12412,12414],{"class":5545,"line":5900},[5543,12395,12396],{"class":5556},"model_ovr = LogisticRegression(",[5543,12398,12399],{"class":5906},"multi_class",[5543,12401,5969],{"class":5556},[5543,12403,12404],{"class":5636},"'ovr'",[5543,12406,5563],{"class":5556},[5543,12408,12409],{"class":5906},"max_iter",[5543,12411,5969],{"class":5556},[5543,12413,7509],{"class":5560},[5543,12415,5824],{"class":5556},[5543,12417,12418],{"class":5545,"line":5924},[5543,12419,12420],{"class":5556},"model_ovr.fit(X_train, y_train)\n",[5543,12422,12423],{"class":5545,"line":5942},[5543,12424,5599],{"emptyLinePlaceholder":5598},[5543,12426,12427],{"class":5545,"line":5978},[5543,12428,12429],{"class":5556},"accuracy = model_ovr.score(X_test, y_test)\n",[5543,12431,12432,12434,12436,12438,12441,12443,12445,12447,12449],{"class":5545,"line":6007},[5543,12433,5796],{"class":5795},[5543,12435,5799],{"class":5556},[5543,12437,5803],{"class":5802},[5543,12439,12440],{"class":5636},"\"Точність на тестовій вибірці: ",[5543,12442,5809],{"class":5802},[5543,12444,10661],{"class":5556},[5543,12446,7972],{"class":5802},[5543,12448,5821],{"class":5636},[5543,12450,5824],{"class":5556},[5543,12452,12453,12455,12457,12459,12461,12463,12466,12468,12470,12473,12475,12478],{"class":5545,"line":6028},[5543,12454,5796],{"class":5795},[5543,12456,5799],{"class":5556},[5543,12458,5803],{"class":5802},[5543,12460,5821],{"class":5636},[5543,12462,8897],{"class":8896},[5543,12464,12465],{"class":5636},"Модель навчила ",[5543,12467,5809],{"class":5802},[5543,12469,5812],{"class":5795},[5543,12471,12472],{"class":5556},"(model_ovr.coef_)",[5543,12474,5818],{"class":5802},[5543,12476,12477],{"class":5636}," бінарних класифікаторів\"",[5543,12479,5824],{"class":5556},[5543,12481,12482,12484,12486,12488,12491,12493,12496,12498,12500],{"class":5545,"line":6047},[5543,12483,5796],{"class":5795},[5543,12485,5799],{"class":5556},[5543,12487,5803],{"class":5802},[5543,12489,12490],{"class":5636},"\"Форма матриці ваг: ",[5543,12492,5809],{"class":5802},[5543,12494,12495],{"class":5556},"model_ovr.coef_.shape",[5543,12497,5818],{"class":5802},[5543,12499,5821],{"class":5636},[5543,12501,5824],{"class":5556},[6104,12503,12504],{"v-slot:output":5538},[5532,12505,12508],{"className":12506,"code":12507,"language":6118},[6116],"Точність на тестовій вибірці: 97.8%\n\nМодель навчила 3 бінарних класифікаторів\nФорма матриці ваг: (3, 4)\n",[5540,12509,12507],{"__ignoreMap":5538},[6582,12511,12513,12854],{"execution-count":5948,"execution-time":12512},"0.05s",[5532,12514,12516],{"className":5534,"code":12515,"language":5537,"meta":5538,"style":5538},"# Прогноз для одного об'єкта\nsample = X_test[0:1]\nprobs = model_ovr.predict_proba(sample)[0]\n\nprint(\"Ймовірності для кожного класу:\")\nfor i, (class_name, prob) in enumerate(zip(iris.target_names, probs)):\n    print(f\"  Клас {i} ({class_name:10s}): {prob:.1%}\")\n\npredicted_class = model_ovr.predict(sample)[0]\nprint(f\"\\nПрогноз: клас {predicted_class} ({iris.target_names[predicted_class]})\")\n\nimport matplotlib.pyplot as plt\n\ncolors = ['#ef4444', '#3b82f6', '#10b981']\n\nplt.figure(figsize=(8, 5))\nbars = plt.bar(iris.target_names, probs, color=colors, alpha=0.85)\nfor bar, p in zip(bars, probs):\n    plt.text(bar.get_x() + bar.get_width() \u002F 2, p + 0.02, f'{p:.1%}', ha='center', fontsize=12)\nplt.ylim(0, 1.1)\nplt.ylabel('Ймовірність')\nplt.title(f'Прогноз: {iris.target_names[predicted_class]}', fontsize=13)\nplt.show()\n",[5540,12517,12518,12523,12536,12545,12549,12560,12579,12621,12625,12634,12670,12674,12684,12688,12704,12708,12725,12743,12757,12801,12814,12823,12850],{"__ignoreMap":5538},[5543,12519,12520],{"class":5545,"line":5546},[5543,12521,12522],{"class":5549},"# Прогноз для одного об'єкта\n",[5543,12524,12525,12528,12530,12532,12534],{"class":5545,"line":5553},[5543,12526,12527],{"class":5556},"sample = X_test[",[5543,12529,5477],{"class":5560},[5543,12531,5273],{"class":5556},[5543,12533,5481],{"class":5560},[5543,12535,5657],{"class":5556},[5543,12537,12538,12541,12543],{"class":5545,"line":5595},[5543,12539,12540],{"class":5556},"probs = model_ovr.predict_proba(sample)[",[5543,12542,5477],{"class":5560},[5543,12544,5657],{"class":5556},[5543,12546,12547],{"class":5545,"line":5602},[5543,12548,5599],{"emptyLinePlaceholder":5598},[5543,12550,12551,12553,12555,12558],{"class":5545,"line":5608},[5543,12552,5796],{"class":5795},[5543,12554,5799],{"class":5556},[5543,12556,12557],{"class":5636},"\"Ймовірності для кожного класу:\"",[5543,12559,5824],{"class":5556},[5543,12561,12562,12564,12567,12569,12571,12573,12576],{"class":5545,"line":5614},[5543,12563,5927],{"class":5671},[5543,12565,12566],{"class":5556}," i, (class_name, prob) ",[5543,12568,5933],{"class":5671},[5543,12570,5936],{"class":5795},[5543,12572,5799],{"class":5556},[5543,12574,12575],{"class":5795},"zip",[5543,12577,12578],{"class":5556},"(iris.target_names, probs)):\n",[5543,12580,12581,12583,12585,12587,12590,12592,12595,12597,12599,12601,12604,12607,12610,12612,12615,12617,12619],{"class":5545,"line":5689},[5543,12582,10230],{"class":5795},[5543,12584,5799],{"class":5556},[5543,12586,5803],{"class":5802},[5543,12588,12589],{"class":5636},"\"  Клас ",[5543,12591,5809],{"class":5802},[5543,12593,12594],{"class":5556},"i",[5543,12596,5818],{"class":5802},[5543,12598,5294],{"class":5636},[5543,12600,5809],{"class":5802},[5543,12602,12603],{"class":5556},"class_name",[5543,12605,12606],{"class":5802},":10s}",[5543,12608,12609],{"class":5636},"): ",[5543,12611,5809],{"class":5802},[5543,12613,12614],{"class":5556},"prob",[5543,12616,7972],{"class":5802},[5543,12618,5821],{"class":5636},[5543,12620,5824],{"class":5556},[5543,12622,12623],{"class":5545,"line":5695},[5543,12624,5599],{"emptyLinePlaceholder":5598},[5543,12626,12627,12630,12632],{"class":5545,"line":5827},[5543,12628,12629],{"class":5556},"predicted_class = model_ovr.predict(sample)[",[5543,12631,5477],{"class":5560},[5543,12633,5657],{"class":5556},[5543,12635,12636,12638,12640,12642,12644,12646,12649,12651,12654,12656,12658,12660,12663,12665,12668],{"class":5545,"line":5850},[5543,12637,5796],{"class":5795},[5543,12639,5799],{"class":5556},[5543,12641,5803],{"class":5802},[5543,12643,5821],{"class":5636},[5543,12645,8897],{"class":8896},[5543,12647,12648],{"class":5636},"Прогноз: клас ",[5543,12650,5809],{"class":5802},[5543,12652,12653],{"class":5556},"predicted_class",[5543,12655,5818],{"class":5802},[5543,12657,5294],{"class":5636},[5543,12659,5809],{"class":5802},[5543,12661,12662],{"class":5556},"iris.target_names[predicted_class]",[5543,12664,5818],{"class":5802},[5543,12666,12667],{"class":5636},")\"",[5543,12669,5824],{"class":5556},[5543,12671,12672],{"class":5545,"line":5855},[5543,12673,5599],{"emptyLinePlaceholder":5598},[5543,12675,12676,12678,12680,12682],{"class":5545,"line":5869},[5543,12677,5678],{"class":5671},[5543,12679,5860],{"class":5556},[5543,12681,5863],{"class":5671},[5543,12683,5866],{"class":5556},[5543,12685,12686],{"class":5545,"line":5874},[5543,12687,5599],{"emptyLinePlaceholder":5598},[5543,12689,12690,12692,12694,12696,12698,12700,12702],{"class":5545,"line":5895},[5543,12691,5877],{"class":5556},[5543,12693,5880],{"class":5636},[5543,12695,5563],{"class":5556},[5543,12697,5885],{"class":5636},[5543,12699,5563],{"class":5556},[5543,12701,5890],{"class":5636},[5543,12703,5657],{"class":5556},[5543,12705,12706],{"class":5545,"line":5900},[5543,12707,5599],{"emptyLinePlaceholder":5598},[5543,12709,12710,12712,12714,12716,12719,12721,12723],{"class":5545,"line":5924},[5543,12711,5903],{"class":5556},[5543,12713,5907],{"class":5906},[5543,12715,5910],{"class":5556},[5543,12717,12718],{"class":5560},"8",[5543,12720,5563],{"class":5556},[5543,12722,7770],{"class":5560},[5543,12724,5921],{"class":5556},[5543,12726,12727,12730,12732,12735,12737,12739,12741],{"class":5545,"line":5942},[5543,12728,12729],{"class":5556},"bars = plt.bar(iris.target_names, probs, ",[5543,12731,7559],{"class":5906},[5543,12733,12734],{"class":5556},"=colors, ",[5543,12736,6089],{"class":5906},[5543,12738,5969],{"class":5556},[5543,12740,11894],{"class":5560},[5543,12742,5824],{"class":5556},[5543,12744,12745,12747,12750,12752,12754],{"class":5545,"line":5978},[5543,12746,5927],{"class":5671},[5543,12748,12749],{"class":5556}," bar, p ",[5543,12751,5933],{"class":5671},[5543,12753,10351],{"class":5795},[5543,12755,12756],{"class":5556},"(bars, probs):\n",[5543,12758,12759,12762,12764,12767,12769,12771,12773,12775,12777,12779,12781,12783,12785,12787,12789,12791,12793,12795,12797,12799],{"class":5545,"line":6007},[5543,12760,12761],{"class":5556},"    plt.text(bar.get_x() + bar.get_width() \u002F ",[5543,12763,5948],{"class":5560},[5543,12765,12766],{"class":5556},", p + ",[5543,12768,7123],{"class":5560},[5543,12770,5563],{"class":5556},[5543,12772,5803],{"class":5802},[5543,12774,8172],{"class":5636},[5543,12776,5809],{"class":5802},[5543,12778,5261],{"class":5556},[5543,12780,7972],{"class":5802},[5543,12782,8172],{"class":5636},[5543,12784,5563],{"class":5556},[5543,12786,8185],{"class":5906},[5543,12788,5969],{"class":5556},[5543,12790,8190],{"class":5636},[5543,12792,5563],{"class":5556},[5543,12794,6018],{"class":5906},[5543,12796,5969],{"class":5556},[5543,12798,6023],{"class":5560},[5543,12800,5824],{"class":5556},[5543,12802,12803,12805,12807,12809,12812],{"class":5545,"line":6028},[5543,12804,12047],{"class":5556},[5543,12806,5477],{"class":5560},[5543,12808,5563],{"class":5556},[5543,12810,12811],{"class":5560},"1.1",[5543,12813,5824],{"class":5556},[5543,12815,12816,12818,12821],{"class":5545,"line":6047},[5543,12817,6031],{"class":5556},[5543,12819,12820],{"class":5636},"'Ймовірність'",[5543,12822,5824],{"class":5556},[5543,12824,12825,12827,12829,12832,12834,12836,12838,12840,12842,12844,12846,12848],{"class":5545,"line":6067},[5543,12826,6050],{"class":5556},[5543,12828,5803],{"class":5802},[5543,12830,12831],{"class":5636},"'Прогноз: ",[5543,12833,5809],{"class":5802},[5543,12835,12662],{"class":5556},[5543,12837,5818],{"class":5802},[5543,12839,8172],{"class":5636},[5543,12841,5563],{"class":5556},[5543,12843,6018],{"class":5906},[5543,12845,5969],{"class":5556},[5543,12847,8268],{"class":5560},[5543,12849,5824],{"class":5556},[5543,12851,12852],{"class":5545,"line":6083},[5543,12853,6102],{"class":5556},[6104,12855,12856,12863],{"v-slot:output":5538},[5261,12857,12858],{},[5448,12859],{"alt":12860,"className":12861,"src":12862},"Ймовірності класів Iris для одного об'єкта (One-vs-Rest)",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F16-ovr-probabilities.png",[5532,12864,12867],{"className":12865,"code":12866,"language":6118},[6116],"Ймовірності для кожного класу:\n  Клас 0 (setosa    ): 0.1%\n  Клас 1 (versicolor): 95.3%\n  Клас 2 (virginica ): 4.6%\n\nПрогноз: клас 1 (versicolor)\n",[5540,12868,12866],{"__ignoreMap":5538},[5331,12870,12872],{"id":12871},"стратегія-мультиноміальна-softmax","Стратегія \"Мультиноміальна\" (Softmax)",[5261,12874,12875,12258,12877,12880,12881,5467],{},[5224,12876,12257],{},[5224,12878,12879],{},"одну"," модель, яка одразу обчислює ймовірності для всіх класів через ",[5224,12882,12883],{},"softmax-функцію",[6363,12885],{"tex":12886},"P(y = k \\mid \\mathbf{x}) = \\frac{e^{z_k}}{\\sum_{j=1}^{K} e^{z_j}}",[5261,12888,12889,12890,12893,12894,5467],{},"Де ",[6363,12891],{"tex":12892,":inline":6366},"z_k = \\mathbf{w}_k^T \\mathbf{x} + b_k"," — лінійна комбінація для класу ",[6363,12895],{"tex":12268,":inline":6366},[5736,12897,12899,13228],{"title":12898,"execution-count":5481},"multiclass_softmax.ipynb",[5532,12900,12902],{"className":5534,"code":12901,"language":5537,"meta":5538,"style":5538},"# Навчання моделі з multi_class='multinomial'\nmodel_softmax = LogisticRegression(multi_class='multinomial', max_iter=200)\nmodel_softmax.fit(X_train, y_train)\n\naccuracy_softmax = model_softmax.score(X_test, y_test)\nprint(f\"Точність (softmax): {accuracy_softmax:.1%}\")\n\nimport matplotlib.pyplot as plt\nfrom matplotlib.colors import ListedColormap\n\n# Для 2D-візуалізації навчаємо softmax лише на ознаках пелюстки\nmodel_2d = LogisticRegression(max_iter=200)\nmodel_2d.fit(X_train[:, 2:], y_train)\n\nxx, yy = np.meshgrid(np.linspace(0.5, 7.5, 300), np.linspace(-0.2, 2.8, 300))\nZ = model_2d.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)\ncolors = ['#ef4444', '#3b82f6', '#10b981']\n\nplt.figure(figsize=(9, 6))\nplt.contourf(xx, yy, Z, alpha=0.2, cmap=ListedColormap(colors))\nfor k, name in enumerate(iris.target_names):\n    plt.scatter(X_train[y_train == k, 2], X_train[y_train == k, 3], c=colors[k],\n                s=50, edgecolor='white', label=name)\nplt.xlabel('Довжина пелюстки (см)', fontsize=12)\nplt.ylabel('Ширина пелюстки (см)', fontsize=12)\nplt.title('Softmax: три лінійні області рішень', fontsize=14)\nplt.legend()\nplt.show()\n",[5540,12903,12904,12909,12931,12936,12940,12945,12967,12971,12981,12993,12997,13002,13015,13025,13029,13059,13064,13080,13084,13100,13117,13129,13148,13171,13187,13203,13220,13224],{"__ignoreMap":5538},[5543,12905,12906],{"class":5545,"line":5546},[5543,12907,12908],{"class":5549},"# Навчання моделі з multi_class='multinomial'\n",[5543,12910,12911,12914,12916,12918,12921,12923,12925,12927,12929],{"class":5545,"line":5553},[5543,12912,12913],{"class":5556},"model_softmax = LogisticRegression(",[5543,12915,12399],{"class":5906},[5543,12917,5969],{"class":5556},[5543,12919,12920],{"class":5636},"'multinomial'",[5543,12922,5563],{"class":5556},[5543,12924,12409],{"class":5906},[5543,12926,5969],{"class":5556},[5543,12928,7509],{"class":5560},[5543,12930,5824],{"class":5556},[5543,12932,12933],{"class":5545,"line":5595},[5543,12934,12935],{"class":5556},"model_softmax.fit(X_train, y_train)\n",[5543,12937,12938],{"class":5545,"line":5602},[5543,12939,5599],{"emptyLinePlaceholder":5598},[5543,12941,12942],{"class":5545,"line":5608},[5543,12943,12944],{"class":5556},"accuracy_softmax = model_softmax.score(X_test, y_test)\n",[5543,12946,12947,12949,12951,12953,12956,12958,12961,12963,12965],{"class":5545,"line":5614},[5543,12948,5796],{"class":5795},[5543,12950,5799],{"class":5556},[5543,12952,5803],{"class":5802},[5543,12954,12955],{"class":5636},"\"Точність (softmax): ",[5543,12957,5809],{"class":5802},[5543,12959,12960],{"class":5556},"accuracy_softmax",[5543,12962,7972],{"class":5802},[5543,12964,5821],{"class":5636},[5543,12966,5824],{"class":5556},[5543,12968,12969],{"class":5545,"line":5689},[5543,12970,5599],{"emptyLinePlaceholder":5598},[5543,12972,12973,12975,12977,12979],{"class":5545,"line":5695},[5543,12974,5678],{"class":5671},[5543,12976,5860],{"class":5556},[5543,12978,5863],{"class":5671},[5543,12980,5866],{"class":5556},[5543,12982,12983,12985,12988,12990],{"class":5545,"line":5827},[5543,12984,5672],{"class":5671},[5543,12986,12987],{"class":5556}," matplotlib.colors ",[5543,12989,5678],{"class":5671},[5543,12991,12992],{"class":5556}," ListedColormap\n",[5543,12994,12995],{"class":5545,"line":5850},[5543,12996,5599],{"emptyLinePlaceholder":5598},[5543,12998,12999],{"class":5545,"line":5855},[5543,13000,13001],{"class":5549},"# Для 2D-візуалізації навчаємо softmax лише на ознаках пелюстки\n",[5543,13003,13004,13007,13009,13011,13013],{"class":5545,"line":5869},[5543,13005,13006],{"class":5556},"model_2d = LogisticRegression(",[5543,13008,12409],{"class":5906},[5543,13010,5969],{"class":5556},[5543,13012,7509],{"class":5560},[5543,13014,5824],{"class":5556},[5543,13016,13017,13020,13022],{"class":5545,"line":5874},[5543,13018,13019],{"class":5556},"model_2d.fit(X_train[:, ",[5543,13021,5948],{"class":5560},[5543,13023,13024],{"class":5556},":], y_train)\n",[5543,13026,13027],{"class":5545,"line":5895},[5543,13028,5599],{"emptyLinePlaceholder":5598},[5543,13030,13031,13033,13035,13037,13040,13042,13044,13046,13049,13051,13053,13055,13057],{"class":5545,"line":5900},[5543,13032,9220],{"class":5556},[5543,13034,7267],{"class":5560},[5543,13036,5563],{"class":5556},[5543,13038,13039],{"class":5560},"7.5",[5543,13041,5563],{"class":5556},[5543,13043,10713],{"class":5560},[5543,13045,10716],{"class":5556},[5543,13047,13048],{"class":5560},"0.2",[5543,13050,5563],{"class":5556},[5543,13052,8043],{"class":5560},[5543,13054,5563],{"class":5556},[5543,13056,10713],{"class":5560},[5543,13058,5921],{"class":5556},[5543,13060,13061],{"class":5545,"line":5924},[5543,13062,13063],{"class":5556},"Z = model_2d.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)\n",[5543,13065,13066,13068,13070,13072,13074,13076,13078],{"class":5545,"line":5942},[5543,13067,5877],{"class":5556},[5543,13069,5880],{"class":5636},[5543,13071,5563],{"class":5556},[5543,13073,5885],{"class":5636},[5543,13075,5563],{"class":5556},[5543,13077,5890],{"class":5636},[5543,13079,5657],{"class":5556},[5543,13081,13082],{"class":5545,"line":5978},[5543,13083,5599],{"emptyLinePlaceholder":5598},[5543,13085,13086,13088,13090,13092,13094,13096,13098],{"class":5545,"line":6007},[5543,13087,5903],{"class":5556},[5543,13089,5907],{"class":5906},[5543,13091,5910],{"class":5556},[5543,13093,5913],{"class":5560},[5543,13095,5563],{"class":5556},[5543,13097,5918],{"class":5560},[5543,13099,5921],{"class":5556},[5543,13101,13102,13104,13106,13108,13110,13112,13114],{"class":5545,"line":6028},[5543,13103,9255],{"class":5556},[5543,13105,6089],{"class":5906},[5543,13107,5969],{"class":5556},[5543,13109,13048],{"class":5560},[5543,13111,5563],{"class":5556},[5543,13113,10773],{"class":5906},[5543,13115,13116],{"class":5556},"=ListedColormap(colors))\n",[5543,13118,13119,13121,13123,13125,13127],{"class":5545,"line":6047},[5543,13120,5927],{"class":5671},[5543,13122,5930],{"class":5556},[5543,13124,5933],{"class":5671},[5543,13126,5936],{"class":5795},[5543,13128,5939],{"class":5556},[5543,13130,13131,13134,13136,13139,13141,13143,13145],{"class":5545,"line":6067},[5543,13132,13133],{"class":5556},"    plt.scatter(X_train[y_train == k, ",[5543,13135,5948],{"class":5560},[5543,13137,13138],{"class":5556},"], X_train[y_train == k, ",[5543,13140,5954],{"class":5560},[5543,13142,5957],{"class":5556},[5543,13144,5960],{"class":5906},[5543,13146,13147],{"class":5556},"=colors[k],\n",[5543,13149,13150,13153,13155,13157,13159,13161,13163,13165,13167,13169],{"class":5545,"line":6083},[5543,13151,13152],{"class":5906},"                s",[5543,13154,5969],{"class":5556},[5543,13156,6788],{"class":5560},[5543,13158,5563],{"class":5556},[5543,13160,5991],{"class":5906},[5543,13162,5969],{"class":5556},[5543,13164,5996],{"class":5636},[5543,13166,5563],{"class":5556},[5543,13168,6001],{"class":5906},[5543,13170,6004],{"class":5556},[5543,13172,13173,13175,13177,13179,13181,13183,13185],{"class":5545,"line":6099},[5543,13174,6010],{"class":5556},[5543,13176,6013],{"class":5636},[5543,13178,5563],{"class":5556},[5543,13180,6018],{"class":5906},[5543,13182,5969],{"class":5556},[5543,13184,6023],{"class":5560},[5543,13186,5824],{"class":5556},[5543,13188,13189,13191,13193,13195,13197,13199,13201],{"class":5545,"line":7782},[5543,13190,6031],{"class":5556},[5543,13192,6034],{"class":5636},[5543,13194,5563],{"class":5556},[5543,13196,6018],{"class":5906},[5543,13198,5969],{"class":5556},[5543,13200,6023],{"class":5560},[5543,13202,5824],{"class":5556},[5543,13204,13205,13207,13210,13212,13214,13216,13218],{"class":5545,"line":7809},[5543,13206,6050],{"class":5556},[5543,13208,13209],{"class":5636},"'Softmax: три лінійні області рішень'",[5543,13211,5563],{"class":5556},[5543,13213,6018],{"class":5906},[5543,13215,5969],{"class":5556},[5543,13217,6062],{"class":5560},[5543,13219,5824],{"class":5556},[5543,13221,13222],{"class":5545,"line":9340},[5543,13223,7738],{"class":5556},[5543,13225,13226],{"class":5545,"line":9358},[5543,13227,6102],{"class":5556},[6104,13229,13230,13237],{"v-slot:output":5538},[5261,13231,13232],{},[5448,13233],{"alt":13234,"className":13235,"src":13236},"Області рішень softmax-моделі для Iris у просторі ознак пелюстки",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F17-softmax-regions.png",[5532,13238,13241],{"className":13239,"code":13240,"language":6118},[6116],"Точність (softmax): 100.0%\n",[5540,13242,13240],{"__ignoreMap":5538},[5422,13244,13245,13250],{},[5261,13246,13247],{},[5224,13248,13249],{},"Яку стратегію обрати?",[5198,13251,13252,13258],{},[5201,13253,13254,13257],{},[5224,13255,13256],{},"One-vs-Rest:"," простіша, швидша для великої кількості класів (>10)",[5201,13259,13260,13263],{},[5224,13261,13262],{},"Multinomial (Softmax):"," часто точніша, природніша для багатокласових задач, краще калібровані ймовірності",[5253,13265],{},[5256,13267,13269],{"id":13268},"резюме-другої-частини","Резюме другої частини",[5190,13271,13272,13276,13287,13291,13295],{},[5193,13273,13275],{"icon":4590,"title":13274},"📌 Розділова межа","Геометричне представлення рішень моделі. Для логістичної регресії — лінійна (пряма, площина, гіперплощина).",[5193,13277,13280,13281,13283,13284,13286],{"icon":13278,"title":13279},"i-lucide-sliders","📌 Вплив параметрів","Ваги ",[6363,13282],{"tex":9459,":inline":6366}," визначають нахил межі та важливість ознак. Bias ",[6363,13285],{"tex":8876,":inline":6366}," зміщує межу паралельно.",[5193,13288,13290],{"icon":8429,"title":13289},"📌 Нелінійні задачі","Лінійна логістична регресія не підходить для XOR-подібних паттернів. Рішення: поліноміальні ознаки або нелінійні моделі.",[5193,13292,13294],{"icon":13293,"title":8437},"i-lucide-gauge","За замовчуванням 0.5, але можна налаштувати під бізнес-вимоги (балансувати точність і повноту).",[5193,13296,13298,13300,13301,13303,13304,13307],{"icon":943,"title":13297},"📌 Багатокласова класифікація",[5224,13299,13256],{}," ",[6363,13302],{"tex":12261,":inline":6366}," бінарних моделей. ",[5224,13305,13306],{},"Softmax:"," одна модель з розподілом ймовірностей.",[5253,13309],{},[5256,13311,13313],{"id":13312},"практичний-приклад-передбачення-ризику-серцевих-захворювань","Практичний приклад: передбачення ризику серцевих захворювань",[5261,13315,13316],{},"Розглянемо реальну медичну задачу: на основі характеристик пацієнта передбачити, чи є у нього підвищений ризик хвороби серця.",[5331,13318,13320],{"id":13319},"опис-датасету","Опис датасету",[5261,13322,13323],{},"Припустимо, у нас є дані про 300 пацієнтів з такими ознаками:",[5336,13325,13326,13339],{},[5339,13327,13328],{},[5342,13329,13330,13333,13336],{},[5345,13331,13332],{},"Ознака",[5345,13334,13335],{},"Опис",[5345,13337,13338],{},"Одиниці",[5355,13340,13341,13354,13367,13380,13393,13406],{},[5342,13342,13343,13348,13351],{},[5360,13344,13345],{},[5540,13346,13347],{},"age",[5360,13349,13350],{},"Вік пацієнта",[5360,13352,13353],{},"роки",[5342,13355,13356,13361,13364],{},[5360,13357,13358],{},[5540,13359,13360],{},"cholesterol",[5360,13362,13363],{},"Рівень холестерину",[5360,13365,13366],{},"мг\u002Fдл",[5342,13368,13369,13374,13377],{},[5360,13370,13371],{},[5540,13372,13373],{},"blood_pressure",[5360,13375,13376],{},"Артеріальний тиск (систолічний)",[5360,13378,13379],{},"мм рт.ст.",[5342,13381,13382,13387,13390],{},[5360,13383,13384],{},[5540,13385,13386],{},"bmi",[5360,13388,13389],{},"Індекс маси тіла",[5360,13391,13392],{},"кг\u002Fм²",[5342,13394,13395,13400,13403],{},[5360,13396,13397],{},[5540,13398,13399],{},"smoking",[5360,13401,13402],{},"Чи палить (1 = так, 0 = ні)",[5360,13404,13405],{},"бінарна",[5342,13407,13408,13415,13418],{},[5360,13409,13410],{},[5224,13411,13412],{},[5540,13413,13414],{},"disease",[5360,13416,13417],{},"Чи є хвороба серця (0 = ні, 1 = так)",[5360,13419,13420],{},[5224,13421,13422],{},"цільова змінна",[5736,13424,13426,13432,13972,13978,14141,14147],{"title":13425,"kernel":6580},"heart_disease_classification.ipynb",[6582,13427,13428],{"type":6584},[5331,13429,13431],{"id":13430},"крок-1-завантаження-та-огляд-даних","Крок 1: Завантаження та огляд даних",[6582,13433,13435,13847],{"execution-count":5481,"execution-time":13434},"0.09s",[5532,13436,13438],{"className":5534,"code":13437,"language":5537,"meta":5538,"style":5538},"import numpy as np\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n\n# Генерація синтетичних даних (імітація реального датасету)\nrng = np.random.default_rng(seed=42)\n\nn_samples = 300\nage = rng.integers(30, 80, size=n_samples)\ncholesterol = rng.integers(150, 300, size=n_samples)\nblood_pressure = rng.integers(90, 180, size=n_samples)\nbmi = rng.uniform(18, 40, size=n_samples)\nsmoking = rng.choice([0, 1], size=n_samples, p=[0.7, 0.3])\n\n# Цільова змінна: ймовірність хвороби зростає з віком, холестерином, тиском\nrisk_score = (\n    0.05 * age +\n    0.01 * cholesterol +\n    0.02 * blood_pressure +\n    0.3 * bmi +\n    5 * smoking - 12\n)\ndisease = (risk_score + rng.normal(0, 5, n_samples) > 0).astype(int)\n\n# Створення DataFrame\ndf = pd.DataFrame({\n    'age': age,\n    'cholesterol': cholesterol,\n    'blood_pressure': blood_pressure,\n    'bmi': bmi,\n    'smoking': smoking,\n    'disease': disease\n})\n\nprint(df.head(10))\nprint(f\"\\nРозподіл класів:\")\nprint(df['disease'].value_counts())\n",[5540,13439,13440,13450,13462,13472,13483,13493,13505,13509,13514,13528,13532,13540,13559,13577,13595,13612,13642,13646,13651,13656,13664,13672,13680,13688,13699,13703,13726,13730,13735,13740,13748,13756,13765,13774,13783,13792,13798,13803,13815,13833],{"__ignoreMap":5538},[5543,13441,13442,13444,13446,13448],{"class":5545,"line":5546},[5543,13443,5678],{"class":5671},[5543,13445,6603],{"class":5556},[5543,13447,5863],{"class":5671},[5543,13449,6608],{"class":5556},[5543,13451,13452,13454,13457,13459],{"class":5545,"line":5553},[5543,13453,5678],{"class":5671},[5543,13455,13456],{"class":5556}," pandas ",[5543,13458,5863],{"class":5671},[5543,13460,13461],{"class":5556}," pd\n",[5543,13463,13464,13466,13468,13470],{"class":5545,"line":5595},[5543,13465,5672],{"class":5671},[5543,13467,12320],{"class":5556},[5543,13469,5678],{"class":5671},[5543,13471,12325],{"class":5556},[5543,13473,13474,13476,13478,13480],{"class":5545,"line":5602},[5543,13475,5672],{"class":5671},[5543,13477,5675],{"class":5556},[5543,13479,5678],{"class":5671},[5543,13481,13482],{"class":5556}," StandardScaler\n",[5543,13484,13485,13487,13489,13491],{"class":5545,"line":5608},[5543,13486,5672],{"class":5671},[5543,13488,5762],{"class":5556},[5543,13490,5678],{"class":5671},[5543,13492,5767],{"class":5556},[5543,13494,13495,13497,13500,13502],{"class":5545,"line":5614},[5543,13496,5672],{"class":5671},[5543,13498,13499],{"class":5556}," sklearn.metrics ",[5543,13501,5678],{"class":5671},[5543,13503,13504],{"class":5556}," accuracy_score, confusion_matrix, classification_report\n",[5543,13506,13507],{"class":5545,"line":5689},[5543,13508,5599],{"emptyLinePlaceholder":5598},[5543,13510,13511],{"class":5545,"line":5695},[5543,13512,13513],{"class":5549},"# Генерація синтетичних даних (імітація реального датасету)\n",[5543,13515,13516,13519,13522,13524,13526],{"class":5545,"line":5827},[5543,13517,13518],{"class":5556},"rng = np.random.default_rng(",[5543,13520,13521],{"class":5906},"seed",[5543,13523,5969],{"class":5556},[5543,13525,8711],{"class":5560},[5543,13527,5824],{"class":5556},[5543,13529,13530],{"class":5545,"line":5850},[5543,13531,5599],{"emptyLinePlaceholder":5598},[5543,13533,13534,13537],{"class":5545,"line":5855},[5543,13535,13536],{"class":5556},"n_samples = ",[5543,13538,13539],{"class":5560},"300\n",[5543,13541,13542,13545,13547,13549,13551,13553,13556],{"class":5545,"line":5869},[5543,13543,13544],{"class":5556},"age = rng.integers(",[5543,13546,6676],{"class":5560},[5543,13548,5563],{"class":5556},[5543,13550,8657],{"class":5560},[5543,13552,5563],{"class":5556},[5543,13554,13555],{"class":5906},"size",[5543,13557,13558],{"class":5556},"=n_samples)\n",[5543,13560,13561,13564,13567,13569,13571,13573,13575],{"class":5545,"line":5874},[5543,13562,13563],{"class":5556},"cholesterol = rng.integers(",[5543,13565,13566],{"class":5560},"150",[5543,13568,5563],{"class":5556},[5543,13570,10713],{"class":5560},[5543,13572,5563],{"class":5556},[5543,13574,13555],{"class":5906},[5543,13576,13558],{"class":5556},[5543,13578,13579,13582,13584,13586,13589,13591,13593],{"class":5545,"line":5895},[5543,13580,13581],{"class":5556},"blood_pressure = rng.integers(",[5543,13583,8619],{"class":5560},[5543,13585,5563],{"class":5556},[5543,13587,13588],{"class":5560},"180",[5543,13590,5563],{"class":5556},[5543,13592,13555],{"class":5906},[5543,13594,13558],{"class":5556},[5543,13596,13597,13600,13602,13604,13606,13608,13610],{"class":5545,"line":5900},[5543,13598,13599],{"class":5556},"bmi = rng.uniform(",[5543,13601,6651],{"class":5560},[5543,13603,5563],{"class":5556},[5543,13605,6686],{"class":5560},[5543,13607,5563],{"class":5556},[5543,13609,13555],{"class":5906},[5543,13611,13558],{"class":5556},[5543,13613,13614,13617,13619,13621,13623,13625,13627,13630,13632,13634,13636,13638,13640],{"class":5545,"line":5924},[5543,13615,13616],{"class":5556},"smoking = rng.choice([",[5543,13618,5477],{"class":5560},[5543,13620,5563],{"class":5556},[5543,13622,5481],{"class":5560},[5543,13624,5957],{"class":5556},[5543,13626,13555],{"class":5906},[5543,13628,13629],{"class":5556},"=n_samples, ",[5543,13631,5261],{"class":5906},[5543,13633,9291],{"class":5556},[5543,13635,7613],{"class":5560},[5543,13637,5563],{"class":5556},[5543,13639,6094],{"class":5560},[5543,13641,5592],{"class":5556},[5543,13643,13644],{"class":5545,"line":5942},[5543,13645,5599],{"emptyLinePlaceholder":5598},[5543,13647,13648],{"class":5545,"line":5978},[5543,13649,13650],{"class":5549},"# Цільова змінна: ймовірність хвороби зростає з віком, холестерином, тиском\n",[5543,13652,13653],{"class":5545,"line":6007},[5543,13654,13655],{"class":5556},"risk_score = (\n",[5543,13657,13658,13661],{"class":5545,"line":6028},[5543,13659,13660],{"class":5560},"    0.05",[5543,13662,13663],{"class":5556}," * age +\n",[5543,13665,13666,13669],{"class":5545,"line":6047},[5543,13667,13668],{"class":5560},"    0.01",[5543,13670,13671],{"class":5556}," * cholesterol +\n",[5543,13673,13674,13677],{"class":5545,"line":6067},[5543,13675,13676],{"class":5560},"    0.02",[5543,13678,13679],{"class":5556}," * blood_pressure +\n",[5543,13681,13682,13685],{"class":5545,"line":6083},[5543,13683,13684],{"class":5560},"    0.3",[5543,13686,13687],{"class":5556}," * bmi +\n",[5543,13689,13690,13693,13696],{"class":5545,"line":6099},[5543,13691,13692],{"class":5560},"    5",[5543,13694,13695],{"class":5556}," * smoking - ",[5543,13697,13698],{"class":5560},"12\n",[5543,13700,13701],{"class":5545,"line":7782},[5543,13702,5824],{"class":5556},[5543,13704,13705,13708,13710,13712,13714,13717,13719,13722,13724],{"class":5545,"line":7809},[5543,13706,13707],{"class":5556},"disease = (risk_score + rng.normal(",[5543,13709,5477],{"class":5560},[5543,13711,5563],{"class":5556},[5543,13713,7770],{"class":5560},[5543,13715,13716],{"class":5556},", n_samples) > ",[5543,13718,5477],{"class":5560},[5543,13720,13721],{"class":5556},").astype(",[5543,13723,12164],{"class":12163},[5543,13725,5824],{"class":5556},[5543,13727,13728],{"class":5545,"line":9340},[5543,13729,5599],{"emptyLinePlaceholder":5598},[5543,13731,13732],{"class":5545,"line":9358},[5543,13733,13734],{"class":5549},"# Створення DataFrame\n",[5543,13736,13737],{"class":5545,"line":9372},[5543,13738,13739],{"class":5556},"df = pd.DataFrame({\n",[5543,13741,13742,13745],{"class":5545,"line":9385},[5543,13743,13744],{"class":5636},"    'age'",[5543,13746,13747],{"class":5556},": age,\n",[5543,13749,13750,13753],{"class":5545,"line":11004},[5543,13751,13752],{"class":5636},"    'cholesterol'",[5543,13754,13755],{"class":5556},": cholesterol,\n",[5543,13757,13759,13762],{"class":5545,"line":13758},32,[5543,13760,13761],{"class":5636},"    'blood_pressure'",[5543,13763,13764],{"class":5556},": blood_pressure,\n",[5543,13766,13768,13771],{"class":5545,"line":13767},33,[5543,13769,13770],{"class":5636},"    'bmi'",[5543,13772,13773],{"class":5556},": bmi,\n",[5543,13775,13777,13780],{"class":5545,"line":13776},34,[5543,13778,13779],{"class":5636},"    'smoking'",[5543,13781,13782],{"class":5556},": smoking,\n",[5543,13784,13786,13789],{"class":5545,"line":13785},35,[5543,13787,13788],{"class":5636},"    'disease'",[5543,13790,13791],{"class":5556},": disease\n",[5543,13793,13795],{"class":5545,"line":13794},36,[5543,13796,13797],{"class":5556},"})\n",[5543,13799,13801],{"class":5545,"line":13800},37,[5543,13802,5599],{"emptyLinePlaceholder":5598},[5543,13804,13806,13808,13811,13813],{"class":5545,"line":13805},38,[5543,13807,5796],{"class":5795},[5543,13809,13810],{"class":5556},"(df.head(",[5543,13812,6783],{"class":5560},[5543,13814,5921],{"class":5556},[5543,13816,13818,13820,13822,13824,13826,13828,13831],{"class":5545,"line":13817},39,[5543,13819,5796],{"class":5795},[5543,13821,5799],{"class":5556},[5543,13823,5803],{"class":5802},[5543,13825,5821],{"class":5636},[5543,13827,8897],{"class":8896},[5543,13829,13830],{"class":5636},"Розподіл класів:\"",[5543,13832,5824],{"class":5556},[5543,13834,13836,13838,13841,13844],{"class":5545,"line":13835},40,[5543,13837,5796],{"class":5795},[5543,13839,13840],{"class":5556},"(df[",[5543,13842,13843],{"class":5636},"'disease'",[5543,13845,13846],{"class":5556},"].value_counts())\n",[6104,13848,13849,13969],{"v-slot:output":5538},[5336,13850,13851,13869],{},[5339,13852,13853],{},[5342,13854,13855,13857,13859,13861,13863,13865,13867],{},[5345,13856],{},[5345,13858,13347],{},[5345,13860,13360],{},[5345,13862,13373],{},[5345,13864,13386],{},[5345,13866,13399],{},[5345,13868,13414],{},[5355,13870,13871,13890,13909,13929,13949],{},[5342,13872,13873,13875,13877,13880,13883,13886,13888],{},[5360,13874,5477],{},[5360,13876,5972],{},[5360,13878,13879],{},"233",[5360,13881,13882],{},"148",[5360,13884,13885],{},"28.95",[5360,13887,5477],{},[5360,13889,5481],{},[5342,13891,13892,13894,13896,13899,13902,13905,13907],{},[5360,13893,5481],{},[5360,13895,6691],{},[5360,13897,13898],{},"198",[5360,13900,13901],{},"122",[5360,13903,13904],{},"24.12",[5360,13906,5481],{},[5360,13908,5481],{},[5342,13910,13911,13913,13916,13919,13922,13925,13927],{},[5360,13912,5948],{},[5360,13914,13915],{},"72",[5360,13917,13918],{},"265",[5360,13920,13921],{},"165",[5360,13923,13924],{},"31.78",[5360,13926,5477],{},[5360,13928,5481],{},[5342,13930,13931,13933,13936,13939,13942,13945,13947],{},[5360,13932,5954],{},[5360,13934,13935],{},"38",[5360,13937,13938],{},"187",[5360,13940,13941],{},"105",[5360,13943,13944],{},"22.45",[5360,13946,5477],{},[5360,13948,5477],{},[5342,13950,13951,13954,13956,13959,13962,13965,13967],{},[5360,13952,13953],{},"4",[5360,13955,8605],{},[5360,13957,13958],{},"221",[5360,13960,13961],{},"138",[5360,13963,13964],{},"27.33",[5360,13966,5481],{},[5360,13968,5481],{},[5261,13970,13971],{},"Розподіл класів:\ndisease\n0    151\n1    149",[6582,13973,13974],{"type":6584},[5331,13975,13977],{"id":13976},"крок-2-підготовка-даних","Крок 2: Підготовка даних",[6582,13979,13981,14133],{"execution-count":5948,"execution-time":13980},"0.06s",[5532,13982,13984],{"className":5534,"code":13983,"language":5537,"meta":5538,"style":5538},"# Розділення на ознаки (X) та цільову змінну (y)\nX = df.drop('disease', axis=1)\ny = df['disease']\n\n# Розбиття на навчальну та тестову вибірки (70% \u002F 30%)\nX_train, X_test, y_train, y_test = train_test_split(\n    X, y, test_size=0.3, random_state=42, stratify=y\n)\n\nprint(f\"Розмір навчальної вибірки: {X_train.shape}\")\nprint(f\"Розмір тестової вибірки: {X_test.shape}\")\nprint(f\"\\nРозподіл у навчальній вибірці:\")\nprint(y_train.value_counts())\n",[5540,13985,13986,13991,14009,14018,14022,14027,14031,14057,14061,14065,14087,14109,14126],{"__ignoreMap":5538},[5543,13987,13988],{"class":5545,"line":5546},[5543,13989,13990],{"class":5549},"# Розділення на ознаки (X) та цільову змінну (y)\n",[5543,13992,13993,13996,13998,14000,14003,14005,14007],{"class":5545,"line":5553},[5543,13994,13995],{"class":5556},"X = df.drop(",[5543,13997,13843],{"class":5636},[5543,13999,5563],{"class":5556},[5543,14001,14002],{"class":5906},"axis",[5543,14004,5969],{"class":5556},[5543,14006,5481],{"class":5560},[5543,14008,5824],{"class":5556},[5543,14010,14011,14014,14016],{"class":5545,"line":5595},[5543,14012,14013],{"class":5556},"y = df[",[5543,14015,13843],{"class":5636},[5543,14017,5657],{"class":5556},[5543,14019,14020],{"class":5545,"line":5602},[5543,14021,5599],{"emptyLinePlaceholder":5598},[5543,14023,14024],{"class":5545,"line":5608},[5543,14025,14026],{"class":5549},"# Розбиття на навчальну та тестову вибірки (70% \u002F 30%)\n",[5543,14028,14029],{"class":5545,"line":5614},[5543,14030,12356],{"class":5556},[5543,14032,14033,14035,14037,14039,14041,14043,14045,14047,14049,14051,14054],{"class":5545,"line":5689},[5543,14034,12361],{"class":5556},[5543,14036,12364],{"class":5906},[5543,14038,5969],{"class":5556},[5543,14040,6094],{"class":5560},[5543,14042,5563],{"class":5556},[5543,14044,12373],{"class":5906},[5543,14046,5969],{"class":5556},[5543,14048,8711],{"class":5560},[5543,14050,5563],{"class":5556},[5543,14052,14053],{"class":5906},"stratify",[5543,14055,14056],{"class":5556},"=y\n",[5543,14058,14059],{"class":5545,"line":5695},[5543,14060,5824],{"class":5556},[5543,14062,14063],{"class":5545,"line":5827},[5543,14064,5599],{"emptyLinePlaceholder":5598},[5543,14066,14067,14069,14071,14073,14076,14078,14081,14083,14085],{"class":5545,"line":5850},[5543,14068,5796],{"class":5795},[5543,14070,5799],{"class":5556},[5543,14072,5803],{"class":5802},[5543,14074,14075],{"class":5636},"\"Розмір навчальної вибірки: ",[5543,14077,5809],{"class":5802},[5543,14079,14080],{"class":5556},"X_train.shape",[5543,14082,5818],{"class":5802},[5543,14084,5821],{"class":5636},[5543,14086,5824],{"class":5556},[5543,14088,14089,14091,14093,14095,14098,14100,14103,14105,14107],{"class":5545,"line":5855},[5543,14090,5796],{"class":5795},[5543,14092,5799],{"class":5556},[5543,14094,5803],{"class":5802},[5543,14096,14097],{"class":5636},"\"Розмір тестової вибірки: ",[5543,14099,5809],{"class":5802},[5543,14101,14102],{"class":5556},"X_test.shape",[5543,14104,5818],{"class":5802},[5543,14106,5821],{"class":5636},[5543,14108,5824],{"class":5556},[5543,14110,14111,14113,14115,14117,14119,14121,14124],{"class":5545,"line":5869},[5543,14112,5796],{"class":5795},[5543,14114,5799],{"class":5556},[5543,14116,5803],{"class":5802},[5543,14118,5821],{"class":5636},[5543,14120,8897],{"class":8896},[5543,14122,14123],{"class":5636},"Розподіл у навчальній вибірці:\"",[5543,14125,5824],{"class":5556},[5543,14127,14128,14130],{"class":5545,"line":5874},[5543,14129,5796],{"class":5795},[5543,14131,14132],{"class":5556},"(y_train.value_counts())\n",[6104,14134,14135],{"v-slot:output":5538},[5532,14136,14139],{"className":14137,"code":14138,"language":6118},[6116],"Розмір навчальної вибірки: (210, 5)\nРозмір тестової вибірки: (90, 5)\n\nРозподіл у навчальній вибірці:\ndisease\n0    106\n1    104\n",[5540,14140,14138],{"__ignoreMap":5538},[6582,14142,14143],{"type":6584},[5331,14144,14146],{"id":14145},"крок-3-масштабування-ознак","Крок 3: Масштабування ознак",[6582,14148,14150,14225],{"execution-count":5954,"execution-time":14149},"0.04s",[5532,14151,14153],{"className":5534,"code":14152,"language":5537,"meta":5538,"style":5538},"# Стандартизація ознак (важливо для логістичної регресії!)\nscaler = StandardScaler()\nX_train_scaled = scaler.fit_transform(X_train)\nX_test_scaled = scaler.transform(X_test)\n\nprint(\"Середні значення до масштабування:\")\nprint(X_train.mean())\nprint(\"\\nСередні значення після масштабування:\")\nprint(pd.DataFrame(X_train_scaled, columns=X_train.columns).mean())\n",[5540,14154,14155,14160,14165,14170,14175,14179,14190,14197,14212],{"__ignoreMap":5538},[5543,14156,14157],{"class":5545,"line":5546},[5543,14158,14159],{"class":5549},"# Стандартизація ознак (важливо для логістичної регресії!)\n",[5543,14161,14162],{"class":5545,"line":5553},[5543,14163,14164],{"class":5556},"scaler = StandardScaler()\n",[5543,14166,14167],{"class":5545,"line":5595},[5543,14168,14169],{"class":5556},"X_train_scaled = scaler.fit_transform(X_train)\n",[5543,14171,14172],{"class":5545,"line":5602},[5543,14173,14174],{"class":5556},"X_test_scaled = scaler.transform(X_test)\n",[5543,14176,14177],{"class":5545,"line":5608},[5543,14178,5599],{"emptyLinePlaceholder":5598},[5543,14180,14181,14183,14185,14188],{"class":5545,"line":5614},[5543,14182,5796],{"class":5795},[5543,14184,5799],{"class":5556},[5543,14186,14187],{"class":5636},"\"Середні значення до масштабування:\"",[5543,14189,5824],{"class":5556},[5543,14191,14192,14194],{"class":5545,"line":5689},[5543,14193,5796],{"class":5795},[5543,14195,14196],{"class":5556},"(X_train.mean())\n",[5543,14198,14199,14201,14203,14205,14207,14210],{"class":5545,"line":5695},[5543,14200,5796],{"class":5795},[5543,14202,5799],{"class":5556},[5543,14204,5821],{"class":5636},[5543,14206,8897],{"class":8896},[5543,14208,14209],{"class":5636},"Середні значення після масштабування:\"",[5543,14211,5824],{"class":5556},[5543,14213,14214,14216,14219,14222],{"class":5545,"line":5827},[5543,14215,5796],{"class":5795},[5543,14217,14218],{"class":5556},"(pd.DataFrame(X_train_scaled, ",[5543,14220,14221],{"class":5906},"columns",[5543,14223,14224],{"class":5556},"=X_train.columns).mean())\n",[6104,14226,14227],{"v-slot:output":5538},[5532,14228,14231],{"className":14229,"code":14230,"language":6118},[6116],"Середні значення до масштабування:\nage                54.419048\ncholesterol       224.152381\nblood_pressure    134.442857\nbmi                29.156190\nsmoking             0.304762\n\nСередні значення після масштабування:\nage               -0.000000\ncholesterol        0.000000\nblood_pressure    -0.000000\nbmi                0.000000\nsmoking           -0.000000\n",[5540,14232,14230],{"__ignoreMap":5538},[5301,14234,14235,14238],{},[5224,14236,14237],{},"Чому потрібне масштабування?"," Логістична регресія використовує градієнтний спуск, який чутливий до масштабу ознак. Якщо одна ознака має значення від 0 до 1, а інша — від 0 до 1000, алгоритм навчання буде нестабільним. Стандартизація приводить усі ознаки до однакового масштабу (середнє = 0, стандартне відхилення = 1).",[5331,14240,14242],{"id":14241},"навчання-моделі","Навчання моделі",[5736,14244,14246,14252,14356,14362],{"title":14245,"kernel":6580},"heart_disease_training.ipynb",[6582,14247,14248],{"type":6584},[5331,14249,14251],{"id":14250},"крок-4-навчання-логістичної-регресії","Крок 4: Навчання логістичної регресії",[6582,14253,14254,14348],{"execution-count":13953,"execution-time":11675},[5532,14255,14257],{"className":5534,"code":14256,"language":5537,"meta":5538,"style":5538},"# Створення та навчання моделі\nmodel = LogisticRegression(random_state=42, max_iter=1000)\nmodel.fit(X_train_scaled, y_train)\n\n# Прогнози на тестовій вибірці\ny_pred = model.predict(X_test_scaled)\ny_probs = model.predict_proba(X_test_scaled)[:, 1]\n\n# Оцінка точності\naccuracy = accuracy_score(y_test, y_pred)\nprint(f\"Точність на тестовій вибірці: {accuracy:.1%}\")\n",[5540,14258,14259,14264,14286,14291,14295,14300,14305,14314,14318,14323,14328],{"__ignoreMap":5538},[5543,14260,14261],{"class":5545,"line":5546},[5543,14262,14263],{"class":5549},"# Створення та навчання моделі\n",[5543,14265,14266,14269,14271,14273,14275,14277,14279,14281,14284],{"class":5545,"line":5553},[5543,14267,14268],{"class":5556},"model = LogisticRegression(",[5543,14270,12373],{"class":5906},[5543,14272,5969],{"class":5556},[5543,14274,8711],{"class":5560},[5543,14276,5563],{"class":5556},[5543,14278,12409],{"class":5906},[5543,14280,5969],{"class":5556},[5543,14282,14283],{"class":5560},"1000",[5543,14285,5824],{"class":5556},[5543,14287,14288],{"class":5545,"line":5595},[5543,14289,14290],{"class":5556},"model.fit(X_train_scaled, y_train)\n",[5543,14292,14293],{"class":5545,"line":5602},[5543,14294,5599],{"emptyLinePlaceholder":5598},[5543,14296,14297],{"class":5545,"line":5608},[5543,14298,14299],{"class":5549},"# Прогнози на тестовій вибірці\n",[5543,14301,14302],{"class":5545,"line":5614},[5543,14303,14304],{"class":5556},"y_pred = model.predict(X_test_scaled)\n",[5543,14306,14307,14310,14312],{"class":5545,"line":5689},[5543,14308,14309],{"class":5556},"y_probs = model.predict_proba(X_test_scaled)[:, ",[5543,14311,5481],{"class":5560},[5543,14313,5657],{"class":5556},[5543,14315,14316],{"class":5545,"line":5695},[5543,14317,5599],{"emptyLinePlaceholder":5598},[5543,14319,14320],{"class":5545,"line":5827},[5543,14321,14322],{"class":5549},"# Оцінка точності\n",[5543,14324,14325],{"class":5545,"line":5850},[5543,14326,14327],{"class":5556},"accuracy = accuracy_score(y_test, y_pred)\n",[5543,14329,14330,14332,14334,14336,14338,14340,14342,14344,14346],{"class":5545,"line":5855},[5543,14331,5796],{"class":5795},[5543,14333,5799],{"class":5556},[5543,14335,5803],{"class":5802},[5543,14337,12440],{"class":5636},[5543,14339,5809],{"class":5802},[5543,14341,10661],{"class":5556},[5543,14343,7972],{"class":5802},[5543,14345,5821],{"class":5636},[5543,14347,5824],{"class":5556},[6104,14349,14350],{"v-slot:output":5538},[5532,14351,14354],{"className":14352,"code":14353,"language":6118},[6116],"Точність на тестовій вибірці: 85.6%\n",[5540,14355,14353],{"__ignoreMap":5538},[6582,14357,14358],{"type":6584},[5331,14359,14361],{"id":14360},"крок-5-аналіз-коефіцієнтів-моделі","Крок 5: Аналіз коефіцієнтів моделі",[6582,14363,14364,14623],{"execution-count":7770,"execution-time":12112},[5532,14365,14367],{"className":5534,"code":14366,"language":5537,"meta":5538,"style":5538},"# Отримання коефіцієнтів (ваг)\ncoef_df = pd.DataFrame({\n    'Ознака': X.columns,\n    'Коефіцієнт': model.coef_[0],\n    'Абсолютне значення': np.abs(model.coef_[0])\n}).sort_values('Абсолютне значення', ascending=False)\n\nprint(\"Важливість ознак (за абсолютним коефіцієнтом):\")\nprint(coef_df)\nprint(f\"\\nВільний член (bias): {model.intercept_[0]:.4f}\")\n\nimport matplotlib.pyplot as plt\n\nplt.figure(figsize=(9, 5))\nplt.barh(coef_df['Ознака'][::-1], coef_df['Коефіцієнт'][::-1], color='#3b82f6')\nplt.axvline(0, color='#1f2937', linewidth=1)\nplt.xlabel('Коефіцієнт (ознаки стандартизовані)')\nplt.title('Вплив ознак на ризик хвороби серця', fontsize=13)\nplt.grid(axis='x', alpha=0.3)\nplt.show()\n",[5540,14368,14369,14374,14379,14387,14399,14411,14430,14434,14445,14452,14482,14486,14496,14500,14516,14549,14573,14582,14599,14619],{"__ignoreMap":5538},[5543,14370,14371],{"class":5545,"line":5546},[5543,14372,14373],{"class":5549},"# Отримання коефіцієнтів (ваг)\n",[5543,14375,14376],{"class":5545,"line":5553},[5543,14377,14378],{"class":5556},"coef_df = pd.DataFrame({\n",[5543,14380,14381,14384],{"class":5545,"line":5595},[5543,14382,14383],{"class":5636},"    'Ознака'",[5543,14385,14386],{"class":5556},": X.columns,\n",[5543,14388,14389,14392,14395,14397],{"class":5545,"line":5602},[5543,14390,14391],{"class":5636},"    'Коефіцієнт'",[5543,14393,14394],{"class":5556},": model.coef_[",[5543,14396,5477],{"class":5560},[5543,14398,8641],{"class":5556},[5543,14400,14401,14404,14407,14409],{"class":5545,"line":5608},[5543,14402,14403],{"class":5636},"    'Абсолютне значення'",[5543,14405,14406],{"class":5556},": np.abs(model.coef_[",[5543,14408,5477],{"class":5560},[5543,14410,5592],{"class":5556},[5543,14412,14413,14416,14419,14421,14424,14426,14428],{"class":5545,"line":5614},[5543,14414,14415],{"class":5556},"}).sort_values(",[5543,14417,14418],{"class":5636},"'Абсолютне значення'",[5543,14420,5563],{"class":5556},[5543,14422,14423],{"class":5906},"ascending",[5543,14425,5969],{"class":5556},[5543,14427,5504],{"class":5802},[5543,14429,5824],{"class":5556},[5543,14431,14432],{"class":5545,"line":5689},[5543,14433,5599],{"emptyLinePlaceholder":5598},[5543,14435,14436,14438,14440,14443],{"class":5545,"line":5695},[5543,14437,5796],{"class":5795},[5543,14439,5799],{"class":5556},[5543,14441,14442],{"class":5636},"\"Важливість ознак (за абсолютним коефіцієнтом):\"",[5543,14444,5824],{"class":5556},[5543,14446,14447,14449],{"class":5545,"line":5827},[5543,14448,5796],{"class":5795},[5543,14450,14451],{"class":5556},"(coef_df)\n",[5543,14453,14454,14456,14458,14460,14462,14464,14467,14469,14472,14474,14476,14478,14480],{"class":5545,"line":5850},[5543,14455,5796],{"class":5795},[5543,14457,5799],{"class":5556},[5543,14459,5803],{"class":5802},[5543,14461,5821],{"class":5636},[5543,14463,8897],{"class":8896},[5543,14465,14466],{"class":5636},"Вільний член (bias): ",[5543,14468,5809],{"class":5802},[5543,14470,14471],{"class":5556},"model.intercept_[",[5543,14473,5477],{"class":5560},[5543,14475,6838],{"class":5556},[5543,14477,7775],{"class":5802},[5543,14479,5821],{"class":5636},[5543,14481,5824],{"class":5556},[5543,14483,14484],{"class":5545,"line":5855},[5543,14485,5599],{"emptyLinePlaceholder":5598},[5543,14487,14488,14490,14492,14494],{"class":5545,"line":5869},[5543,14489,5678],{"class":5671},[5543,14491,5860],{"class":5556},[5543,14493,5863],{"class":5671},[5543,14495,5866],{"class":5556},[5543,14497,14498],{"class":5545,"line":5874},[5543,14499,5599],{"emptyLinePlaceholder":5598},[5543,14501,14502,14504,14506,14508,14510,14512,14514],{"class":5545,"line":5895},[5543,14503,5903],{"class":5556},[5543,14505,5907],{"class":5906},[5543,14507,5910],{"class":5556},[5543,14509,5913],{"class":5560},[5543,14511,5563],{"class":5556},[5543,14513,7770],{"class":5560},[5543,14515,5921],{"class":5556},[5543,14517,14518,14521,14524,14527,14529,14532,14535,14537,14539,14541,14543,14545,14547],{"class":5545,"line":5900},[5543,14519,14520],{"class":5556},"plt.barh(coef_df[",[5543,14522,14523],{"class":5636},"'Ознака'",[5543,14525,14526],{"class":5556},"][::-",[5543,14528,5481],{"class":5560},[5543,14530,14531],{"class":5556},"], coef_df[",[5543,14533,14534],{"class":5636},"'Коефіцієнт'",[5543,14536,14526],{"class":5556},[5543,14538,5481],{"class":5560},[5543,14540,5957],{"class":5556},[5543,14542,7559],{"class":5906},[5543,14544,5969],{"class":5556},[5543,14546,5885],{"class":5636},[5543,14548,5824],{"class":5556},[5543,14550,14551,14553,14555,14557,14559,14561,14563,14565,14567,14569,14571],{"class":5545,"line":5924},[5543,14552,7629],{"class":5556},[5543,14554,5477],{"class":5560},[5543,14556,5563],{"class":5556},[5543,14558,7559],{"class":5906},[5543,14560,5969],{"class":5556},[5543,14562,8136],{"class":5636},[5543,14564,5563],{"class":5556},[5543,14566,7549],{"class":5906},[5543,14568,5969],{"class":5556},[5543,14570,5481],{"class":5560},[5543,14572,5824],{"class":5556},[5543,14574,14575,14577,14580],{"class":5545,"line":5942},[5543,14576,6010],{"class":5556},[5543,14578,14579],{"class":5636},"'Коефіцієнт (ознаки стандартизовані)'",[5543,14581,5824],{"class":5556},[5543,14583,14584,14586,14589,14591,14593,14595,14597],{"class":5545,"line":5978},[5543,14585,6050],{"class":5556},[5543,14587,14588],{"class":5636},"'Вплив ознак на ризик хвороби серця'",[5543,14590,5563],{"class":5556},[5543,14592,6018],{"class":5906},[5543,14594,5969],{"class":5556},[5543,14596,8268],{"class":5560},[5543,14598,5824],{"class":5556},[5543,14600,14601,14603,14605,14607,14609,14611,14613,14615,14617],{"class":5545,"line":6007},[5543,14602,6086],{"class":5556},[5543,14604,14002],{"class":5906},[5543,14606,5969],{"class":5556},[5543,14608,9026],{"class":5636},[5543,14610,5563],{"class":5556},[5543,14612,6089],{"class":5906},[5543,14614,5969],{"class":5556},[5543,14616,6094],{"class":5560},[5543,14618,5824],{"class":5556},[5543,14620,14621],{"class":5545,"line":6028},[5543,14622,6102],{"class":5556},[6104,14624,14625,14632],{"v-slot:output":5538},[5261,14626,14627],{},[5448,14628],{"alt":14629,"className":14630,"src":14631},"Коефіцієнти логістичної регресії для ознак пацієнта",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F18-heart-coefficients.png",[5532,14633,14636],{"className":14634,"code":14635,"language":6118},[6116],"Важливість ознак (за абсолютним коефіцієнтом):\n          Ознака  Коефіцієнт  Абсолютне значення\n2  blood_pressure      0.8234              0.8234\n1     cholesterol      0.7856              0.7856\n3             bmi      0.6421              0.6421\n0             age      0.5123              0.5123\n4         smoking      0.4567              0.4567\n\nВільний член (bias): 0.0234\n",[5540,14637,14635],{"__ignoreMap":5538},[5422,14639,14640,14645],{},[5261,14641,14642],{},[5224,14643,14644],{},"Інтерпретація коефіцієнтів:",[5198,14646,14647,14657,14666],{},[5201,14648,14649,14652,14653,14656],{},[5224,14650,14651],{},"Позитивний коефіцієнт"," (+0.82 для тиску) → зростання ознаки ",[5224,14654,14655],{},"збільшує"," ймовірність хвороби",[5201,14658,14659,14662,14663,14656],{},[5224,14660,14661],{},"Від'ємний коефіцієнт"," → зростання ознаки ",[5224,14664,14665],{},"зменшує",[5201,14667,14668,14671],{},[5224,14669,14670],{},"Чим більше абсолютне значення"," → тим сильніший вплив ознаки на результат",[5331,14673,14675],{"id":14674},"інтерпретація-прогнозів","Інтерпретація прогнозів",[5736,14677,14679,14883],{"title":14678,"execution-count":5481},"prediction_interpretation.ipynb",[5532,14680,14682],{"className":5534,"code":14681,"language":5537,"meta":5538,"style":5538},"# Приклад: аналіз одного пацієнта\nsample_index = 5\nsample_patient = X_test.iloc[sample_index:sample_index+1]\nsample_patient_scaled = X_test_scaled[sample_index:sample_index+1]\n\n# Характеристики пацієнта\nprint(\"Характеристики пацієнта:\")\nprint(sample_patient.to_string(index=False))\n\n# Прогноз моделі\nprob = model.predict_proba(sample_patient_scaled)[0, 1]\npred_class = model.predict(sample_patient_scaled)[0]\ntrue_class = y_test.iloc[sample_index]\n\nprint(f\"\\nЙмовірність хвороби серця: {prob:.1%}\")\nprint(f\"Прогноз моделі: {'Підвищений ризик ⚠️' if pred_class == 1 else 'Низький ризик ✅'}\")\nprint(f\"Справжній діагноз: {'Хворий' if true_class == 1 else 'Здоровий'}\")\n",[5540,14683,14684,14689,14697,14706,14715,14719,14724,14735,14751,14755,14759,14772,14781,14786,14790,14815,14849],{"__ignoreMap":5538},[5543,14685,14686],{"class":5545,"line":5546},[5543,14687,14688],{"class":5549},"# Приклад: аналіз одного пацієнта\n",[5543,14690,14691,14694],{"class":5545,"line":5553},[5543,14692,14693],{"class":5556},"sample_index = ",[5543,14695,14696],{"class":5560},"5\n",[5543,14698,14699,14702,14704],{"class":5545,"line":5595},[5543,14700,14701],{"class":5556},"sample_patient = X_test.iloc[sample_index:sample_index+",[5543,14703,5481],{"class":5560},[5543,14705,5657],{"class":5556},[5543,14707,14708,14711,14713],{"class":5545,"line":5602},[5543,14709,14710],{"class":5556},"sample_patient_scaled = X_test_scaled[sample_index:sample_index+",[5543,14712,5481],{"class":5560},[5543,14714,5657],{"class":5556},[5543,14716,14717],{"class":5545,"line":5608},[5543,14718,5599],{"emptyLinePlaceholder":5598},[5543,14720,14721],{"class":5545,"line":5614},[5543,14722,14723],{"class":5549},"# Характеристики пацієнта\n",[5543,14725,14726,14728,14730,14733],{"class":5545,"line":5689},[5543,14727,5796],{"class":5795},[5543,14729,5799],{"class":5556},[5543,14731,14732],{"class":5636},"\"Характеристики пацієнта:\"",[5543,14734,5824],{"class":5556},[5543,14736,14737,14739,14742,14745,14747,14749],{"class":5545,"line":5695},[5543,14738,5796],{"class":5795},[5543,14740,14741],{"class":5556},"(sample_patient.to_string(",[5543,14743,14744],{"class":5906},"index",[5543,14746,5969],{"class":5556},[5543,14748,5504],{"class":5802},[5543,14750,5921],{"class":5556},[5543,14752,14753],{"class":5545,"line":5827},[5543,14754,5599],{"emptyLinePlaceholder":5598},[5543,14756,14757],{"class":5545,"line":5850},[5543,14758,5605],{"class":5549},[5543,14760,14761,14764,14766,14768,14770],{"class":5545,"line":5855},[5543,14762,14763],{"class":5556},"prob = model.predict_proba(sample_patient_scaled)[",[5543,14765,5477],{"class":5560},[5543,14767,5563],{"class":5556},[5543,14769,5481],{"class":5560},[5543,14771,5657],{"class":5556},[5543,14773,14774,14777,14779],{"class":5545,"line":5869},[5543,14775,14776],{"class":5556},"pred_class = model.predict(sample_patient_scaled)[",[5543,14778,5477],{"class":5560},[5543,14780,5657],{"class":5556},[5543,14782,14783],{"class":5545,"line":5874},[5543,14784,14785],{"class":5556},"true_class = y_test.iloc[sample_index]\n",[5543,14787,14788],{"class":5545,"line":5895},[5543,14789,5599],{"emptyLinePlaceholder":5598},[5543,14791,14792,14794,14796,14798,14800,14802,14805,14807,14809,14811,14813],{"class":5545,"line":5900},[5543,14793,5796],{"class":5795},[5543,14795,5799],{"class":5556},[5543,14797,5803],{"class":5802},[5543,14799,5821],{"class":5636},[5543,14801,8897],{"class":8896},[5543,14803,14804],{"class":5636},"Ймовірність хвороби серця: ",[5543,14806,5809],{"class":5802},[5543,14808,12614],{"class":5556},[5543,14810,7972],{"class":5802},[5543,14812,5821],{"class":5636},[5543,14814,5824],{"class":5556},[5543,14816,14817,14819,14821,14823,14826,14828,14831,14833,14836,14838,14840,14843,14845,14847],{"class":5545,"line":5924},[5543,14818,5796],{"class":5795},[5543,14820,5799],{"class":5556},[5543,14822,5803],{"class":5802},[5543,14824,14825],{"class":5636},"\"Прогноз моделі: ",[5543,14827,5809],{"class":5802},[5543,14829,14830],{"class":5636},"'Підвищений ризик ⚠️'",[5543,14832,7261],{"class":5671},[5543,14834,14835],{"class":5556}," pred_class == ",[5543,14837,5481],{"class":5560},[5543,14839,7270],{"class":5671},[5543,14841,14842],{"class":5636}," 'Низький ризик ✅'",[5543,14844,5818],{"class":5802},[5543,14846,5821],{"class":5636},[5543,14848,5824],{"class":5556},[5543,14850,14851,14853,14855,14857,14860,14862,14865,14867,14870,14872,14874,14877,14879,14881],{"class":5545,"line":5942},[5543,14852,5796],{"class":5795},[5543,14854,5799],{"class":5556},[5543,14856,5803],{"class":5802},[5543,14858,14859],{"class":5636},"\"Справжній діагноз: ",[5543,14861,5809],{"class":5802},[5543,14863,14864],{"class":5636},"'Хворий'",[5543,14866,7261],{"class":5671},[5543,14868,14869],{"class":5556}," true_class == ",[5543,14871,5481],{"class":5560},[5543,14873,7270],{"class":5671},[5543,14875,14876],{"class":5636}," 'Здоровий'",[5543,14878,5818],{"class":5802},[5543,14880,5821],{"class":5636},[5543,14882,5824],{"class":5556},[6104,14884,14885],{"v-slot:output":5538},[5532,14886,14889],{"className":14887,"code":14888,"language":6118},[6116],"Характеристики пацієнта:\nage  cholesterol  blood_pressure   bmi  smoking\n 62          245             158  32.1        1\n\nЙмовірність хвороби серця: 82.3%\nПрогноз моделі: Підвищений ризик ⚠️\nСправжній діагноз: Хворий\n",[5540,14890,14888],{"__ignoreMap":5538},[5301,14892,14893,14896],{},[5224,14894,14895],{},"Аналогія (Консультація лікаря):"," модель — це як досвідчений лікар, який побачив тисячі пацієнтів. Він не каже \"у вас точно є хвороба\", а каже \"у 82% схожих пацієнтів діагностували хворобу, тому рекомендую додаткові обстеження\".",[5253,14898],{},[5256,14900,14902],{"id":14901},"порівняння-з-іншими-алгоритмами-класифікації","Порівняння з іншими алгоритмами класифікації",[5261,14904,14905],{},"Логістична регресія — не єдиний алгоритм для класифікації. Розглянемо, коли вона краща, а коли варто використати інші методи.",[5331,14907,14909],{"id":14908},"порівняльна-таблиця","Порівняльна таблиця",[5336,14911,14912,14927],{},[5339,14913,14914],{},[5342,14915,14916,14919,14921,14924],{},[5345,14917,14918],{},"Алгоритм",[5345,14920,8326],{},[5345,14922,14923],{},"Недоліки",[5345,14925,14926],{},"Коли використовувати",[5355,14928,14929,14945,14961,14977,14993,15009,15025],{},[5342,14930,14931,14936,14939,14942],{},[5360,14932,14933],{},[5224,14934,14935],{},"Логістична регресія",[5360,14937,14938],{},"Швидка, інтерпретована, ймовірнісна",[5360,14940,14941],{},"Тільки лінійна межа",[5360,14943,14944],{},"Лінійно роздільні дані, потрібна інтерпретація",[5342,14946,14947,14952,14955,14958],{},[5360,14948,14949],{},[5224,14950,14951],{},"Дерева рішень",[5360,14953,14954],{},"Нелінійні, інтерпретовані",[5360,14956,14957],{},"Схильні до перенавчання",[5360,14959,14960],{},"Категоріальні ознаки, нелінійні залежності",[5342,14962,14963,14968,14971,14974],{},[5360,14964,14965],{},[5224,14966,14967],{},"Random Forest",[5360,14969,14970],{},"Висока точність, стійкі",[5360,14972,14973],{},"Важко інтерпретувати",[5360,14975,14976],{},"Складні задачі, великі датасети",[5342,14978,14979,14984,14987,14990],{},[5360,14980,14981],{},[5224,14982,14983],{},"SVM",[5360,14985,14986],{},"Ефективні з ядрами (RBF)",[5360,14988,14989],{},"Повільні на великих даних",[5360,14991,14992],{},"Малі\u002Fсередні датасети з нелінійними межами",[5342,14994,14995,15000,15003,15006],{},[5360,14996,14997],{},[5224,14998,14999],{},"Naive Bayes",[5360,15001,15002],{},"Дуже швидкий",[5360,15004,15005],{},"Припущення незалежності",[5360,15007,15008],{},"Текстова класифікація, великі датасети",[5342,15010,15011,15016,15019,15022],{},[5360,15012,15013],{},[5224,15014,15015],{},"k-NN",[5360,15017,15018],{},"Простий, без навчання",[5360,15020,15021],{},"Дуже повільний прогноз",[5360,15023,15024],{},"Малі датасети, прототипування",[5342,15026,15027,15032,15035,15038],{},[5360,15028,15029],{},[5224,15030,15031],{},"Нейронні мережі",[5360,15033,15034],{},"Надзвичайно потужні",[5360,15036,15037],{},"Багато даних, важко налаштувати",[5360,15039,15040],{},"Зображення, текст, складні паттерни",[5422,15042,15043,15048],{},[5261,15044,15045],{},[5224,15046,15047],{},"Стратегія вибору алгоритму:",[6984,15049,15050,15056,15063,15069],{},[5201,15051,15052,15055],{},[5224,15053,15054],{},"Почніть з логістичної регресії"," — швидка baseline-модель",[5201,15057,15058,15059,5431,15061],{},"Якщо точність \u003C75%, спробуйте ",[5224,15060,14967],{},[5224,15062,3865],{},[5201,15064,15065,15066],{},"Для зображень та текстів — ",[5224,15067,15068],{},"нейронні мережі",[5201,15070,15071,15072,5431,15074],{},"Якщо потрібна інтерпретація — ",[5224,15073,7005],{},[5224,15075,15076],{},"дерева рішень",[5253,15078],{},[5256,15080,15082],{"id":15081},"типові-помилки-при-роботі-з-логістичною-регресією","Типові помилки при роботі з логістичною регресією",[15084,15085,15086,15141,15194,15266,15295],"accordion",{},[15087,15088,15091,15096,15102,15106],"accordion-item",{"icon":15089,"label":15090},"i-lucide-alert-triangle","❌ Не масштабувати ознаки",[5261,15092,15093,15095],{},[5224,15094,6895],{}," ознаки мають різні масштаби (вік від 0 до 100, зарплата від 20 000 до 200 000).",[5261,15097,15098,15101],{},[5224,15099,15100],{},"Наслідок:"," алгоритм градієнтного спуску збігається дуже повільно або взагалі не збігається.",[5261,15103,15104],{},[5224,15105,11637],{},[5532,15107,15109],{"className":5534,"code":15108,"language":5537,"meta":5538,"style":5538},"from sklearn.preprocessing import StandardScaler\n\nscaler = StandardScaler()\nX_train_scaled = scaler.fit_transform(X_train)\nX_test_scaled = scaler.transform(X_test)  # Важливо: не fit!\n",[5540,15110,15111,15121,15125,15129,15133],{"__ignoreMap":5538},[5543,15112,15113,15115,15117,15119],{"class":5545,"line":5546},[5543,15114,5672],{"class":5671},[5543,15116,5675],{"class":5556},[5543,15118,5678],{"class":5671},[5543,15120,13482],{"class":5556},[5543,15122,15123],{"class":5545,"line":5553},[5543,15124,5599],{"emptyLinePlaceholder":5598},[5543,15126,15127],{"class":5545,"line":5595},[5543,15128,14164],{"class":5556},[5543,15130,15131],{"class":5545,"line":5602},[5543,15132,14169],{"class":5556},[5543,15134,15135,15138],{"class":5545,"line":5608},[5543,15136,15137],{"class":5556},"X_test_scaled = scaler.transform(X_test)  ",[5543,15139,15140],{"class":5549},"# Важливо: не fit!\n",[15087,15142,15144,15149,15154,15158],{"icon":15089,"label":15143},"❌ Застосовувати до нелінійних задач без перетворень",[5261,15145,15146,15148],{},[5224,15147,6895],{}," дані мають чітку нелінійну структуру (XOR, концентричні кола).",[5261,15150,15151,15153],{},[5224,15152,15100],{}," точність \u003C55%, модель не може знайти паттерн.",[5261,15155,15156],{},[5224,15157,11637],{},[5532,15159,15161],{"className":5534,"code":15160,"language":5537,"meta":5538,"style":5538},"from sklearn.preprocessing import PolynomialFeatures\n\npoly = PolynomialFeatures(degree=2)\nX_poly = poly.fit_transform(X)\n",[5540,15162,15163,15173,15177,15189],{"__ignoreMap":5538},[5543,15164,15165,15167,15169,15171],{"class":5545,"line":5546},[5543,15166,5672],{"class":5671},[5543,15168,5675],{"class":5556},[5543,15170,5678],{"class":5671},[5543,15172,11051],{"class":5556},[5543,15174,15175],{"class":5545,"line":5553},[5543,15176,5599],{"emptyLinePlaceholder":5598},[5543,15178,15179,15181,15183,15185,15187],{"class":5545,"line":5595},[5543,15180,11065],{"class":5556},[5543,15182,11068],{"class":5906},[5543,15184,5969],{"class":5556},[5543,15186,5948],{"class":5560},[5543,15188,5824],{"class":5556},[5543,15190,15191],{"class":5545,"line":5602},[5543,15192,15193],{"class":5556},"X_poly = poly.fit_transform(X)\n",[15087,15195,15197,15202,15207,15211],{"icon":15089,"label":15196},"❌ Не перевіряти баланс класів",[5261,15198,15199,15201],{},[5224,15200,6895],{}," у датасеті 95% класу 0 та 5% класу 1 (дуже незбалансовані класи).",[5261,15203,15204,15206],{},[5224,15205,15100],{}," модель просто завжди передбачає клас 0 і досягає 95% точності, але це марна метрика!",[5261,15208,15209],{},[5224,15210,11637],{},[5532,15212,15214],{"className":5534,"code":15213,"language":5537,"meta":5538,"style":5538},"# Варіант 1: Використати class_weight='balanced'\nmodel = LogisticRegression(class_weight='balanced')\n\n# Варіант 2: Oversample меншинського класу\nfrom imblearn.over_sampling import SMOTE\nsmote = SMOTE()\nX_resampled, y_resampled = smote.fit_resample(X_train, y_train)\n",[5540,15215,15216,15221,15235,15239,15244,15256,15261],{"__ignoreMap":5538},[5543,15217,15218],{"class":5545,"line":5546},[5543,15219,15220],{"class":5549},"# Варіант 1: Використати class_weight='balanced'\n",[5543,15222,15223,15225,15228,15230,15233],{"class":5545,"line":5553},[5543,15224,14268],{"class":5556},[5543,15226,15227],{"class":5906},"class_weight",[5543,15229,5969],{"class":5556},[5543,15231,15232],{"class":5636},"'balanced'",[5543,15234,5824],{"class":5556},[5543,15236,15237],{"class":5545,"line":5595},[5543,15238,5599],{"emptyLinePlaceholder":5598},[5543,15240,15241],{"class":5545,"line":5602},[5543,15242,15243],{"class":5549},"# Варіант 2: Oversample меншинського класу\n",[5543,15245,15246,15248,15251,15253],{"class":5545,"line":5608},[5543,15247,5672],{"class":5671},[5543,15249,15250],{"class":5556}," imblearn.over_sampling ",[5543,15252,5678],{"class":5671},[5543,15254,15255],{"class":5556}," SMOTE\n",[5543,15257,15258],{"class":5545,"line":5614},[5543,15259,15260],{"class":5556},"smote = SMOTE()\n",[5543,15262,15263],{"class":5545,"line":5689},[5543,15264,15265],{"class":5556},"X_resampled, y_resampled = smote.fit_resample(X_train, y_train)\n",[15087,15267,15269,15274,15279],{"icon":15089,"label":15268},"❌ Використовувати accuracy для незбалансованих класів",[5261,15270,15271,15273],{},[5224,15272,6895],{}," оцінюєте модель тільки за accuracy на незбалансованих даних.",[5261,15275,15276,15278],{},[5224,15277,15100],{}," не бачите, що модель погано виявляє меншинський клас.",[5261,15280,15281,15283,15284,5563,15287,5563,15289,5478,15291,15294],{},[5224,15282,11637],{}," використовуйте ",[5224,15285,15286],{},"F1-score",[5224,15288,12235],{},[5224,15290,12226],{},[5224,15292,15293],{},"confusion matrix"," (детально у наступній статті).",[15087,15296,15298,15303,15308,15312],{"icon":15089,"label":15297},"❌ Забувати про регуляризацію",[5261,15299,15300,15302],{},[5224,15301,6895],{}," модель перенавчається на шумних даних або при великій кількості ознак.",[5261,15304,15305,15307],{},[5224,15306,15100],{}," висока точність на навчальній вибірці, низька на тестовій.",[5261,15309,15310],{},[5224,15311,11637],{},[5532,15313,15315],{"className":5534,"code":15314,"language":5537,"meta":5538,"style":5538},"# L2 регуляризація (Ridge)\nmodel = LogisticRegression(penalty='l2', C=0.1)  # Менший C = сильніша регуляризація\n\n# L1 регуляризація (Lasso, вибір ознак)\nmodel = LogisticRegression(penalty='l1', solver='liblinear', C=1.0)\n",[5540,15316,15317,15322,15347,15351,15356],{"__ignoreMap":5538},[5543,15318,15319],{"class":5545,"line":5546},[5543,15320,15321],{"class":5549},"# L2 регуляризація (Ridge)\n",[5543,15323,15324,15326,15329,15331,15334,15336,15338,15340,15342,15344],{"class":5545,"line":5553},[5543,15325,14268],{"class":5556},[5543,15327,15328],{"class":5906},"penalty",[5543,15330,5969],{"class":5556},[5543,15332,15333],{"class":5636},"'l2'",[5543,15335,5563],{"class":5556},[5543,15337,11166],{"class":5906},[5543,15339,5969],{"class":5556},[5543,15341,9262],{"class":5560},[5543,15343,7168],{"class":5556},[5543,15345,15346],{"class":5549},"# Менший C = сильніша регуляризація\n",[5543,15348,15349],{"class":5545,"line":5595},[5543,15350,5599],{"emptyLinePlaceholder":5598},[5543,15352,15353],{"class":5545,"line":5602},[5543,15354,15355],{"class":5549},"# L1 регуляризація (Lasso, вибір ознак)\n",[5543,15357,15358,15360,15362,15364,15367,15369,15372,15374,15377,15379,15381,15383,15386],{"class":5545,"line":5608},[5543,15359,14268],{"class":5556},[5543,15361,15328],{"class":5906},[5543,15363,5969],{"class":5556},[5543,15365,15366],{"class":5636},"'l1'",[5543,15368,5563],{"class":5556},[5543,15370,15371],{"class":5906},"solver",[5543,15373,5969],{"class":5556},[5543,15375,15376],{"class":5636},"'liblinear'",[5543,15378,5563],{"class":5556},[5543,15380,11166],{"class":5906},[5543,15382,5969],{"class":5556},[5543,15384,15385],{"class":5560},"1.0",[5543,15387,5824],{"class":5556},[5253,15389],{},[5256,15391,15393],{"id":15392},"інтерактивні-запитання-для-самоперевірки","Інтерактивні запитання для самоперевірки",[15084,15395,15396,15424,15459,15495,15562,15644],{},[15087,15397,15400,15418],{"icon":15398,"label":15399},"i-lucide-help-circle","❓ Чому логістична регресія називається 'регресією', хоча розв'язує класифікацію?",[5261,15401,15402,15403,15406,15407,15410,15411,15414,15415,15417],{},"Історично термін \"регресія\" з'явився через те, що алгоритм використовує ",[5224,15404,15405],{},"лінійну комбінацію ознак"," (як у лінійній регресії): ",[6363,15408],{"tex":15409,":inline":6366},"z = wx + b",". Але потім ця лінійна комбінація пропускається через ",[5224,15412,15413],{},"сигмоїду",", яка перетворює ",[6363,15416],{"tex":7071,":inline":6366}," у ймовірність класу 1. Тому фінальний результат — це клас (0 або 1), а не число.",[5261,15419,15420,15423],{},[5224,15421,15422],{},"Правильна назва за суттю:"," логістична класифікація. Але в історичній літературі та бібліотеках (sklearn) збереглася назва \"логістична регресія\".",[15087,15425,15427,15430,15454],{"icon":15398,"label":15426},"❓ Що станеться, якщо не масштабувати ознаки?",[5261,15428,15429],{},"Якщо одна ознака має значення від 0 до 1 (наприклад, ймовірність), а інша — від 0 до 100 000 (наприклад, зарплата), то:",[6984,15431,15432,15438,15444],{},[5201,15433,15434,15437],{},[5224,15435,15436],{},"Градієнтний спуск стане нестабільним:"," кроки оптимізації будуть занадто великими для однієї ознаки та занадто малими для іншої.",[5201,15439,15440,15443],{},[5224,15441,15442],{},"Модель може не збігтися:"," навчання триватиме дуже довго або взагалі застрягне в субоптимумі.",[5201,15445,15446,15449,15450,15453],{},[5224,15447,15448],{},"Ваги будуть спотворені:"," ознака з великим масштабом отримає штучно малу вагу (оскільки ",[6363,15451],{"tex":15452,":inline":6366},"w \\cdot x"," має залишатися розумним).",[5261,15455,15456,15458],{},[5224,15457,6977],{}," завжди масштабуйте ознаки перед навчанням логістичної регресії!",[15087,15460,15462,15468,15471,15485],{"icon":15398,"label":15461},"❓ Чи може логістична регресія повертати ймовірність рівно 0 або 1?",[5261,15463,15464,15467],{},[5224,15465,15466],{},"Ні, не може!"," Сигмоїдна функція асимптотично наближається до 0 та 1, але ніколи їх не досягає:",[6363,15469],{"tex":15470},"\\lim_{z \\\\to -\\\\infty} \\\\sigma(z) = 0, \\\\quad \\\\lim_{z \\\\to +\\\\infty} \\\\sigma(z) = 1",[5261,15472,15473,15474,15477,15478,5431,15481,15484],{},"Навіть для дуже великих ",[6363,15475],{"tex":15476,":inline":6366},"|z|"," результат буде на кшталт ",[6363,15479],{"tex":15480,":inline":6366},"0.0001",[6363,15482],{"tex":15483,":inline":6366},"0.9999",", але не точно 0 чи 1.",[5261,15486,15487,15490,15491,15494],{},[5224,15488,15489],{},"Практичне значення:"," модель ",[5224,15492,15493],{},"ніколи не буває на 100% впевнена",". Завжди залишається невелика невизначеність, що математично коректно відображає ймовірнісну природу класифікації.",[15087,15496,15498,15505,15519,15526,15543,15548],{"icon":15398,"label":15497},"❓ Яка різниця між 'predict()' та 'predict_proba()'?",[5261,15499,15500],{},[5224,15501,15502,5273],{},[5540,15503,15504],{},"predict(X)",[5198,15506,15507,15510,15513],{},[5201,15508,15509],{},"Повертає фінальне рішення про клас (0 або 1)",[5201,15511,15512],{},"Використовує поріг 0.5 за замовчуванням",[5201,15514,15515,15516],{},"Приклад: ",[5540,15517,15518],{},"[0, 1, 1, 0]",[5261,15520,15521],{},[5224,15522,15523,5273],{},[5540,15524,15525],{},"predict_proba(X)",[5198,15527,15528,15531,15537],{},[5201,15529,15530],{},"Повертає ймовірності для кожного класу",[5201,15532,15533,15534],{},"Формат: масив розміром ",[5540,15535,15536],{},"(n_samples, n_classes)",[5201,15538,15515,15539,15542],{},[5540,15540,15541],{},"[[0.73, 0.27], [0.12, 0.88], ...]"," (перший стовпець — P(клас=0), другий — P(клас=1))",[5261,15544,15545],{},[5224,15546,15547],{},"Коли що використовувати:",[5198,15549,15550,15556],{},[5201,15551,15552,15555],{},[5540,15553,15554],{},"predict()"," — коли потрібне остаточне рішення (наприклад, для автоматичної системи)",[5201,15557,15558,15561],{},[5540,15559,15560],{},"predict_proba()"," — коли потрібна ймовірність для аналізу, калібрування порогу або візуалізації впевненості",[15087,15563,15565,15575,15579],{"icon":15398,"label":15564},"❓ Чи працює логістична регресія з відсутніми значеннями (NaN)?",[5261,15566,15567,15570,15571,15574],{},[5224,15568,15569],{},"Ні!"," sklearn.LogisticRegression викидає помилку, якщо у даних є ",[5540,15572,15573],{},"NaN"," (відсутні значення).",[5261,15576,15577],{},[5224,15578,11637],{},[5532,15580,15582],{"className":5534,"code":15581,"language":5537,"meta":5538,"style":5538},"# Варіант 1: Видалити рядки з пропусками\ndf_clean = df.dropna()\n\n# Варіант 2: Заповнити медіаною\u002Fсереднім\nfrom sklearn.impute import SimpleImputer\nimputer = SimpleImputer(strategy='median')\nX_filled = imputer.fit_transform(X)\n\n# Варіант 3: Використати модель, стійку до пропусків (наприклад, XGBoost)\n",[5540,15583,15584,15589,15594,15598,15603,15615,15630,15635,15639],{"__ignoreMap":5538},[5543,15585,15586],{"class":5545,"line":5546},[5543,15587,15588],{"class":5549},"# Варіант 1: Видалити рядки з пропусками\n",[5543,15590,15591],{"class":5545,"line":5553},[5543,15592,15593],{"class":5556},"df_clean = df.dropna()\n",[5543,15595,15596],{"class":5545,"line":5595},[5543,15597,5599],{"emptyLinePlaceholder":5598},[5543,15599,15600],{"class":5545,"line":5602},[5543,15601,15602],{"class":5549},"# Варіант 2: Заповнити медіаною\u002Fсереднім\n",[5543,15604,15605,15607,15610,15612],{"class":5545,"line":5608},[5543,15606,5672],{"class":5671},[5543,15608,15609],{"class":5556}," sklearn.impute ",[5543,15611,5678],{"class":5671},[5543,15613,15614],{"class":5556}," SimpleImputer\n",[5543,15616,15617,15620,15623,15625,15628],{"class":5545,"line":5614},[5543,15618,15619],{"class":5556},"imputer = SimpleImputer(",[5543,15621,15622],{"class":5906},"strategy",[5543,15624,5969],{"class":5556},[5543,15626,15627],{"class":5636},"'median'",[5543,15629,5824],{"class":5556},[5543,15631,15632],{"class":5545,"line":5689},[5543,15633,15634],{"class":5556},"X_filled = imputer.fit_transform(X)\n",[5543,15636,15637],{"class":5545,"line":5695},[5543,15638,5599],{"emptyLinePlaceholder":5598},[5543,15640,15641],{"class":5545,"line":5827},[5543,15642,15643],{"class":5549},"# Варіант 3: Використати модель, стійку до пропусків (наприклад, XGBoost)\n",[15087,15645,15647,15656,15659,15665,15670,15690,15699],{"icon":15398,"label":15646},"❓ Що означає параметр 'C' у LogisticRegression?",[5261,15648,15649,15650,15652,15653,5273],{},"Параметр ",[5540,15651,11166],{}," контролює ",[5224,15654,15655],{},"силу регуляризації",[6363,15657],{"tex":15658},"C = \\frac{1}{\\lambda}",[5261,15660,12889,15661,15664],{},[6363,15662],{"tex":15663,":inline":6366},"\\lambda"," — стандартний коефіцієнт регуляризації.",[5261,15666,15667],{},[5224,15668,15669],{},"Інтерпретація:",[5198,15671,15672,15681],{},[5201,15673,15674,15680],{},[5224,15675,15676,15677,15679],{},"Великий ",[5540,15678,11166],{}," (наприклад, 100)"," → слабка регуляризація → модель може перенавчитися",[5201,15682,15683,15689],{},[5224,15684,15685,15686,15688],{},"Малий ",[5540,15687,11166],{}," (наприклад, 0.01)"," → сильна регуляризація → модель стає простішою, може недонавчитися",[5261,15691,15692,13300,15695,15698],{},[5224,15693,15694],{},"За замовчуванням:",[5540,15696,15697],{},"C=1.0"," — розумний компроміс для більшості задач.",[5261,15700,15701,15706,15707,5431,15710,6299],{},[5224,15702,15703,15704,5273],{},"Як підібрати оптимальний ",[5540,15705,11166],{}," використати крос-валідацію (",[5540,15708,15709],{},"GridSearchCV",[5540,15711,15712],{},"LogisticRegressionCV",[5253,15714],{},[5256,15716,15718],{"id":15717},"практичні-завдання","Практичні завдання",[15084,15720,15721,15768,16225,16709],{},[15087,15722,15725,15731,15736,15762],{"icon":15723,"label":15724},"i-lucide-clipboard-list","📋 Завдання 1: Базова класифікація (рівень 1)",[5261,15726,15727,15730],{},[5224,15728,15729],{},"Мета:"," навчитися будувати просту логістичну регресію на стандартному датасеті.",[5261,15732,15733],{},[5224,15734,15735],{},"Завдання:",[6984,15737,15738,15744,15747,15753,15756,15759],{},[5201,15739,15740,15741,5499],{},"Завантажте датасет \"Breast Cancer\" з sklearn (",[5540,15742,15743],{},"from sklearn.datasets import load_breast_cancer",[5201,15745,15746],{},"Розділіть дані на навчальну та тестову вибірки (70%\u002F30%)",[5201,15748,15749,15750],{},"Масштабуйте ознаки за допомогою ",[5540,15751,15752],{},"StandardScaler",[5201,15754,15755],{},"Навчіть логістичну регресію",[5201,15757,15758],{},"Обчисліть точність на тестовій вибірці",[5201,15760,15761],{},"Виведіть 5 найважливіших ознак (за абсолютним коефіцієнтом)",[5261,15763,15764,15767],{},[5224,15765,15766],{},"Очікуваний результат:"," точність >90%.",[15087,15769,15772],{"icon":15770,"label":15771},"i-lucide-check-circle","✅ Розв'язок завдання 1",[5736,15773,15775],{"title":15774,"kernel":6580},"solution_task_1.ipynb",[6582,15776,15778],{"execution-count":5481,"execution-time":15777},"0.14s",[5532,15779,15781],{"className":5534,"code":15780,"language":5537,"meta":5538,"style":5538},"from sklearn.datasets import load_breast_cancer\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.metrics import accuracy_score\nimport pandas as pd\nimport numpy as np\n\n# 1. Завантаження датасету\ndata = load_breast_cancer()\nX, y = data.data, data.target\n\n# 2. Розділення на навчальну та тестову вибірки\nX_train, X_test, y_train, y_test = train_test_split(\n    X, y, test_size=0.3, random_state=42, stratify=y\n)\n\n# 3. Масштабування\nscaler = StandardScaler()\nX_train_scaled = scaler.fit_transform(X_train)\nX_test_scaled = scaler.transform(X_test)\n\n# 4. Навчання моделі\nmodel = LogisticRegression(max_iter=10000, random_state=42)\nmodel.fit(X_train_scaled, y_train)\n\n# 5. Обчислення точності\ny_pred = model.predict(X_test_scaled)\naccuracy = accuracy_score(y_test, y_pred)\n\nprint(f\"Точність на тестовій вибірці: {accuracy:.1%}\")\n\n# 6. Топ-5 найважливіших ознак\nfeature_importance = pd.DataFrame({\n    'Feature': data.feature_names,\n    'Coefficient': np.abs(model.coef_[0])\n}).sort_values('Coefficient', ascending=False)\n\nprint(\"\\nТоп-5 найважливіших ознак:\")\nprint(feature_importance.head().to_string(index=False))\n\nimport matplotlib.pyplot as plt\n\ntop5 = feature_importance.head()\nplt.figure(figsize=(9, 5))\nplt.barh(top5['Feature'][::-1], top5['Coefficient'][::-1], color='#10b981')\nplt.xlabel('|Коефіцієнт|')\nplt.title('Топ-5 ознак датасету breast cancer', fontsize=13)\nplt.grid(axis='x', alpha=0.3)\nplt.show()\n",[5540,15782,15783,15794,15804,15814,15824,15835,15845,15855,15859,15864,15869,15874,15878,15883,15887,15911,15915,15919,15924,15928,15932,15936,15940,15945,15966,15970,15974,15979,15983,15987,15991,16011,16015,16020,16025,16033,16044,16061,16065,16080,16095,16100,16111,16116,16122,16139,16171,16181,16199,16220],{"__ignoreMap":5538},[5543,15784,15785,15787,15789,15791],{"class":5545,"line":5546},[5543,15786,5672],{"class":5671},[5543,15788,5750],{"class":5556},[5543,15790,5678],{"class":5671},[5543,15792,15793],{"class":5556}," load_breast_cancer\n",[5543,15795,15796,15798,15800,15802],{"class":5545,"line":5553},[5543,15797,5672],{"class":5671},[5543,15799,12320],{"class":5556},[5543,15801,5678],{"class":5671},[5543,15803,12325],{"class":5556},[5543,15805,15806,15808,15810,15812],{"class":5545,"line":5595},[5543,15807,5672],{"class":5671},[5543,15809,5675],{"class":5556},[5543,15811,5678],{"class":5671},[5543,15813,13482],{"class":5556},[5543,15815,15816,15818,15820,15822],{"class":5545,"line":5602},[5543,15817,5672],{"class":5671},[5543,15819,5762],{"class":5556},[5543,15821,5678],{"class":5671},[5543,15823,5767],{"class":5556},[5543,15825,15826,15828,15830,15832],{"class":5545,"line":5608},[5543,15827,5672],{"class":5671},[5543,15829,13499],{"class":5556},[5543,15831,5678],{"class":5671},[5543,15833,15834],{"class":5556}," accuracy_score\n",[5543,15836,15837,15839,15841,15843],{"class":5545,"line":5614},[5543,15838,5678],{"class":5671},[5543,15840,13456],{"class":5556},[5543,15842,5863],{"class":5671},[5543,15844,13461],{"class":5556},[5543,15846,15847,15849,15851,15853],{"class":5545,"line":5689},[5543,15848,5678],{"class":5671},[5543,15850,6603],{"class":5556},[5543,15852,5863],{"class":5671},[5543,15854,6608],{"class":5556},[5543,15856,15857],{"class":5545,"line":5695},[5543,15858,5599],{"emptyLinePlaceholder":5598},[5543,15860,15861],{"class":5545,"line":5827},[5543,15862,15863],{"class":5549},"# 1. Завантаження датасету\n",[5543,15865,15866],{"class":5545,"line":5850},[5543,15867,15868],{"class":5556},"data = load_breast_cancer()\n",[5543,15870,15871],{"class":5545,"line":5855},[5543,15872,15873],{"class":5556},"X, y = data.data, data.target\n",[5543,15875,15876],{"class":5545,"line":5869},[5543,15877,5599],{"emptyLinePlaceholder":5598},[5543,15879,15880],{"class":5545,"line":5874},[5543,15881,15882],{"class":5549},"# 2. Розділення на навчальну та тестову вибірки\n",[5543,15884,15885],{"class":5545,"line":5895},[5543,15886,12356],{"class":5556},[5543,15888,15889,15891,15893,15895,15897,15899,15901,15903,15905,15907,15909],{"class":5545,"line":5900},[5543,15890,12361],{"class":5556},[5543,15892,12364],{"class":5906},[5543,15894,5969],{"class":5556},[5543,15896,6094],{"class":5560},[5543,15898,5563],{"class":5556},[5543,15900,12373],{"class":5906},[5543,15902,5969],{"class":5556},[5543,15904,8711],{"class":5560},[5543,15906,5563],{"class":5556},[5543,15908,14053],{"class":5906},[5543,15910,14056],{"class":5556},[5543,15912,15913],{"class":5545,"line":5924},[5543,15914,5824],{"class":5556},[5543,15916,15917],{"class":5545,"line":5942},[5543,15918,5599],{"emptyLinePlaceholder":5598},[5543,15920,15921],{"class":5545,"line":5978},[5543,15922,15923],{"class":5549},"# 3. Масштабування\n",[5543,15925,15926],{"class":5545,"line":6007},[5543,15927,14164],{"class":5556},[5543,15929,15930],{"class":5545,"line":6028},[5543,15931,14169],{"class":5556},[5543,15933,15934],{"class":5545,"line":6047},[5543,15935,14174],{"class":5556},[5543,15937,15938],{"class":5545,"line":6067},[5543,15939,5599],{"emptyLinePlaceholder":5598},[5543,15941,15942],{"class":5545,"line":6083},[5543,15943,15944],{"class":5549},"# 4. Навчання моделі\n",[5543,15946,15947,15949,15951,15953,15956,15958,15960,15962,15964],{"class":5545,"line":6099},[5543,15948,14268],{"class":5556},[5543,15950,12409],{"class":5906},[5543,15952,5969],{"class":5556},[5543,15954,15955],{"class":5560},"10000",[5543,15957,5563],{"class":5556},[5543,15959,12373],{"class":5906},[5543,15961,5969],{"class":5556},[5543,15963,8711],{"class":5560},[5543,15965,5824],{"class":5556},[5543,15967,15968],{"class":5545,"line":7782},[5543,15969,14290],{"class":5556},[5543,15971,15972],{"class":5545,"line":7809},[5543,15973,5599],{"emptyLinePlaceholder":5598},[5543,15975,15976],{"class":5545,"line":9340},[5543,15977,15978],{"class":5549},"# 5. Обчислення точності\n",[5543,15980,15981],{"class":5545,"line":9358},[5543,15982,14304],{"class":5556},[5543,15984,15985],{"class":5545,"line":9372},[5543,15986,14327],{"class":5556},[5543,15988,15989],{"class":5545,"line":9385},[5543,15990,5599],{"emptyLinePlaceholder":5598},[5543,15992,15993,15995,15997,15999,16001,16003,16005,16007,16009],{"class":5545,"line":11004},[5543,15994,5796],{"class":5795},[5543,15996,5799],{"class":5556},[5543,15998,5803],{"class":5802},[5543,16000,12440],{"class":5636},[5543,16002,5809],{"class":5802},[5543,16004,10661],{"class":5556},[5543,16006,7972],{"class":5802},[5543,16008,5821],{"class":5636},[5543,16010,5824],{"class":5556},[5543,16012,16013],{"class":5545,"line":13758},[5543,16014,5599],{"emptyLinePlaceholder":5598},[5543,16016,16017],{"class":5545,"line":13767},[5543,16018,16019],{"class":5549},"# 6. Топ-5 найважливіших ознак\n",[5543,16021,16022],{"class":5545,"line":13776},[5543,16023,16024],{"class":5556},"feature_importance = pd.DataFrame({\n",[5543,16026,16027,16030],{"class":5545,"line":13785},[5543,16028,16029],{"class":5636},"    'Feature'",[5543,16031,16032],{"class":5556},": data.feature_names,\n",[5543,16034,16035,16038,16040,16042],{"class":5545,"line":13794},[5543,16036,16037],{"class":5636},"    'Coefficient'",[5543,16039,14406],{"class":5556},[5543,16041,5477],{"class":5560},[5543,16043,5592],{"class":5556},[5543,16045,16046,16048,16051,16053,16055,16057,16059],{"class":5545,"line":13800},[5543,16047,14415],{"class":5556},[5543,16049,16050],{"class":5636},"'Coefficient'",[5543,16052,5563],{"class":5556},[5543,16054,14423],{"class":5906},[5543,16056,5969],{"class":5556},[5543,16058,5504],{"class":5802},[5543,16060,5824],{"class":5556},[5543,16062,16063],{"class":5545,"line":13805},[5543,16064,5599],{"emptyLinePlaceholder":5598},[5543,16066,16067,16069,16071,16073,16075,16078],{"class":5545,"line":13817},[5543,16068,5796],{"class":5795},[5543,16070,5799],{"class":5556},[5543,16072,5821],{"class":5636},[5543,16074,8897],{"class":8896},[5543,16076,16077],{"class":5636},"Топ-5 найважливіших ознак:\"",[5543,16079,5824],{"class":5556},[5543,16081,16082,16084,16087,16089,16091,16093],{"class":5545,"line":13835},[5543,16083,5796],{"class":5795},[5543,16085,16086],{"class":5556},"(feature_importance.head().to_string(",[5543,16088,14744],{"class":5906},[5543,16090,5969],{"class":5556},[5543,16092,5504],{"class":5802},[5543,16094,5921],{"class":5556},[5543,16096,16098],{"class":5545,"line":16097},41,[5543,16099,5599],{"emptyLinePlaceholder":5598},[5543,16101,16103,16105,16107,16109],{"class":5545,"line":16102},42,[5543,16104,5678],{"class":5671},[5543,16106,5860],{"class":5556},[5543,16108,5863],{"class":5671},[5543,16110,5866],{"class":5556},[5543,16112,16114],{"class":5545,"line":16113},43,[5543,16115,5599],{"emptyLinePlaceholder":5598},[5543,16117,16119],{"class":5545,"line":16118},44,[5543,16120,16121],{"class":5556},"top5 = feature_importance.head()\n",[5543,16123,16125,16127,16129,16131,16133,16135,16137],{"class":5545,"line":16124},45,[5543,16126,5903],{"class":5556},[5543,16128,5907],{"class":5906},[5543,16130,5910],{"class":5556},[5543,16132,5913],{"class":5560},[5543,16134,5563],{"class":5556},[5543,16136,7770],{"class":5560},[5543,16138,5921],{"class":5556},[5543,16140,16142,16145,16148,16150,16152,16155,16157,16159,16161,16163,16165,16167,16169],{"class":5545,"line":16141},46,[5543,16143,16144],{"class":5556},"plt.barh(top5[",[5543,16146,16147],{"class":5636},"'Feature'",[5543,16149,14526],{"class":5556},[5543,16151,5481],{"class":5560},[5543,16153,16154],{"class":5556},"], top5[",[5543,16156,16050],{"class":5636},[5543,16158,14526],{"class":5556},[5543,16160,5481],{"class":5560},[5543,16162,5957],{"class":5556},[5543,16164,7559],{"class":5906},[5543,16166,5969],{"class":5556},[5543,16168,5890],{"class":5636},[5543,16170,5824],{"class":5556},[5543,16172,16174,16176,16179],{"class":5545,"line":16173},47,[5543,16175,6010],{"class":5556},[5543,16177,16178],{"class":5636},"'|Коефіцієнт|'",[5543,16180,5824],{"class":5556},[5543,16182,16184,16186,16189,16191,16193,16195,16197],{"class":5545,"line":16183},48,[5543,16185,6050],{"class":5556},[5543,16187,16188],{"class":5636},"'Топ-5 ознак датасету breast cancer'",[5543,16190,5563],{"class":5556},[5543,16192,6018],{"class":5906},[5543,16194,5969],{"class":5556},[5543,16196,8268],{"class":5560},[5543,16198,5824],{"class":5556},[5543,16200,16202,16204,16206,16208,16210,16212,16214,16216,16218],{"class":5545,"line":16201},49,[5543,16203,6086],{"class":5556},[5543,16205,14002],{"class":5906},[5543,16207,5969],{"class":5556},[5543,16209,9026],{"class":5636},[5543,16211,5563],{"class":5556},[5543,16213,6089],{"class":5906},[5543,16215,5969],{"class":5556},[5543,16217,6094],{"class":5560},[5543,16219,5824],{"class":5556},[5543,16221,16223],{"class":5545,"line":16222},50,[5543,16224,6102],{"class":5556},[6104,16226,16227,16234,16240,16243,16245,16248,16291],{"v-slot:output":5538},[5261,16228,16229],{},[5448,16230],{"alt":16231,"className":16232,"src":16233},"Топ-5 найважливіших ознак за абсолютним коефіцієнтом",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F19-top5-features.png",[5532,16235,16238],{"className":16236,"code":16237,"language":6118},[6116],"Точність на тестовій вибірці: 97.7%\n\nТоп-5 найважливіших ознак:\n                Feature  Coefficient\n          worst radius       2.4521\n         worst texture       1.9834\n worst concave points       1.7652\n        mean concavity       1.6234\n           mean radius       1.5123\n",[5540,16239,16237],{"__ignoreMap":5538},[5261,16241,16242],{},"::",[5261,16244,16242],{},[5261,16246,16247],{},":::",[15087,16249,16251,16256,16260],{"icon":15723,"label":16250},"📋 Завдання 2: Налаштування порогу (рівень 2)",[5261,16252,16253,16255],{},[5224,16254,15729],{}," навчитися оптимізувати поріг рішення під конкретну метрику.",[5261,16257,16258],{},[5224,16259,15735],{},[6984,16261,16262,16265,16271,16274,16285,16288],{},[5201,16263,16264],{},"Використайте модель з Завдання 1",[5201,16266,16267,16268,5499],{},"Обчисліть ймовірності для тестової вибірки (",[5540,16269,16270],{},"predict_proba",[5201,16272,16273],{},"Протестуйте різні пороги від 0.1 до 0.9 (крок 0.1)",[5201,16275,16276,16277],{},"Для кожного порогу обчисліть:\n",[5198,16278,16279,16282],{},[5201,16280,16281],{},"Кількість прогнозів класу 1",[5201,16283,16284],{},"Точність (accuracy)",[5201,16286,16287],{},"Побудуйте графік залежності точності від порогу",[5201,16289,16290],{},"Визначте оптимальний поріг",[15087,16292,16294],{"icon":15770,"label":16293},"✅ Розв'язок завдання 2",[5736,16295,16297],{"title":16296,"execution-count":5481,"execution-time":7431},"solution_task_2.ipynb",[5532,16298,16300],{"className":5534,"code":16299,"language":5537,"meta":5538,"style":5538},"import matplotlib.pyplot as plt\n\n# Отримання ймовірностей\ny_probs = model.predict_proba(X_test_scaled)[:, 1]\n\n# Тестування різних порогів\nthresholds = np.arange(0.1, 1.0, 0.1)\nresults = []\n\nfor threshold in thresholds:\n    y_pred_custom = (y_probs >= threshold).astype(int)\n    acc = accuracy_score(y_test, y_pred_custom)\n    count_class_1 = y_pred_custom.sum()\n    \n    results.append({\n        'Threshold': threshold,\n        'Accuracy': acc,\n        'Count Class 1': count_class_1\n    })\n\nresults_df = pd.DataFrame(results)\nprint(results_df.to_string(index=False))\n\n# Побудова графіка\nplt.figure(figsize=(10, 6))\nplt.plot(results_df['Threshold'], results_df['Accuracy'], \n         marker='o', linewidth=2, markersize=8, color='#3b82f6')\nplt.xlabel('Поріг рішення', fontsize=12)\nplt.ylabel('Точність (Accuracy)', fontsize=12)\nplt.title('Вплив порогу на точність класифікації', fontsize=14)\nplt.grid(alpha=0.3)\nplt.axhline(y=results_df['Accuracy'].max(), color='#10b981', \n            linestyle='--', label=f'Максимум: {results_df[\"Accuracy\"].max():.3f}')\nplt.legend()\nplt.show()\n\noptimal_threshold = results_df.loc[results_df['Accuracy'].idxmax(), 'Threshold']\nprint(f\"\\nОптимальний поріг: {optimal_threshold:.1f}\")\n",[5540,16301,16302,16312,16316,16321,16329,16333,16338,16355,16360,16364,16374,16383,16388,16393,16398,16403,16411,16419,16427,16432,16436,16441,16456,16460,16464,16480,16497,16533,16550,16567,16584,16596,16619,16656,16660,16664,16668,16682],{"__ignoreMap":5538},[5543,16303,16304,16306,16308,16310],{"class":5545,"line":5546},[5543,16305,5678],{"class":5671},[5543,16307,5860],{"class":5556},[5543,16309,5863],{"class":5671},[5543,16311,5866],{"class":5556},[5543,16313,16314],{"class":5545,"line":5553},[5543,16315,5599],{"emptyLinePlaceholder":5598},[5543,16317,16318],{"class":5545,"line":5595},[5543,16319,16320],{"class":5549},"# Отримання ймовірностей\n",[5543,16322,16323,16325,16327],{"class":5545,"line":5602},[5543,16324,14309],{"class":5556},[5543,16326,5481],{"class":5560},[5543,16328,5657],{"class":5556},[5543,16330,16331],{"class":5545,"line":5608},[5543,16332,5599],{"emptyLinePlaceholder":5598},[5543,16334,16335],{"class":5545,"line":5614},[5543,16336,16337],{"class":5549},"# Тестування різних порогів\n",[5543,16339,16340,16343,16345,16347,16349,16351,16353],{"class":5545,"line":5689},[5543,16341,16342],{"class":5556},"thresholds = np.arange(",[5543,16344,9262],{"class":5560},[5543,16346,5563],{"class":5556},[5543,16348,15385],{"class":5560},[5543,16350,5563],{"class":5556},[5543,16352,9262],{"class":5560},[5543,16354,5824],{"class":5556},[5543,16356,16357],{"class":5545,"line":5695},[5543,16358,16359],{"class":5556},"results = []\n",[5543,16361,16362],{"class":5545,"line":5827},[5543,16363,5599],{"emptyLinePlaceholder":5598},[5543,16365,16366,16368,16370,16372],{"class":5545,"line":5850},[5543,16367,5927],{"class":5671},[5543,16369,12150],{"class":5556},[5543,16371,5933],{"class":5671},[5543,16373,12155],{"class":5556},[5543,16375,16376,16379,16381],{"class":5545,"line":5855},[5543,16377,16378],{"class":5556},"    y_pred_custom = (y_probs >= threshold).astype(",[5543,16380,12164],{"class":12163},[5543,16382,5824],{"class":5556},[5543,16384,16385],{"class":5545,"line":5869},[5543,16386,16387],{"class":5556},"    acc = accuracy_score(y_test, y_pred_custom)\n",[5543,16389,16390],{"class":5545,"line":5874},[5543,16391,16392],{"class":5556},"    count_class_1 = y_pred_custom.sum()\n",[5543,16394,16395],{"class":5545,"line":5895},[5543,16396,16397],{"class":5556},"    \n",[5543,16399,16400],{"class":5545,"line":5900},[5543,16401,16402],{"class":5556},"    results.append({\n",[5543,16404,16405,16408],{"class":5545,"line":5924},[5543,16406,16407],{"class":5636},"        'Threshold'",[5543,16409,16410],{"class":5556},": threshold,\n",[5543,16412,16413,16416],{"class":5545,"line":5942},[5543,16414,16415],{"class":5636},"        'Accuracy'",[5543,16417,16418],{"class":5556},": acc,\n",[5543,16420,16421,16424],{"class":5545,"line":5978},[5543,16422,16423],{"class":5636},"        'Count Class 1'",[5543,16425,16426],{"class":5556},": count_class_1\n",[5543,16428,16429],{"class":5545,"line":6007},[5543,16430,16431],{"class":5556},"    })\n",[5543,16433,16434],{"class":5545,"line":6028},[5543,16435,5599],{"emptyLinePlaceholder":5598},[5543,16437,16438],{"class":5545,"line":6047},[5543,16439,16440],{"class":5556},"results_df = pd.DataFrame(results)\n",[5543,16442,16443,16445,16448,16450,16452,16454],{"class":5545,"line":6067},[5543,16444,5796],{"class":5795},[5543,16446,16447],{"class":5556},"(results_df.to_string(",[5543,16449,14744],{"class":5906},[5543,16451,5969],{"class":5556},[5543,16453,5504],{"class":5802},[5543,16455,5921],{"class":5556},[5543,16457,16458],{"class":5545,"line":6083},[5543,16459,5599],{"emptyLinePlaceholder":5598},[5543,16461,16462],{"class":5545,"line":6099},[5543,16463,7525],{"class":5549},[5543,16465,16466,16468,16470,16472,16474,16476,16478],{"class":5545,"line":7782},[5543,16467,5903],{"class":5556},[5543,16469,5907],{"class":5906},[5543,16471,5910],{"class":5556},[5543,16473,6783],{"class":5560},[5543,16475,5563],{"class":5556},[5543,16477,5918],{"class":5560},[5543,16479,5921],{"class":5556},[5543,16481,16482,16485,16488,16491,16494],{"class":5545,"line":7809},[5543,16483,16484],{"class":5556},"plt.plot(results_df[",[5543,16486,16487],{"class":5636},"'Threshold'",[5543,16489,16490],{"class":5556},"], results_df[",[5543,16492,16493],{"class":5636},"'Accuracy'",[5543,16495,16496],{"class":5556},"], \n",[5543,16498,16499,16502,16504,16506,16508,16510,16512,16514,16516,16519,16521,16523,16525,16527,16529,16531],{"class":5545,"line":9340},[5543,16500,16501],{"class":5906},"         marker",[5543,16503,5969],{"class":5556},[5543,16505,9111],{"class":5636},[5543,16507,5563],{"class":5556},[5543,16509,7549],{"class":5906},[5543,16511,5969],{"class":5556},[5543,16513,5948],{"class":5560},[5543,16515,5563],{"class":5556},[5543,16517,16518],{"class":5906},"markersize",[5543,16520,5969],{"class":5556},[5543,16522,12718],{"class":5560},[5543,16524,5563],{"class":5556},[5543,16526,7559],{"class":5906},[5543,16528,5969],{"class":5556},[5543,16530,5885],{"class":5636},[5543,16532,5824],{"class":5556},[5543,16534,16535,16537,16540,16542,16544,16546,16548],{"class":5545,"line":9358},[5543,16536,6010],{"class":5556},[5543,16538,16539],{"class":5636},"'Поріг рішення'",[5543,16541,5563],{"class":5556},[5543,16543,6018],{"class":5906},[5543,16545,5969],{"class":5556},[5543,16547,6023],{"class":5560},[5543,16549,5824],{"class":5556},[5543,16551,16552,16554,16557,16559,16561,16563,16565],{"class":5545,"line":9372},[5543,16553,6031],{"class":5556},[5543,16555,16556],{"class":5636},"'Точність (Accuracy)'",[5543,16558,5563],{"class":5556},[5543,16560,6018],{"class":5906},[5543,16562,5969],{"class":5556},[5543,16564,6023],{"class":5560},[5543,16566,5824],{"class":5556},[5543,16568,16569,16571,16574,16576,16578,16580,16582],{"class":5545,"line":9385},[5543,16570,6050],{"class":5556},[5543,16572,16573],{"class":5636},"'Вплив порогу на точність класифікації'",[5543,16575,5563],{"class":5556},[5543,16577,6018],{"class":5906},[5543,16579,5969],{"class":5556},[5543,16581,6062],{"class":5560},[5543,16583,5824],{"class":5556},[5543,16585,16586,16588,16590,16592,16594],{"class":5545,"line":11004},[5543,16587,6086],{"class":5556},[5543,16589,6089],{"class":5906},[5543,16591,5969],{"class":5556},[5543,16593,6094],{"class":5560},[5543,16595,5824],{"class":5556},[5543,16597,16598,16600,16602,16605,16607,16610,16612,16614,16616],{"class":5545,"line":13758},[5543,16599,7579],{"class":5556},[5543,16601,7582],{"class":5906},[5543,16603,16604],{"class":5556},"=results_df[",[5543,16606,16493],{"class":5636},[5543,16608,16609],{"class":5556},"].max(), ",[5543,16611,7559],{"class":5906},[5543,16613,5969],{"class":5556},[5543,16615,5890],{"class":5636},[5543,16617,16618],{"class":5556},", \n",[5543,16620,16621,16624,16626,16628,16630,16632,16634,16636,16639,16641,16644,16647,16650,16652,16654],{"class":5545,"line":13767},[5543,16622,16623],{"class":5906},"            linestyle",[5543,16625,5969],{"class":5556},[5543,16627,7604],{"class":5636},[5543,16629,5563],{"class":5556},[5543,16631,6001],{"class":5906},[5543,16633,5969],{"class":5556},[5543,16635,5803],{"class":5802},[5543,16637,16638],{"class":5636},"'Максимум: ",[5543,16640,5809],{"class":5802},[5543,16642,16643],{"class":5556},"results_df[",[5543,16645,16646],{"class":5636},"\"Accuracy\"",[5543,16648,16649],{"class":5556},"].max()",[5543,16651,6841],{"class":5802},[5543,16653,8172],{"class":5636},[5543,16655,5824],{"class":5556},[5543,16657,16658],{"class":5545,"line":13776},[5543,16659,7738],{"class":5556},[5543,16661,16662],{"class":5545,"line":13785},[5543,16663,6102],{"class":5556},[5543,16665,16666],{"class":5545,"line":13794},[5543,16667,5599],{"emptyLinePlaceholder":5598},[5543,16669,16670,16673,16675,16678,16680],{"class":5545,"line":13800},[5543,16671,16672],{"class":5556},"optimal_threshold = results_df.loc[results_df[",[5543,16674,16493],{"class":5636},[5543,16676,16677],{"class":5556},"].idxmax(), ",[5543,16679,16487],{"class":5636},[5543,16681,5657],{"class":5556},[5543,16683,16684,16686,16688,16690,16692,16694,16697,16699,16702,16705,16707],{"class":5545,"line":13805},[5543,16685,5796],{"class":5795},[5543,16687,5799],{"class":5556},[5543,16689,5803],{"class":5802},[5543,16691,5821],{"class":5636},[5543,16693,8897],{"class":8896},[5543,16695,16696],{"class":5636},"Оптимальний поріг: ",[5543,16698,5809],{"class":5802},[5543,16700,16701],{"class":5556},"optimal_threshold",[5543,16703,16704],{"class":5802},":.1f}",[5543,16706,5821],{"class":5636},[5543,16708,5824],{"class":5556},[6104,16710,16711,16718,16724,16726,16728],{"v-slot:output":5538},[5261,16712,16713],{},[5448,16714],{"alt":16715,"className":16716,"src":16717},"Вплив порогу класифікації на точність моделі (Accuracy)",[5452],"\u002Fimages\u002Fai-python\u002Flogistic-regression-classification\u002Fclassification-basics\u002F08-threshold-accuracy.png",[5532,16719,16722],{"className":16720,"code":16721,"language":6118},[6116]," Threshold  Accuracy  Count Class 1\n       0.1    0.9298            171\n       0.2    0.9649            107\n       0.3    0.9766            107\n       0.4    0.9766            107\n       0.5    0.9766            107\n       0.6    0.9766            104\n       0.7    0.9649            101\n       0.8    0.9532             98\n       0.9    0.8830             72\n\nОптимальний поріг: 0.5\n",[5540,16723,16721],{"__ignoreMap":5538},[5261,16725,16242],{},[5261,16727,16247],{},[15087,16729,16731,16736,16740],{"icon":15723,"label":16730},"📋 Завдання 3: Багатокласова класифікація (рівень 3)",[5261,16732,16733,16735],{},[5224,16734,15729],{}," застосувати логістичну регресію до задачі з 3+ класами.",[5261,16737,16738],{},[5224,16739,15735],{},[6984,16741,16742,16748,16766,16769,16772],{},[5201,16743,16744,16745,5499],{},"Завантажте датасет Iris (",[5540,16746,16747],{},"from sklearn.datasets import load_iris",[5201,16749,16750,16751],{},"Навчіть дві моделі:\n",[5198,16752,16753,16760],{},[5201,16754,16755,16756,16759],{},"З стратегією ",[5540,16757,16758],{},"multi_class='ovr'"," (One-vs-Rest)",[5201,16761,16755,16762,16765],{},[5540,16763,16764],{},"multi_class='multinomial'"," (Softmax)",[5201,16767,16768],{},"Порівняйте їхню точність",[5201,16770,16771],{},"Для одного об'єкта виведіть ймовірності для всіх трьох класів",[5201,16773,16774],{},"Візуалізуйте розділові межі у 2D (використайте лише перші дві ознаки)",[5253,16776],{},[5256,16778,16780],{"id":16779},"підсумкове-резюме-статті","Підсумкове резюме статті",[5190,16782,16783,16795,16810,16814,16826,16838,16842,16847],{},[5193,16784,16787,16788,16790,16791,16794],{"icon":16785,"title":16786},"i-lucide-git-compare","✅ Класифікація vs Регресія","Класифікація передбачає ",[5224,16789,5434],{},", регресія — ",[5224,16792,16793],{},"число",". Основна відмінність у типі цільової змінної.",[5193,16796,16798,16801,16802,16805,16806,16809],{"icon":943,"title":16797},"✅ Типи класифікації",[5224,16799,16800],{},"Бінарна"," (2 класи), ",[5224,16803,16804],{},"багатокласова"," (3+), ",[5224,16807,16808],{},"мультилейбл"," (кілька міток одночасно).",[5193,16811,16813],{"icon":1348,"title":16812},"✅ Логістична регресія","Алгоритм для класифікації: лінійна комбінація + сигмоїда = ймовірність класу 1.",[5193,16815,16818,16820,16821,8517,16823,5467],{"icon":16816,"title":16817},"i-lucide-trending-up","✅ Сигмоїдна функція",[6363,16819],{"tex":7318,":inline":6366}," — перетворює ",[6363,16822],{"tex":7055,":inline":6366},[6363,16824],{"tex":16825,":inline":6366},"P \\in (0, 1)",[5193,16827,16830,16831,16834,16835,5467],{"icon":16828,"title":16829},"i-lucide-separator-horizontal","✅ Розділова межа","Лінія\u002Fплощина, де ",[6363,16832],{"tex":16833,":inline":6366},"P = 0.5",". Визначається рівнянням ",[6363,16836],{"tex":16837,":inline":6366},"\\mathbf{w}^T \\mathbf{x} + b = 0",[5193,16839,16841],{"icon":13293,"title":16840},"✅ Поріг рішення","За замовчуванням 0.5, але налаштовується під бізнес-вимоги (баланс точності та повноти).",[5193,16843,16846],{"icon":16844,"title":16845},"i-lucide-alert-circle","✅ Обмеження","Тільки лінійні межі. Для нелінійних задач — поліноміальні ознаки або інші алгоритми.",[5193,16848,16851],{"icon":16849,"title":16850},"i-lucide-stethoscope","✅ Практичне застосування","Медична діагностика, детекція спаму, кредитний скоринг, передбачення відтоку клієнтів.",[5253,16853],{},[5301,16855,16856,16859,16860,16863],{},[5224,16857,16858],{},"Наступна стаття:"," У наступному розділі ми глибоко зануримося в ",[5224,16861,16862],{},"метрики якості класифікації"," — accuracy, precision, recall, F1-score, ROC-AUC, confusion matrix. Ви дізнаєтесь, як правильно оцінювати моделі класифікації та уникати типових помилок інтерпретації результатів.",[16865,16866,16867],"style",{},"html pre.shiki code .spJ8K, html code.shiki .spJ8K{--shiki-light:#008000;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .sHH4Y, html code.shiki .sHH4Y{--shiki-light:#000000;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sJj4R, html code.shiki .sJj4R{--shiki-light:#098658;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbdoH, html code.shiki .sbdoH{--shiki-light:#A31515;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .s8xlr, html code.shiki .s8xlr{--shiki-light:#AF00DB;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .s8Opu, html code.shiki .s8Opu{--shiki-light:#795E26;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .su1O8, html code.shiki .su1O8{--shiki-light:#0000FF;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .siwwj, html code.shiki .siwwj{--shiki-light:#001080;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sjcCO, html code.shiki .sjcCO{--shiki-light:#EE0000;--shiki-default:#D7BA7D;--shiki-dark:#D7BA7D}html pre.shiki code .sN1BT, html code.shiki .sN1BT{--shiki-light:#267F99;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}",{"title":5538,"searchDepth":5553,"depth":5553,"links":16869},[16870,16871,16874,16879,16883,16889,16892,16896,16899,16903,16904,16909,16913,16917,16921,16925,16926,16931,16934,16935,16936,16937],{"id":5258,"depth":5553,"text":5259},{"id":5315,"depth":5553,"text":5316,"children":16872},[16873],{"id":5333,"depth":5595,"text":5334},{"id":5440,"depth":5553,"text":5441,"children":16875},[16876,16877,16878],{"id":5456,"depth":5595,"text":5457},{"id":5701,"depth":5595,"text":5702},{"id":6123,"depth":5595,"text":6124},{"id":6304,"depth":5553,"text":6305,"children":16880},[16881,16882],{"id":6321,"depth":5595,"text":6322},{"id":6468,"depth":5595,"text":6469},{"id":6540,"depth":5553,"text":6541,"children":16884},[16885,16887,16888],{"id":6561,"depth":5595,"text":16886},"Проблема 1: Прогнози виходять за межі 0, 1",{"id":6910,"depth":5595,"text":6911},{"id":6958,"depth":5595,"text":6959},{"id":7010,"depth":5553,"text":7011,"children":16890},[16891],{"id":7035,"depth":5595,"text":7036},{"id":7300,"depth":5553,"text":7301,"children":16893},[16894,16895],{"id":7314,"depth":5595,"text":7315},{"id":7343,"depth":5595,"text":7344},{"id":7852,"depth":5553,"text":7853,"children":16897},[16898],{"id":7884,"depth":5595,"text":7885},{"id":8318,"depth":5553,"text":8319,"children":16900},[16901,16902],{"id":8325,"depth":5595,"text":8326},{"id":8361,"depth":5595,"text":8362},{"id":8397,"depth":5553,"text":8398},{"id":8452,"depth":5553,"text":8453,"children":16905},[16906,16907,16908],{"id":8473,"depth":5595,"text":7315},{"id":8523,"depth":5595,"text":8524},{"id":9396,"depth":5595,"text":9397},{"id":9452,"depth":5553,"text":9453,"children":16910},[16911,16912],{"id":9466,"depth":5595,"text":9467},{"id":10140,"depth":5595,"text":10141},{"id":10492,"depth":5553,"text":10493,"children":16914},[16915,16916],{"id":10510,"depth":5595,"text":10511},{"id":11024,"depth":5595,"text":11025},{"id":11577,"depth":5553,"text":11578,"children":16918},[16919,16920],{"id":11607,"depth":5595,"text":11608},{"id":11662,"depth":5595,"text":11663},{"id":12240,"depth":5553,"text":12241,"children":16922},[16923,16924],{"id":12251,"depth":5595,"text":12252},{"id":12871,"depth":5595,"text":12872},{"id":13268,"depth":5553,"text":13269},{"id":13312,"depth":5553,"text":13313,"children":16927},[16928,16929,16930],{"id":13319,"depth":5595,"text":13320},{"id":14241,"depth":5595,"text":14242},{"id":14674,"depth":5595,"text":14675},{"id":14901,"depth":5553,"text":14902,"children":16932},[16933],{"id":14908,"depth":5595,"text":14909},{"id":15081,"depth":5553,"text":15082},{"id":15392,"depth":5553,"text":15393},{"id":15717,"depth":5553,"text":15718},{"id":16779,"depth":5553,"text":16780},"Що таке задача класифікації, чим відрізняється від регресії, основи логістичної регресії та сигмоїдна функція","md",null,{},{"title":3879,"description":16938},"Jv7bY8N5idW_4dE_YoN66l-0WgkjOvSkQq0jc1xBeXQ",[16945,16947],{"title":3870,"path":3871,"stem":3872,"description":16946,"children":-1},"Алгоритм градієнтного бустингу як альтернатива Random Forest. Відмінність Boosting від Bagging. XGBoost як оптимізована реалізація. Порівняння всіх моделей регресії з модуля 3.",{"title":3883,"path":3884,"stem":3885,"description":16948,"children":-1},"Confusion Matrix, Accuracy, Precision, Recall, F1-Score, ROC-AUC — як правильно оцінювати моделі класифікації та уникати типових помилок",1792055258031]