Полная реализация…
Запуск алгоритмов машинного обучения состоит из нескольких этапов, поскольку он включает в себя последовательность задач, включая предварительную обработку, извлечение функций, подгонку модели, производительность и проверку. Конвейер - это не что иное, как метод, с помощью которого мы создаем линейную последовательность этапов подготовки данных и моделирования для автоматизации рабочих процессов машинного обучения. Автоматизированный конвейер состоит из компонентов и того, как эти компоненты могут работать вместе для создания и обновления модели машинного обучения. В этом посте мы собираемся создать конвейер, найти лучший скаляр, оценки и посмотреть оценки точности различных алгоритмов машинного обучения. Мы будем использовать набор данных Mines Vs Rocks от Kaggle.
Импортировать необходимые библиотеки
import pandas as pd import numpy as np from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.neighbors import KNeighborsClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.pipeline import Pipeline from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import MinMaxScaler from sklearn.preprocessing import RobustScaler from sklearn.decomposition import PCA
Загрузите наборы данных
data_df=pd.read_csv("Path to CSV file")
Отбросьте нулевые значения
data_df.dropna()
Данные дисплея
data_df.head()
Рассчитайте количество значений для каждой категории -
data_df['R'].value_counts()
Выход -
M 111 R 96 Name: R, dtype: int64
Найдите уникальные ценности
data_df['R'].unique()
Выход -
array(['R', 'M'], dtype=object)
Разделите данные на набор для обучения и тестирования -
x = data_df.drop(['R'], axis=1) y = data_df['R'] trainX, testX, trainY, testY = train_test_split(x, y, test_size = 0.2)
Создайте простой конвейер
pipeline_lr = Pipeline([ ('ss', StandardScaler()), ('lr', LogisticRegression()) ])
Подобрать и оценить трубопровод
pipeline_lr.fit(trainX, trainY)
Выход -
Pipeline(steps=[('ss', StandardScaler()), ('lr', LogisticRegression())])
Предсказывать -
y_predict = pipeline_lr.predict(testX) print('Test Accuracy Score: {:.4f}'.format(accuracy_score(testY, y_predict)))
Выход -
Test Accuracy Score: 0.7381
Лучший скейлер
- Создайте конвейер
pipeline_lr_mm = Pipeline([ ('mms', MinMaxScaler()), ('lr', LogisticRegression()) ]) pipeline_lr_r = Pipeline([ ('rs', RobustScaler()), ('lr', LogisticRegression()) ]) pipeline_lr_w = Pipeline([ ('lr', LogisticRegression()) ]) pipeline_lr_s = Pipeline([ ('ss', StandardScaler()), ('lr', LogisticRegression()) ])
- Создайте словарь конвейера
pipeline_dict = { 0: 'Logistic Regression without scaler', 1: 'Logistic Regression with MinMaxScaler', 2: 'Logistic Regression with RobustScaler', 3: 'Logistic Regression with StandardScaler', } pipeline_dict
Выход -
{ 0: 'Logistic Regression without scaler', 1: 'Logistic Regression with MinMaxScaler', 2: 'Logistic Regression with RobustScaler', 3: 'Logistic Regression with StandardScaler'}
- Создайте список конвейеров
pipelines = [pipeline_lr_w, pipeline_lr_mm, pipeline_lr_r, pipeline_lr_s]
- Установите трубопровод
for p in pipelines: p.fit(trainX, trainY)
- Оцените конвейер
for i, val in enumerate(pipelines): print('%s pipeline Test Accuracy Score: %.4f' % (pipeline_dict[i], accuracy_score(testY, val.predict(testX))))
Выход -
Logistic Regression without scaler pipeline Test Accuracy Score: 0.6667 Logistic Regression with StandardScaler pipeline Test Accuracy Score: 0.7381 Logistic Regression with MinMaxScaler pipeline Test Accuracy Score: 0.8095 Logistic Regression with RobustScaler pipeline Test Accuracy Score: 0.7381
Использование функции .score () -
for i, val in enumerate(pipelines): print('%s pipeline Test Accuracy Score: %.4f' % (pipeline_dict[i], val.score(testX, testY)))
Выход -
Logistic Regression wo scaler pipeline Test Accuracy Score: 0.6667 Logistic Regression with StandardScaler pipeline Test Accuracy Score: 0.7381 Logistic Regression with MinMaxScaler pipeline Test Accuracy Score: 0.8095 Logistic Regression with RobustScaler pipeline Test Accuracy Score: 0.7381
Преобразуйте его в dataFrame и покажите лучшую модель -
l = [] for i, val in enumerate(pipelines): l.append(accuracy_score(testY, val.predict(testX))) result_df = pd.DataFrame(list(pipeline_dict.items()),columns = ['Index','Estimator']) data_df['Test_Accuracy'] = l data_df
Лучшая модель -
b_model = result_df.sort_values(by='Test_Accuracy', ascending=False) b_model
Выход -
Одна из лучших статей, которые я прочитал для введения в конвейеры в машинном обучении: Что такое конвейер в машинном обучении? Как его создать? Автор Шашанка М
Лучший оценщик
- Создайте конвейер
pipeline_knn = Pipeline([ ('ss1', StandardScaler()), ('knn', KNeighborsClassifier(n_neighbors=4)) ]) pipeline_dt = Pipeline([ ('ss2', StandardScaler()), ('dt', DecisionTreeClassifier()) ]) pipeline_rf = Pipeline([ ('ss3', StandardScaler()), ('rf', RandomForestClassifier(n_estimators=80)) ]) pipeline_lr = Pipeline([ ('ss4', StandardScaler()), ('lr', LogisticRegression()) ]) pipeline_svm_lin = Pipeline([ ('ss5', StandardScaler()), ('svm_lin', SVC(kernel='linear')) ]) pipeline_svm_sig = Pipeline([ ('ss6', StandardScaler()), ('svm_sig', SVC(kernel='sigmoid')) ])
- Создайте словарь конвейера
pipeline_dict = { 0: 'knn', 1: 'dt', 2: 'rf', 3: 'lr', 4: 'svm_lin', 5: 'svm_sig', } pipe_dic
Выход -
{0: 'knn', 1: 'dt', 2: 'rf', 3: 'lr', 4: 'svm_lin', 5: 'svm_sig'}
- Создать список
pipelines = [pipeline_lr, pipeline_svm_lin, pipeline_svm_sig, pipeline_knn, pipeline_dt, pipeline_rf]
- Установите трубопровод
for p in pipelines: pipe.fit(trainX, trainY)
- Оцените трубопровод
l = [] for i, val in enumerate(pipelines): l.append(accuracy_score(testY, val.predict(testX))) result_df = pd.DataFrame(list(pipeline_dict.items()),columns = ['Idx','Estimator']) result_df['Test_Accuracy'] = l result_df
Выход -
Лучшая модель -
b_model1 = result_df.sort_values(by='Test_Accuracy', ascending=False) b_model1
С анализом главных компонентов
- Создать конвейер
pipeline_lr = Pipeline([ ('ss1', StandardScaler()), ('pca1', PCA(n_components=2)), ('lr', LogisticRegression()) ]) pipeline_svm_lin = Pipeline([ ('ss2', StandardScaler()), ('pca2', PCA(n_components=2)), ('svm_lin', SVC(kernel='linear')) ]) pipeline_svm_sig = Pipeline([ ('ss3', StandardScaler()), ('pca3', PCA(n_components=2)), ('svm_sig', SVC(kernel='sigmoid')) ]) pipeline_knn = Pipeline([ ('ss4', StandardScaler()), ('pca4', PCA(n_components=2)), ('knn', KNeighborsClassifier(n_neighbors=7)) ]) pipeline_dt = Pipeline([ ('ss5', StandardScaler()), ('pca5', PCA(n_components=2)), ('dt', DecisionTreeClassifier()) ]) pipeline_rf = Pipeline([ ('ss6', StandardScaler()), ('pca6', PCA(n_components=2)), ('rf', RandomForestClassifier(n_estimators=100)) ])
- Создать словарь конвейера
pipeline_dict = { 0: 'lr', 1: 'svm_lin', 2: 'svm_sig', 3: 'knn', 4: 'dt', 5: 'rf' }
- Создать список -
pipelines = [pipe_lr, pipe_svm_lin, pipe_svm_sig, pipe_knn, pipe_dt, pipe_rf]
- Установите трубопровод
for p in pipelines: pipe.fit(trainX, trainY)
- Оцените трубопровод
l = [] for i, val in enumerate(pipelines): l.append(accuracy_score(testY, val.predict(testX))) result_df = pd.DataFrame(list(pipeline_dict.items()),columns = ['Idx','Estimator']) result_df['Test_Accuracy'] = result result_df
Выход -
Продолжайте учиться и писать код;)