15 KiB
Класифікатори кухонь 2
У цьому другому уроці класифікації ви дослідите більше способів класифікації числових даних. Ви також дізнаєтеся про наслідки вибору одного класифікатора над іншим.
Тест перед лекцією
Попередні знання
Ми припускаємо, що ви завершили попередні уроки та маєте очищений набір даних у папці data
, який називається cleaned_cuisines.csv у кореневій папці цього 4-урочного блоку.
Підготовка
Ми завантажили ваш файл notebook.ipynb з очищеним набором даних і розділили його на X та y датафрейми, готові до процесу побудови моделі.
Карта класифікації
Раніше ви дізналися про різні варіанти класифікації даних, використовуючи шпаргалку Microsoft. Scikit-learn пропонує схожу, але більш детальну шпаргалку, яка може допомогти ще більше звузити вибір оцінювачів (інша назва класифікаторів):
Порада: відвідайте цю карту онлайн і натискайте на шляхи, щоб прочитати документацію.
План
Ця карта дуже корисна, коли ви добре розумієте свої дані, оскільки ви можете "пройти" її шляхами до рішення:
- У нас є >50 зразків
- Ми хочемо передбачити категорію
- У нас є мічені дані
- У нас менше ніж 100К зразків
- ✨ Ми можемо вибрати Linear SVC
- Якщо це не спрацює, оскільки у нас числові дані
- Ми можемо спробувати ✨ KNeighbors Classifier
- Якщо це не спрацює, спробуйте ✨ SVC та ✨ Ensemble Classifiers
- Ми можемо спробувати ✨ KNeighbors Classifier
Це дуже корисний шлях для слідування.
Вправа - розділіть дані
Слідуючи цьому шляху, ми повинні почати з імпорту деяких бібліотек для використання.
-
Імпортуйте необхідні бібліотеки:
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
-
Розділіть ваші дані на тренувальні та тестові:
X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)
Класифікатор Linear SVC
Support-Vector clustering (SVC) є частиною сімейства методів машинного навчання Support-Vector machines (докладніше про них нижче). У цьому методі ви можете вибрати "ядро", щоб вирішити, як кластеризувати мітки. Параметр 'C' стосується "регуляризації", яка регулює вплив параметрів. Ядро може бути одним із кількох; тут ми встановлюємо його як 'linear', щоб використовувати Linear SVC. За замовчуванням ймовірність встановлена як 'false'; тут ми встановлюємо її як 'true', щоб отримати оцінки ймовірності. Ми встановлюємо random state як '0', щоб перемішати дані для отримання ймовірностей.
Вправа - застосуйте Linear SVC
Почніть із створення масиву класифікаторів. Ви будете поступово додавати до цього масиву, тестуючи.
-
Почніть із Linear SVC:
C = 10 # Create different classifiers. classifiers = { 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) }
-
Навчіть вашу модель, використовуючи Linear SVC, і виведіть звіт:
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))
Результат досить хороший:
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 є частиною сімейства методів ML "neighbors", які можуть використовуватися як для контрольованого, так і для неконтрольованого навчання. У цьому методі створюється задана кількість точок, і дані збираються навколо цих точок таким чином, щоб можна було передбачити узагальнені мітки для даних.
Вправа - застосуйте класифікатор K-Neighbors
Попередній класифікатор був хорошим і добре працював із даними, але, можливо, ми можемо отримати кращу точність. Спробуйте класифікатор K-Neighbors.
-
Додайте рядок до вашого масиву класифікаторів (додайте кому після елемента Linear SVC):
'KNN classifier': KNeighborsClassifier(C),
Результат трохи гірший:
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
Класифікатор Support Vector
Класифікатори Support-Vector є частиною сімейства методів ML Support-Vector Machine, які використовуються для задач класифікації та регресії. SVM "відображають навчальні приклади в точки в просторі", щоб максимізувати відстань між двома категоріями. Наступні дані відображаються в цьому просторі, щоб можна було передбачити їхню категорію.
Вправа - застосуйте класифікатор Support Vector
Спробуємо отримати трохи кращу точність за допомогою класифікатора Support Vector.
-
Додайте кому після елемента K-Neighbors, а потім додайте цей рядок:
'SVC': SVC(),
Результат досить хороший!
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
Ensemble Classifiers
Давайте пройдемо шлях до самого кінця, навіть якщо попередній тест був досить хорошим. Спробуємо деякі класифікатори 'Ensemble', зокрема Random Forest та AdaBoost:
'RFST': RandomForestClassifier(n_estimators=100),
'ADA': AdaBoostClassifier(n_estimators=100)
Результат дуже хороший, особливо для Random Forest:
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
✅ Дізнайтеся більше про Ensemble Classifiers
Цей метод машинного навчання "об'єднує прогнози кількох базових оцінювачів", щоб покращити якість моделі. У нашому прикладі ми використовували Random Trees та AdaBoost.
-
Random Forest, метод усереднення, будує "ліс" із "дерев рішень", наповнених випадковістю, щоб уникнути перенавчання. Параметр n_estimators встановлюється як кількість дерев.
-
AdaBoost підбирає класифікатор до набору даних, а потім підбирає копії цього класифікатора до того ж набору даних. Він зосереджується на вагах неправильно класифікованих елементів і коригує підбір для наступного класифікатора, щоб виправити помилки.
🚀Виклик
Кожен із цих методів має велику кількість параметрів, які ви можете налаштувати. Дослідіть параметри за замовчуванням кожного методу та подумайте, що означатиме їхнє налаштування для якості моделі.
Тест після лекції
Огляд та самостійне навчання
У цих уроках багато термінології, тому приділіть хвилинку, щоб переглянути цей список корисних термінів!
Завдання
Відмова від відповідальності:
Цей документ було перекладено за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, звертаємо вашу увагу, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ мовою оригіналу слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується професійний переклад людиною. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.