Початок роботи з Scikit-learn для класифікації в машинному навчанні

Початок роботи з Scikit-learn для класифікації в машинному навчанні

Вихідний вузол: 1780638
Початок роботи з Scikit-learn для класифікації в машинному навчанні
Зображення редактора
 

Scikit-learn — одна з найбільш часто використовуваних бібліотек машинного навчання, побудована на Python. Його популярність пояснюється простою та послідовною структурою коду, зручною для розробників-початківців. Крім того, доступний високий рівень підтримки, а також гнучкість інтеграції функцій сторонніх розробників, що робить бібліотеку надійною та придатною для виробництва. Бібліотека містить кілька моделей машинного навчання для класифікації, регресії та кластеризації. У цьому підручнику ми розглянемо проблему багатокласової класифікації за допомогою різних алгоритмів. Давайте зануримося безпосередньо в це та створимо наші моделі scikit-learn.

pip install scikit-learn

Ми будемо використовувати набір даних «Wine», доступний у модулі наборів даних scikit-learn. Цей набір даних складається із 178 зразків і загалом 3 класів. Набір даних уже попередньо оброблено та перетворено на вектори ознак, тому ми можемо безпосередньо використовувати його для навчання наших моделей.

from sklearn.datasets import load_wine X, y = load_wine(return_X_y=True)

Ми збережемо 67% даних для навчання, а решта 33% – для тестування.

from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.33, random_state=42
)

 

Тепер ми поекспериментуємо з 5 різними моделями різної складності та оцінимо їхні результати на нашому наборі даних.

model_lr = LogisticRegression()
model_lr.fit(X_train, y_train)
y_pred_lr = model_lr.predict(X_test) print("Accuracy Score: ", accuracy_score(y_pred_lr, y_test))
print(classification_report(y_pred_lr, y_test))

 

Вихід

Accuracy Score: 0.9830508474576272 precision recall f1-score support 0 1.00 0.95 0.98 21 1 0.96 1.00 0.98 23 2 1.00 1.00 1.00 15 accuracy 0.98 59 macro avg 0.99 0.98 0.98 59
weighted avg 0.98 0.98 0.98 59
model_knn = KNeighborsClassifier(n_neighbors=1)
model_knn.fit(X_train, y_train)
y_pred_knn = model_knn.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_knn, y_test))
print(classification_report(y_pred_knn, y_test))

 

Вихід 

Accuracy Score: 0.7796610169491526 precision recall f1-score support 0 0.90 0.78 0.84 23 1 0.75 0.82 0.78 22 2 0.67 0.71 0.69 14 accuracy 0.78 59 macro avg 0.77 0.77 0.77 59
weighted avg 0.79 0.78 0.78 59

 

При зміні параметра 'n_neighbors=2' ми спостерігаємо зниження значення точності. Таким чином, це показує, що дані досить прості та забезпечують краще навчання з одним сусідом, який слід враховувати. 

Вихід 

Accuracy Score: 0.6949152542372882 precision recall f1-score support 0 0.90 0.72 0.80 25 1 0.75 0.69 0.72 26 2 0.33 0.62 0.43 8 accuracy 0.69 59 macro avg 0.66 0.68 0.65 59
weighted avg 0.76 0.69 0.72 59
from sklearn.naive_bayes import GaussianNB model_nb = GaussianNB()
model_nb.fit(X_train, y_train)
y_pred_nb = model_nb.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_nb, y_test))
print(classification_report(y_pred_nb, y_test))

 

Вихід

Accuracy Score: 1.0 precision recall f1-score support 0 1.00 1.00 1.00 20 1 1.00 1.00 1.00 24 2 1.00 1.00 1.00 15 accuracy 1.00 59 macro avg 1.00 1.00 1.00 59
weighted avg 1.00 1.00 1.00 59
from sklearn.tree import DecisionTreeClassifier model_dtclassifier = DecisionTreeClassifier()
model_dtclassifier.fit(X_train, y_train)
y_pred_dtclassifier = model_dtclassifier.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_dtclassifier, y_test))
print(classification_report(y_pred_dtclassifier, y_test))

 

Вихід

Accuracy Score: 0.9661016949152542 precision recall f1-score support 0 0.95 0.95 0.95 20 1 1.00 0.96 0.98 25 2 0.93 1.00 0.97 14 accuracy 0.97 59 macro avg 0.96 0.97 0.97 59
weighted avg 0.97 0.97 0.97 59
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV def get_best_parameters(): params = { "n_estimators": [10, 50, 100], "max_features": ["auto", "sqrt", "log2"], "max_depth": [5, 10, 20, 50], "min_samples_split": [2, 4, 6], "min_samples_leaf": [2, 4, 6], "bootstrap": [True, False], } model_rfclassifier = RandomForestClassifier(random_state=42) rf_randomsearch = RandomizedSearchCV( estimator=model_rfclassifier, param_distributions=params, n_iter=5, cv=3, verbose=2, random_state=42, ) rf_randomsearch.fit(X_train, y_train) best_parameters = rf_randomsearch.best_params_ print("Best Parameters:", best_parameters) return best_parameters parameters_rfclassifier = get_best_parameters() model_rfclassifier = RandomForestClassifier( **parameters_rfclassifier, random_state=42
) model_rfclassifier.fit(X_train, y_train) y_pred_rfclassifier = model_rfclassifier.predict(X_test) print("Accuracy Score:", accuracy_score(y_pred_rfclassifier, y_test))
print(classification_report(y_pred_rfclassifier, y_test))

 

Вихід


Best Parameters: {'n_estimators': 100, 'min_samples_split': 6, 'min_samples_leaf': 4, 'max_features': 'log2', 'max_depth': 5, 'bootstrap': True}
Accuracy Score: 0.9830508474576272 precision recall f1-score support 0 1.00 0.95 0.98 21 1 0.96 1.00 0.98 23 2 1.00 1.00 1.00 15 accuracy 0.98 59 macro avg 0.99 0.98 0.98 59
weighted avg 0.98 0.98 0.98 59

 

У цьому алгоритмі ми виконали деяке налаштування гіперпараметрів для досягнення найкращої точності. Ми визначили сітку параметрів, що складається з кількох значень для вибору для кожного параметра. Крім того, ми використали алгоритм Randomized Search CV для пошуку найкращого простору параметрів для моделі. Нарешті ми передаємо отримані параметри в класифікатор і навчаємо модель. 

моделі Точність Спостереження
Логістична регресія 98.30% Досягає високої точності. Модель здатна добре узагальнювати тестовий набір даних.
K-найближчі сусіди 77.96% Алгоритм не може добре навчитися подання даних.
Наївні Баєси 100% Модель є менш складною, отже, вона переналаштовує дані для отримання абсолютної точності.
Класифікатор дерева рішень 96.61% Досягає гідної точності.
Класифікатор випадкових лісів 98.30% Будучи підходом на основі ансамблю, він працює краще, ніж дерево рішень. Виконання налаштування гіперпараметрів дозволяє досягти точності, подібної до логістичної регресії.

У цьому посібнику ми дізналися, як почати створювати та навчати моделі машинного навчання в scikit-learn. Ми впровадили й оцінили кілька алгоритмів, щоб отримати базове уявлення про їхню продуктивність. Завжди можна застосувати передові стратегії для розробки функцій, налаштування гіперпараметрів або навчання для покращення продуктивності. Щоб дізнатися більше про функції, які пропонує scikit-learn, перейдіть до офіційної документації - Вступ до машинного навчання за допомогою scikit-learn, Машинне навчання на Python із scikit-learn.

 
 
Єша Шастрі є пристрасним розробником штучного інтелекту та письменником, який отримує ступінь магістра з машинного навчання в Університеті Монреаля. Єша зацікавлена ​​в дослідженні відповідальних методів штучного інтелекту для вирішення проблем, які приносять користь суспільству, і ділиться своїми знаннями з громадою.
 

Часова мітка:

Більше від KDnuggets