You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/uk/4-Classification/3-Classifiers-2/README.md

242 lines
15 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Класифікатори кухонь 2
У цьому другому уроці з класифікації ви вивчите більше способів класифікації числових даних. Ви також дізнаєтеся про наслідки вибору одного класифікатора над іншим.
## [Попередній тест перед лекцією](https://ff-quizzes.netlify.app/en/ml/)
### Передумови
Ми припускаємо, що ви пройшли попередні уроки та маєте очищений набір даних у вашій папці `data` під назвою _cleaned_cuisines.csv_ у кореневій папці з цими 4 уроками.
### Підготовка
Ми завантажили ваш файл _notebook.ipynb_ з очищеним набором даних та розділили його на датафрейми X та y, готові до процесу побудови моделі.
## Карта класифікації
Раніше ви дізналися про різні варіанти, які маєте при класифікації даних за допомогою шпаргалки Microsoft. Scikit-learn пропонує подібну, але більш детальну шпаргалку, яка може ще більше допомогти звузити ваш вибір оцінювачів (інший термін для класифікаторів):
![ML Map from Scikit-learn](../../../../translated_images/uk/map.e963a6a51349425a.webp)
> Підказка: [відвідайте цю карту онлайн](https://scikit-learn.org/stable/tutorial/machine_learning_map/) та клацайте по шляху, щоб читати документацію.
### План
Ця карта дуже корисна, як тільки ви ясно розумієте ваші дані, оскільки ви можете «йти» її шляхами до рішення:
- У нас >50 зразків
- Ми хочемо передбачити категорію
- У нас є мічені дані
- У нас менше ніж 100 тис. зразків
- ✨ Ми можемо обрати Linear SVC
- Якщо це не спрацює, оскільки у нас числові дані
- Ми можемо спробувати ✨ KNeighbors Classifier
- Якщо це не спрацює, спробуйте ✨ SVC і ✨ Ensemble Classifiers
Цей маршрут дуже корисно наслідувати.
## Вправа - розділити дані
Слідуючи цьому шляху, ми маємо почати з імпорту потрібних бібліотек.
1. Імпортуйте потрібні бібліотеки:
```python
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve
import numpy as np
```
1. Розділіть тренувальні та тестові дані:
```python
X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)
```
## Класифікатор Linear SVC
Підтримка векторного кластерування (SVC) належить до сімейства методів машинного навчання Support-Vector machines (навчайтеся більше про них нижче). У цьому методі ви можете вибрати «ядро», яке визначає, як розподіляти мітки. Параметр «C» означає «регуляризацію», яка регулює вплив параметрів. Ядро може бути одним із [кількох](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); тут ми встановлюємо його 'linear', щоб використати лінійний SVC. Параметр probability за замовчуванням 'false'; тут ми встановлюємо його 'true', щоб отримати оцінки ймовірності. Ми встановили random_state у '0', щоб перемішати дані для отримання ймовірностей.
### Вправа - застосувати лінійний SVC
Почніть зі створення масиву класифікаторів. Ви поступово додаватимете до цього масиву по мірі тестування.
1. Почніть із Linear SVC:
```python
C = 10
# Створіть різні класифікатори.
classifiers = {
'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
}
```
2. Навчіть свою модель за допомогою Linear SVC та виведіть звіт:
```python
n_classifiers = len(classifiers)
for index, (name, classifier) in enumerate(classifiers.items()):
classifier.fit(X_train, np.ravel(y_train))
y_pred = classifier.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100))
print(classification_report(y_test,y_pred))
```
Результат досить хороший:
```output
Accuracy (train) for Linear SVC: 78.6%
precision recall f1-score support
chinese 0.71 0.67 0.69 242
indian 0.88 0.86 0.87 234
japanese 0.79 0.74 0.76 254
korean 0.85 0.81 0.83 242
thai 0.71 0.86 0.78 227
accuracy 0.79 1199
macro avg 0.79 0.79 0.79 1199
weighted avg 0.79 0.79 0.79 1199
```
## Класифікатор K-Neighbors
K-Neighbors належить до сімейства методів "neighbors", які можна використовувати для керованого та некерованого навчання. У цьому методі створюється заздалегідь визначена кількість точок, і дані збираються навколо цих точок так, щоб можна було передбачити узагальнені мітки для даних.
### Вправа - застосувати класифікатор K-Neighbors
Попередній класифікатор був добрим і добре працював з даними, але, можливо, ми отримаємо кращу точність. Спробуйте класифікатор K-Neighbors.
1. Додайте рядок у свій масив класифікаторів (додайте кому після елемента Linear SVC):
```python
'KNN classifier': KNeighborsClassifier(C),
```
Результат трохи гірший:
```output
Accuracy (train) for KNN classifier: 73.8%
precision recall f1-score support
chinese 0.64 0.67 0.66 242
indian 0.86 0.78 0.82 234
japanese 0.66 0.83 0.74 254
korean 0.94 0.58 0.72 242
thai 0.71 0.82 0.76 227
accuracy 0.74 1199
macro avg 0.76 0.74 0.74 1199
weighted avg 0.76 0.74 0.74 1199
```
✅ Дізнайтеся про [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors)
## Класифікатор Support Vector
Класифікатори Support-Vector належать до сімейства методів машинного навчання [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine), які використовуються для задач класифікації та регресії. SVM «відображає приклади тренування у точки в просторі», щоб максимізувати відстань між двома категоріями. Пізніші дані відображаються в цьому просторі, щоб передбачити їх категорію.
### Вправа - застосувати Support Vector Classifier
Спробуємо отримати трохи кращу точність, використовуючи Support Vector Classifier.
1. Додайте кому після елемента K-Neighbors, а потім додайте цей рядок:
```python
'SVC': SVC(),
```
Результат досить хороший!
```output
Accuracy (train) for SVC: 83.2%
precision recall f1-score support
chinese 0.79 0.74 0.76 242
indian 0.88 0.90 0.89 234
japanese 0.87 0.81 0.84 254
korean 0.91 0.82 0.86 242
thai 0.74 0.90 0.81 227
accuracy 0.83 1199
macro avg 0.84 0.83 0.83 1199
weighted avg 0.84 0.83 0.83 1199
```
✅ Дізнайтеся про [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm)
## Ансамблеві класифікатори
Давайте підемо до самого кінця шляху, навіть якщо попередній тест був досить хорошим. Спробуємо деякі «Ансамблеві класифікатори», зокрема Random Forest та AdaBoost:
```python
'RFST': RandomForestClassifier(n_estimators=100),
'ADA': AdaBoostClassifier(n_estimators=100)
```
Результат дуже хороший, особливо для Random Forest:
```output
Accuracy (train) for RFST: 84.5%
precision recall f1-score support
chinese 0.80 0.77 0.78 242
indian 0.89 0.92 0.90 234
japanese 0.86 0.84 0.85 254
korean 0.88 0.83 0.85 242
thai 0.80 0.87 0.83 227
accuracy 0.84 1199
macro avg 0.85 0.85 0.84 1199
weighted avg 0.85 0.84 0.84 1199
Accuracy (train) for ADA: 72.4%
precision recall f1-score support
chinese 0.64 0.49 0.56 242
indian 0.91 0.83 0.87 234
japanese 0.68 0.69 0.69 254
korean 0.73 0.79 0.76 242
thai 0.67 0.83 0.74 227
accuracy 0.72 1199
macro avg 0.73 0.73 0.72 1199
weighted avg 0.73 0.72 0.72 1199
```
✅ Дізнайтеся про [Ансамблеві класифікатори](https://scikit-learn.org/stable/modules/ensemble.html)
Цей метод машинного навчання «поєднує передбачення кількох базових оцінювачів», щоб покращити якість моделі. У нашому прикладі ми використали випадкові дерева та AdaBoost.
- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), метод усереднення, створює «ліс» із «дерев рішень», насичений випадковістю для уникнення перенавчання. Параметр n_estimators встановлює кількість дерев.
- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) підганяє класифікатор під набір даних, а потім підганяє копії цього класифікатора під той самий набір даних. Зосереджується на ваги неправильно класифікованих елементів та налаштовує підгонку для наступного класифікатора, щоб виправити це.
---
## 🚀Виклик
Кожен із цих методів має велику кількість параметрів, які ви можете змінювати. Вивчіть значення параметрів за замовчуванням для кожного та подумайте, що означатиме їх змінення для якості моделі.
## [Пост-лекційний тест](https://ff-quizzes.netlify.app/en/ml/)
## Огляд та самостійне вивчення
У цих уроках багато спеціалізованої термінології, тому приділіть хвилину, щоб переглянути [цей список](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) корисних термінів!
## Завдання
[Гра з параметрами](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Відмова від відповідальності**:
Цей документ був перекладений за допомогою сервісу автоматичного перекладу [Co-op Translator](https://github.com/Azure/co-op-translator). Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ рідною мовою слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується професійний переклад людиною. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, які виникли внаслідок використання цього перекладу.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->