TelegramПерейти в канал
Ярослав Стецюк
Merged · Machine Learning

Класифікація за допомогою sklearn

Розглянемо, як розв’язувати задачі класифікації з використанням бібліотеки sklearn. На двох практичних прикладах - текстові дані та класи з сильним дисбалансом - розберемо повний підхід до побудови, навчання й коректної оцінки моделей.

Код і результати

Опублікована версія після Merge. Результати збережені автором; код на цій сторінці не запускається.

Пояснення · 1

#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.

Python · 2
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()
Python · 3
print(iris.feature_names)
# ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']

print(iris.target_names)
# ['setosa' 'versicolor' 'virginica']
Результат, збережений автором у Colab
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
['setosa' 'versicolor' 'virginica']
Python · 4
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
)
Python · 5
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}")
Результат, збережений автором у Colab
Accuracy: 1.0
F1-score: 1.0
Python · 6
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
Python · 7
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}")
Результат, збережений автором у Colab
Accuracy: 1.0
F1-score: 1.0
Python · 8
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}")
Результат, збережений автором у Colab
Accuracy: 1.0
F1-score: 1.0
Python · 9
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}")
Результат, збережений автором у Colab
Accuracy: 0.9666666666666667
F1-score: 0.9665831244778612

Рев’ю спільноти

Anar LavrenovApprove

Прийнято. Гарні метрики. Добре, що використали інтеграцію із Google Colab. Approved.