Класифікація за допомогою sklearn
Розглянемо, як розв’язувати задачі класифікації з використанням бібліотеки sklearn. На двох практичних прикладах - текстові дані та класи з сильним дисбалансом - розберемо повний підхід до побудови, навчання й коректної оцінки моделей.
Код і результати
Опублікована версія після Merge. Результати збережені автором; код на цій сторінці не запускається.
#Iris Species Classifier Порівняння класичних алгоритмів машинного навчання (Random Forest, Decision Tree, Logistic Regression, SVM) на задачі класифікації квітів ірису за ознаками чашолистка та пелюстки. Посилання на сам проект в середовищі Google Colab залишаю посилання тут для того щоб ви змогли власноруч запустити кожен рядок коду https://colab.research.google.com/drive/1Z_4d2UYIheQvA2kyKLLVaneMslwOA88F#scrollTo=EG9zqYDWsg6F
#Опис проекту Проект демонструє повний цикл вирішення задачі класифікації на класичному датасеті Iris:
підготовка та розбиття даних на тренувальні / тестові вибірки; навчання декількох моделей класифікації; нормалізація ознак (StandardScaler) для моделей, чутливих до масштабу; оцінка якості моделей за метриками Accuracy та F1-score.
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score, f1_score
iris = datasets.load_iris()
print(iris.feature_names)
# ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
print(iris.target_names)
# ['setosa' 'versicolor' 'virginica']['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] ['setosa' 'versicolor' 'virginica']
X = iris.data # Ознаки: довжина/ширина чашолистка і пелюстки
y = iris.target # Цільова змінна: класи 0, 1, 2
# Розділення на тренувальні та тестові дані
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)model_rfc = RandomForestClassifier()
model_rfc.fit(X_train, y_train) # Навчання
y_pred = model_rfc.predict(X_test) # Прогноз
accuracy_rfc = accuracy_score(y_test, y_pred)
f1_rfc = f1_score(y_test, y_pred, average='macro')
print(f"Accuracy: {accuracy_rfc}")
print(f"F1-score: {f1_rfc}")Accuracy: 1.0 F1-score: 1.0
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)dtc = DecisionTreeClassifier()
dtc.fit(X_train_scaled, y_train)
y_pred_dtc = dtc.predict(X_test_scaled)
accuracy_dtc = accuracy_score(y_test, y_pred_dtc)
f1_dtc = f1_score(y_test, y_pred_dtc, average='macro')
print(f"Accuracy: {accuracy_dtc}")
print(f"F1-score: {f1_dtc}")Accuracy: 1.0 F1-score: 1.0
model_log = LogisticRegression()
model_log.fit(X_train_scaled, y_train) # Навчання
y_pred_log = model_log.predict(X_test_scaled) # Прогноз класу
y_pred_proba_log = model_log.predict_proba(X_test_scaled) # Ймовірності по класах
accuracy_log = accuracy_score(y_test, y_pred_log)
f1_log = f1_score(y_test, y_pred_log, average='macro')
print(f"Accuracy: {accuracy_log}")
print(f"F1-score: {f1_log}")Accuracy: 1.0 F1-score: 1.0
model_svm = SVC(kernel='poly')
model_svm.fit(X_train_scaled, y_train) # Навчання
y_pred_svm = model_svm.predict(X_test_scaled) # Прогноз
accuracy_svm = accuracy_score(y_test, y_pred_svm)
f1_svm = f1_score(y_test, y_pred_svm, average='macro')
print(f"Accuracy: {accuracy_svm}")
print(f"F1-score: {f1_svm}")Accuracy: 0.9666666666666667 F1-score: 0.9665831244778612
Рев’ю спільноти
Прийнято. Гарні метрики. Добре, що використали інтеграцію із Google Colab. Approved.
