Во втором уроке по классификации вы изучите дополнительные способы классификации числовых данных. Вы также узнаете о последствиях выбора одного классификатора вместо другого.
Мы предполагаем, что вы прошли предыдущие уроки и у вас есть очищенный набор данных в папке 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_features_df, cuisines_label_df, test_size=0.3)
Support-Vector clustering (SVC) является представителем семейства методов машинного обучения Support-Vector machines (узнайте больше ниже). В этом методе вы можете выбрать «ядро» для определения того, как кластеризовать метки. Параметр «C» относится к «регуляризации», которая регулирует влияние параметров. Ядро может быть одним из нескольких; здесь мы установили его на 'linear', чтобы использовать линейный SVC. По умолчанию вероятность установлена в 'false'; здесь мы ставим ее в 'true' для получения оценок вероятности. Мы устанавливаем случайное состояние в '0' для перемешивания данных и получения вероятностей.
Начните с создания массива классификаторов. Вы будете постепенно добавлять в этот массив по мере тестирования.
-
Начните с Linear SVC:
C = 10 # Создайте различные классификаторы. 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 принадлежит к семейству методов «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 Machine для задач классификации и регрессии. SVM «отображает тренировочные примеры в точки в пространстве» для максимизации расстояния между двумя категориями. Последующие данные отображаются в это пространство, чтобы предсказать их категорию.
Попробуем добиться немного лучшей точности с помощью классификатора 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
✅ Узнайте об Ансамблевых классификаторах
Этот метод машинного обучения «комбинирует предсказания нескольких базовых оценщиков», чтобы улучшить качество модели. В нашем примере мы использовали случайные деревья и AdaBoost.
-
Random Forest, метод усреднения, строит «лес» из «решающих деревьев», наполненный случайностью, чтобы избежать переобучения. Параметр n_estimators установлен на количество деревьев.
-
AdaBoost подгоняет классификатор к набору данных, а затем снова подгоняет копии этого классификатора к тому же набору данных. Он фокусируется на весах неправильно классифицированных объектов и корректирует подгонку для следующего классификатора, чтобы исправить ошибки.
Каждая из этих техник имеет множество параметров, которые вы можете настроить. Изучите параметры по умолчанию каждого и подумайте, что изменение этих параметров будет означать для качества модели.
В этих уроках много терминов, поэтому найдите минуту, чтобы просмотреть этот список полезной терминологии!
Отказ от ответственности:
Этот документ был переведен с использованием сервиса машинного перевода Co-op Translator. Несмотря на наши усилия по обеспечению точности, пожалуйста, имейте в виду, что автоматический перевод может содержать ошибки или неточности. Оригинальный документ на исходном языке следует считать авторитетным источником. Для критически важной информации рекомендуется профессиональный человеческий перевод. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования этого перевода.
