W tej drugiej lekcji klasyfikacji poznasz więcej sposobów klasyfikacji danych numerycznych. Dowiesz się również o konsekwencjach wyboru jednego klasyfikatora zamiast drugiego.
Zakładamy, że ukończyłeś poprzednie lekcje i masz wyczyszczony zestaw danych w folderze data o nazwie cleaned_cuisines.csv w katalogu głównym tego folderu z 4 lekcjami.
Wczytaliśmy do twojego pliku notebook.ipynb wyczyszczony zestaw danych i podzieliliśmy go na ramki danych X i y, gotowe do procesu budowania modelu.
Wcześniej poznałeś różne opcje klasyfikacji danych za pomocą ściągawki Microsoftu. Scikit-learn oferuje podobną, ale bardziej szczegółową ściągawkę, która może jeszcze bardziej zawęzić wybór twoich estymatorów (inna nazwa dla klasyfikatorów):
Wskazówka: odwiedź tę mapę online i klikaj po ścieżce, aby czytać dokumentację.
Ta mapa jest bardzo pomocna, gdy masz jasne zrozumienie swoich danych, ponieważ możesz 'wędrować' jej ścieżkami do decyzji:
- Mamy >50 próbek
- Chcemy przewidzieć kategorię
- Mamy dane oznaczone
- Mamy mniej niż 100 tysięcy próbek
- ✨ Możemy wybrać Linear SVC
- Jeśli to nie zadziała, ponieważ mamy dane numeryczne
- Możemy spróbować ✨ KNeighbors Classifier
- Jeśli to nie zadziała, spróbuj ✨ SVC i ✨ Ensemble Classifiers
- Możemy spróbować ✨ KNeighbors Classifier
To bardzo pomocna ścieżka do podążania.
Podążając tą ścieżką, powinniśmy zacząć od zaimportowania kilku potrzebnych bibliotek.
-
Zaimportuj potrzebne biblioteki:
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
-
Podziel dane na treningowe i testowe:
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) jest techniką z rodziny maszyn wektorów nośnych (ang. Support-Vector machines), o których dowiesz się więcej poniżej. W tej metodzie możesz wybrać 'jądro' decydujące, jak grupować etykiety. Parametr 'C' odnosi się do 'regularizacji', która reguluje wpływ parametrów. Jądro może być jednym z wielu; tutaj ustawiamy je na 'linear', aby wykorzystać liniowy SVC. Parametr probability domyślnie jest 'false'; tutaj ustawiamy na 'true', aby zebrać oszacowania prawdopodobieństwa. Ustawiamy stan losowy na '0', aby przetasować dane, co pozwala otrzymać prawdopodobieństwa.
Zacznij od stworzenia tablicy klasyfikatorów. Będziesz ją stopniowo uzupełniać podczas testów.
-
Zacznij od Linear SVC:
C = 10 # Utwórz różne klasyfikatory. classifiers = { 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) }
-
Naucz model przy użyciu Linear SVC i wydrukuj raport:
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))
Wynik jest całkiem dobry:
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 należy do rodziny metod "sąsiadów", które można stosować zarówno w uczeniu nadzorowanym, jak i nienadzorowanym. W tej metodzie tworzona jest zdefiniowana liczba punktów, a dane są grupowane wokół tych punktów, tak aby można było przewidzieć uogólnione etykiety dla danych.
Poprzedni klasyfikator działał dobrze z danymi, ale może uzyskamy lepszą dokładność. Spróbuj klasyfikatora K-Neighbors.
-
Dodaj linię do tablicy klasyfikatorów (dodaj przecinek po elemencie Linear SVC):
'KNN classifier': KNeighborsClassifier(C),
Wynik jest nieco gorszy:
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✅ Dowiedz się więcej o K-Neighbors
Klasyfikatory support-vector są częścią rodziny metod Support-Vector Machine stosowanych do zadań klasyfikacji i regresji. SVM „mapuje przykłady treningowe na punkty w przestrzeni”, aby zmaksymalizować odległość między dwiema kategoriami. Kolejne dane są mapowane do tej przestrzeni, aby można było przewidzieć ich kategorię.
Spróbujmy uzyskać nieco lepszą dokładność za pomocą Support Vector Classifier.
-
Dodaj przecinek po elemencie K-Neighbors, a następnie dodaj tę linię:
'SVC': SVC(),
Wynik jest całkiem dobry!
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✅ Dowiedz się więcej o Support-Vectors
Podążmy ścieżką aż do końca, chociaż poprzedni test był całkiem dobry. Spróbujmy kilku 'klasyfikatorów zespołowych', w szczególności Random Forest i AdaBoost:
'RFST': RandomForestClassifier(n_estimators=100),
'ADA': AdaBoostClassifier(n_estimators=100)Wynik jest bardzo dobry, szczególnie dla 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
✅ Dowiedz się o Klasyfikatorach zespołowych
Ta metoda uczenia maszynowego „łączy predykcje kilku bazowych estymatorów”, aby poprawić jakość modelu. W naszym przykładzie użyliśmy drzew losowych i AdaBoost.
-
Random Forest, metoda uśredniająca, buduje 'las' 'drzew decyzyjnych' z elementem losowości, aby uniknąć przeuczenia. Parametr n_estimators określa liczbę drzew.
-
AdaBoost dopasowuje klasyfikator do zestawu danych, a następnie dopasowuje kopie tego klasyfikatora do tego samego zestawu. Skupia się na wagach błędnie sklasyfikowanych elementów i dostosowuje dopasowanie dla kolejnego klasyfikatora, aby to poprawić.
Każda z tych technik ma dużą liczbę parametrów, które możesz dostosować. Zbadaj domyślne parametry każdego z nich i zastanów się, co zmiana tych parametrów mogłaby oznaczać dla jakości modelu.
W tych lekcjach jest dużo żargonu, więc poświęć chwilę na przegląd tej listy przydatnej terminologii!
Zastrzeżenie:
Ten dokument został przetłumaczony przy użyciu automatycznej usługi tłumaczeniowej Co-op Translator. Mimo że dążymy do dokładności, prosimy mieć na uwadze, że tłumaczenia automatyczne mogą zawierać błędy lub nieścisłości. Oryginalny dokument w języku macierzystym należy uznawać za źródło autorytatywne. W przypadku krytycznych informacji zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z korzystania z tego tłumaczenia.
