|
2 weeks ago | |
---|---|---|
.. | ||
solution | 3 weeks ago | |
README.md | 2 weeks ago | |
assignment.md | 3 weeks ago | |
notebook.ipynb | 3 weeks ago |
README.md
Классификаторы кухонь 2
Во втором уроке по классификации вы изучите дополнительные методы классификации числовых данных. Вы также узнаете о последствиях выбора одного классификатора вместо другого.
Тест перед лекцией
Предварительные знания
Мы предполагаем, что вы завершили предыдущие уроки и у вас есть очищенный набор данных в папке data
под названием cleaned_cuisines.csv в корневой папке этого курса из 4 уроков.
Подготовка
Мы загрузили ваш файл notebook.ipynb с очищенным набором данных и разделили его на датафреймы X и y, готовые для процесса построения модели.
Карта классификации
Ранее вы узнали о различных вариантах классификации данных, используя шпаргалку Microsoft. Scikit-learn предлагает похожую, но более детализированную шпаргалку, которая поможет сузить выбор оценщиков (другое название классификаторов):
Совет: посетите эту карту онлайн и следуйте по пути, чтобы изучить документацию.
План
Эта карта очень полезна, если вы хорошо понимаете свои данные, так как вы можете "пройти" по её путям к решению:
- У нас есть >50 образцов
- Мы хотим предсказать категорию
- У нас есть размеченные данные
- У нас менее 100K образцов
- ✨ Мы можем выбрать 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
Кластеризация с использованием метода опорных векторов (SVC) является частью семейства методов машинного обучения Support-Vector Machines (SVM). В этом методе вы можете выбрать "ядро" для определения способа кластеризации меток. Параметр 'C' относится к "регуляризации", которая регулирует влияние параметров. Ядро может быть одним из нескольких; здесь мы устанавливаем его как '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 является частью семейства методов машинного обучения "соседи", которые могут использоваться как для контролируемого, так и для неконтролируемого обучения. В этом методе создается заранее определенное количество точек, и данные собираются вокруг этих точек таким образом, чтобы можно было предсказать обобщенные метки для данных.
Упражнение - примените классификатор 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 являются частью семейства методов машинного обучения 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
Ансамблевые классификаторы
Давайте пройдем путь до самого конца, даже если предыдущий тест был довольно хорош. Попробуем некоторые ансамблевые классификаторы, в частности 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
✅ Узнайте больше о Ансамблевых классификаторах
Этот метод машинного обучения "объединяет предсказания нескольких базовых оценщиков", чтобы улучшить качество модели. В нашем примере мы использовали Random Trees и AdaBoost.
-
Random Forest, метод усреднения, строит "лес" из "деревьев решений", насыщенных случайностью, чтобы избежать переобучения. Параметр n_estimators устанавливается как количество деревьев.
-
AdaBoost обучает классификатор на наборе данных, а затем обучает копии этого классификатора на том же наборе данных. Он фокусируется на весах неправильно классифицированных элементов и корректирует подгонку для следующего классификатора, чтобы исправить ошибки.
🚀Задача
У каждого из этих методов есть множество параметров, которые можно настроить. Изучите параметры по умолчанию для каждого метода и подумайте, что изменение этих параметров может означать для качества модели.
Тест после лекции
Обзор и самостоятельное изучение
В этих уроках много терминологии, поэтому уделите минуту, чтобы изучить этот список полезных терминов!
Задание
Отказ от ответственности:
Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Хотя мы стремимся к точности, пожалуйста, имейте в виду, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.