Полная реализация…

Запуск алгоритмов машинного обучения состоит из нескольких этапов, поскольку он включает в себя последовательность задач, включая предварительную обработку, извлечение функций, подгонку модели, производительность и проверку. Конвейер - это не что иное, как метод, с помощью которого мы создаем линейную последовательность этапов подготовки данных и моделирования для автоматизации рабочих процессов машинного обучения. Автоматизированный конвейер состоит из компонентов и того, как эти компоненты могут работать вместе для создания и обновления модели машинного обучения. В этом посте мы собираемся создать конвейер, найти лучший скаляр, оценки и посмотреть оценки точности различных алгоритмов машинного обучения. Мы будем использовать набор данных 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

Выход -

Продолжайте учиться и писать код;)

Хотите прочитать юмор программистов?









Рекомендуемые статьи -