You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/sr/4-Classification/3-Classifiers-2/README.md

242 lines
14 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Класификатори кухиња 2
У овом другом часу о класификацији, истражићете више начина за класификацију нумеричких података. Такође ћете научити које су последице избора једног класификатора уместо другог.
## [Квиз пре предавања](https://ff-quizzes.netlify.app/en/ml/)
### Предуслови
Претпоставка је да сте завршили претходне лекције и да имате очишћени скуп података у вашем фолдеру `data` под именом _cleaned_cuisines.csv_ у корену овог фолдера са 4 лекције.
### Припрема
Учитао сам ваш фајл _notebook.ipynb_ са очишћеним скупом података и поделио га у X и y dataframe-ове, спремне за процес прављења модела.
## Мапа класификације
Претходно сте учили о разним опцијама при класификацији података помоћу Microsoft-овог сажетка. Scikit-learn нуди сличан, али детаљнији сажетак који даље помаже да се сузи избор естиматора (други израз за класификаторе):
![ML Map from Scikit-learn](../../../../translated_images/sr/map.e963a6a51349425a.webp)
> Савет: [посетите ову мапу онлајн](https://scikit-learn.org/stable/tutorial/machine_learning_map/) и кликните на пут да бисте прочитали документацију.
### План
Ова мапа је веома корисна када имате јасан увид у своје податке, јер можете „ходати“ по њеним стазама до одлуке:
- Имамо >50 узорака
- Желимо да предвидимо категорију
- Имамо означене податке
- Имамо мање од 100K узорака
- ✨ Можемо изабрати Linear SVC
- Ако то не функционише, пошто имамо нумеричке податке
- Можемо пробати ✨ KNeighbors класификатор
- Ако то не ради, пробајте ✨ SVC и ✨ Ensemble класификаторе
Ово је врло користан пут који треба следити.
## Вежба - подели податке
Пратећи овај пут, требало би да почнемо тако што ћемо импортовати неке библиотеке за коришћење.
1. Импортујте потребне библиотеке:
```python
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
```
1. Поделите своје тренирајуће и тест податке:
```python
X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)
```
## Linear SVC класификатор
Support-Vector clustering (SVC) припада породици Support-Vector машина за машинско учење (сазнајте више о њима испод). У овој методи можете одабрати „кернел“ да бисте одлучили како да кластерирате етикете. Параметар „C“ односи се на „регуларизацију“ која регулише утицај параметара. Кернел може бити један од [више](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); овде смо га подесили на „linear“ да бисмо искористили линеарни SVC. Веројатност је подразумевано „false“; овде смо је подесили на „true“ да бисмо сакупили процене вероватноће. Случајно стање подешено је на '0' како бисмо „мешали“ податке да добијемо вероватноће.
### Вежба - примени линеарни SVC
Почните тако што ћете креирати низ класификатора. Постепено ћете додавати у овај низ како тестирањем будемо напредовали.
1. Почните са Linear SVC:
```python
C = 10
# Направите различите класификаторе.
classifiers = {
'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
}
```
2. Тренирајте свој модел користећи Linear SVC и испишите извештај:
```python
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))
```
Резултат је прилично добар:
```output
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 класификатор.
1. Додајте један ред у свој низ класификатора (додајте зарез након Linear SVC ставке):
```python
'KNN classifier': KNeighborsClassifier(C),
```
Резултат је нешто лошији:
```output
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](https://scikit-learn.org/stable/modules/neighbors.html#neighbors)
## Support Vector класификатор
Support-Vector класификатори припадају породици [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) машинског учења која се користи за задатке класификације и регресије. SVM-ови „пројектују тренинг примере у простор“ како би максимизовали растојање између две категорије. Накнадни подаци се пројектују у овај простор тако да се може предвидети њихова категорија.
### Вежба - примени Support Vector класификатор
Хајде да пробамо мало бољу прецизност са Support Vector класификатором.
1. Додајте зарез након K-Neighbors ставке, а затим додајте овај ред:
```python
'SVC': SVC(),
```
Резултат је веома добар!
```output
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](https://scikit-learn.org/stable/modules/svm.html#svm)
## Ensemble класификатори
Хајде да пратимо пут до самог краја, иако је претходни тест био врло добар. Испробајмо неке 'Ensemble класификаторе', конкретно Random Forest и AdaBoost:
```python
'RFST': RandomForestClassifier(n_estimators=100),
'ADA': AdaBoostClassifier(n_estimators=100)
```
Резултат је врло добар, посебно за Random Forest:
```output
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 класификаторима](https://scikit-learn.org/stable/modules/ensemble.html)
Ова метода машинског учења „спаја предвиђања неколико базних естиматора“ да побољша квалитет модела. У нашем примеру користили смо Random Trees и AdaBoost.
- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), метода просека, гради „шуму“ „одлучујућих стабала“ која су утицана случајношћу како би се избегло претеривање. Параметар n_estimators подешен је на број стабала.
- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) прилагођава класификатор скупу података, а затим прилагођава копије тог класификатора на исти скуп података. Фокусира се на тежине неправилно класификованих предмета и подешава прилагођавање за следећи класификатор да исправи грешке.
---
## 🚀Изазов
Свака од ових техника има велики број параметара које можете подешавати. Истражите подразумеване параметре сваке и размислите шта би подешавање тих параметара значило за квалитет модела.
## [Квиз након предавања](https://ff-quizzes.netlify.app/en/ml/)
## Преглед и самостално учење
У овим лекцијама има доста терминологије, зато одвојите минут да прегледате [овој списак](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) корисних појмова!
## Домашћи задатак
[Играње са параметрима](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Одрицање од одговорности**:
Овај документ је преведен коришћењем сервиса за превођење уз помоћ вештачке интелигенције [Co-op Translator](https://github.com/Azure/co-op-translator). Иако се трудимо да превод буде што прецизнији, молимо имајте у виду да аутоматизовани преводи могу садржати грешке или нетачности. Изворни документ на његовом оригиналном језику треба сматрати коначним и ауторитативним извором. За критичне информације препоручује се стручно људско превођење. Не преузимамо одговорност за било какве неспоразуме или нетачне интерпретације настале употребом овог превода.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->