Начало работы с 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.

 
 
Йеша Шастри — страстный разработчик искусственного интеллекта и писатель, получающий степень магистра машинного обучения в Университете Монреаля. Йеша заинтересована в изучении ответственных методов искусственного интеллекта для решения проблем, которые приносят пользу обществу, и делится своими знаниями с сообществом.
 

Отметка времени:

Больше от КДнаггетс