В този втори урок за класификация ще изследвате още начини за класифициране на числови данни. Също така ще научите за последствията от избора на един класификатор пред друг.
Предполагаме, че сте завършили предишните уроци и имате почистен набор от данни в папката data, наречен cleaned_cuisines.csv в основната папка на този курс от 4 урока.
Заредили сме вашия файл notebook.ipynb с почистения набор от данни и го разделихме на X и y датафреймове, готови за процеса на изграждане на модел.
По-рано научихте за различните опции, които имате при класифициране на данни, използвайки чийтшита на Microsoft. Scikit-learn предлага подобен, но по-подробен чийтшит, който може да помогне допълнително да стесните избора си на оценители (друг термин за класификатори):
Съвет: посетете тази карта онлайн и кликнете по пътеката, за да прочетете документация.
Тази карта е много полезна след като имате ясна представа за данните си, тъй като можете да „преминавате“ по пътищата ѝ до конкретно решение:
- Имаме >50 проби
- Искаме да предскажем категория
- Имаме етикетирани данни
- Имаме по-малко от 100К проби
- ✨ Можем да изберем Линеен SVC
- Ако това не сработи, тъй като имаме числови данни
- Можем да опитаме ✨ KNeighbors класификатор
- Ако и това не сработи, опитайте ✨ SVC и ✨ Ensemble класификатори
- Можем да опитаме ✨ KNeighbors класификатор
Това е много полезна следваща стъпка.
Следвайки този път, трябва да започнем с въвеждането на някои библиотеки за използване.
-
Импортирайте необходимите библиотеки:
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 машини за машинно обучение (научете повече за тях по-долу). В този метод можете да изберете 'kernel' (ядро), за да решите как да се групират етикетите. Параметърът 'C' се отнася до 'регуляризация', която регулира влиянието на параметрите. Ядрото може да бъде едно от няколко; тук го задаваме на 'linear', за да използваме линеен SVC. Вероятността по подразбиране е 'false'; тук я задаваме на 'true', за да събираме оценка на вероятности. Задаваме random state на '0', за да разбъркаме данните и да получим вероятности.
Започнете с създаване на масив от класификатори. Постепенно ще добавяте към този масив, докато тестваме.
-
Започнете с Линеен SVC:
C = 10 # Създайте различни класификатори. classifiers = { 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) }
-
Обучете своя модел с Линеен 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 класификатор.
-
Добавете ред към масива си с класификатори (добавете запетая след линейния 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
Нека следваме пътя до самия край, въпреки че предишният тест беше доста добър. Нека пробваме някои '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 класификатори
Този метод на машинно обучение "комбинира предсказанията на няколко базови оценителя", за да подобри качеството на модела. В нашия пример използвахме Random Trees и AdaBoost.
-
Random Forest, метод за усредняване, изгражда 'гора' от 'решаващи дървета', които са изпълнени със случайност, за да се избегне пренастройване. Параметърът n_estimators е зададен на броя на дърветата.
-
AdaBoost приспособява класификатор към набор от данни и след това приспособява копия на този класификатор към същия набор от данни. Той се фокусира върху тежестите на неправилно класифицираните елементи и коригира приспособяването за следващия класификатор, за да ги коригира.
Всяка от тези техники има голям брой параметри, които можете да настроите. Изследвайте стандартните параметри на всяка и помислете как настройването на тези параметри би повлияло на качеството на модела.
Има много жаргон в тези уроци, затова отделете минутка да прегледате този списък с полезни термини!
Отказ от отговорност: Този документ е преведен с помощта на AI преводаческа услуга Co-op Translator. Въпреки че се стремим към точност, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или погрешни тълкувания, произтичащи от използването на този превод.
