|
2 weeks ago | |
---|---|---|
.. | ||
solution | 2 weeks ago | |
README.md | 2 weeks ago | |
assignment.md | 2 weeks ago | |
notebook.ipynb | 2 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
Support-Vector clustering (SVC) е част от семейството на Support-Vector machines техники за машинно обучение (научете повече за тях по-долу). В този метод можете да изберете „ядро“, за да решите как да класифицирате етикетите. Параметърът 'C' се отнася до 'регуларизация', която регулира влиянието на параметрите. Ядрото може да бъде едно от няколко; тук го задаваме на 'linear', за да гарантираме, че използваме Linear SVC. Вероятността по подразбиране е 'false'; тук я задаваме на 'true', за да съберем оценки за вероятност. Задаваме случайното състояние на '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 е част от семейството "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 методи за машинно обучение, които се използват за задачи по класификация и регресия. SVMs „картират тренировъчните примери към точки в пространството“, за да максимизират разстоянието между две категории. Последващите данни се картографират в това пространство, за да се предвиди тяхната категория.
Упражнение - приложете класификатор 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
Нека следваме пътя до самия край, въпреки че предишният тест беше доста добър. Нека опитаме някои 'Ensemble Classifiers', конкретно 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 напасва класификатор към набор от данни и след това напасва копия на този класификатор към същия набор от данни. Той се фокусира върху теглата на неправилно класифицираните елементи и коригира напасването за следващия класификатор, за да ги поправи.
🚀Предизвикателство
Всеки от тези техники има голям брой параметри, които можете да настроите. Проучете стандартните параметри на всеки и помислете какво би означавало настройването на тези параметри за качеството на модела.
Тест след лекцията
Преглед и самостоятелно обучение
Има много жаргон в тези уроци, така че отделете минута, за да прегледате този списък с полезна терминология!
Задание
Отказ от отговорност:
Този документ е преведен с помощта на AI услуга за превод Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод.