У овом другом часу о класификацији, истражићете више начина за класификацију нумеричких података. Такође ћете научити које су последице избора једног класификатора уместо другог.
Претпоставка је да сте завршили претходне лекције и да имате очишћени скуп података у вашем фолдеру data под именом cleaned_cuisines.csv у корену овог фолдера са 4 лекције.
Учитао сам ваш фајл notebook.ipynb са очишћеним скупом података и поделио га у X и y dataframe-ове, спремне за процес прављења модела.
Претходно сте учили о разним опцијама при класификацији података помоћу Microsoft-овог сажетка. Scikit-learn нуди сличан, али детаљнији сажетак који даље помаже да се сузи избор естиматора (други израз за класификаторе):
Савет: посетите ову мапу онлајн и кликните на пут да бисте прочитали документацију.
Ова мапа је веома корисна када имате јасан увид у своје податке, јер можете „ходати“ по њеним стазама до одлуке:
- Имамо >50 узорака
- Желимо да предвидимо категорију
- Имамо означене податке
- Имамо мање од 100K узорака
- ✨ Можемо изабрати Linear 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 машина за машинско учење (сазнајте више о њима испод). У овој методи можете одабрати „кернел“ да бисте одлучили како да кластерирате етикете. Параметар „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
Хајде да пратимо пут до самог краја, иако је претходни тест био врло добар. Испробајмо неке '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 прилагођава класификатор скупу података, а затим прилагођава копије тог класификатора на исти скуп података. Фокусира се на тежине неправилно класификованих предмета и подешава прилагођавање за следећи класификатор да исправи грешке.
Свака од ових техника има велики број параметара које можете подешавати. Истражите подразумеване параметре сваке и размислите шта би подешавање тих параметара значило за квалитет модела.
У овим лекцијама има доста терминологије, зато одвојите минут да прегледате овој списак корисних појмова!
Одрицање од одговорности:
Овај документ је преведен коришћењем сервиса за превођење уз помоћ вештачке интелигенције Co-op Translator. Иако се трудимо да превод буде што прецизнији, молимо имајте у виду да аутоматизовани преводи могу садржати грешке или нетачности. Изворни документ на његовом оригиналном језику треба сматрати коначним и ауторитативним извором. За критичне информације препоручује се стручно људско превођење. Не преузимамо одговорност за било какве неспоразуме или нетачне интерпретације настале употребом овог превода.
