Строительство трубопроводов для нефте- и газоперерабатывающих заводов занимает более 12 месяцев, все зависит от расстояния, которое должны пройти трубы, но что делают трубопроводы? это было бы легко для 10-летнего ребенка, который живет в Нигерии, потому что он может быстро отнести трубопроводы к нефтеперерабатывающим заводам (нефти и газу), к транспортировке сырой нефти от нефтеперерабатывающих заводов к хранилищам и сказать, что трубопровод - это труба, используемая для транспортировки нефти. ;

Конвейер – это линия каналов , канал или метод для переноса чего-либо из одного места в другое, определяемый «yourdictionary». Конвейер в машинном обучении недалеко от этого; Это простой маршрут, по которому данные проходят через методы предварительной обработки (очистка данных, удаление отсутствующих значений/заполнение отсутствующих значений, OneHotEncoder и т. д.), которые преобразуют и подготавливают данные для прогнозирования модели.

Хотя на строительство нефтепровода для нефти и газа уходит более дюжины человек в течение 12 месяцев, вам потребуется меньше двух дней, чтобы построить трубопровод с помощью машинного обучения.
Набор данных, который я буду использовать для построения этого трубопровода здесь может подойти: Рынок жилья Мельбурна
в вашем блокноте Jupyter должны быть предустановлены sklearn, pandas; если вы не установите их следующим образом:

!pip install pandas 
!pip install sklearn

затем вам нужно импортировать необходимые библиотеки

import pandas as pd
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import  LabelEncoder, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.ensemble import RandomForestRegressor

затем импортируйте/прочитайте набор данных, используя «pd.read_csv», так как наш набор данных находится в формате csv
Перейдите в свой каталог и найдите, где набор данных сохраняется в вашей системе; Он сохраняется в загрузках на моем компьютере.

pd.read_csv(r"C:\Users\Blessing\Downloads\melb_data.csv")

Чтобы понять, какое преобразование использовать для каждой переменной, необходимо учитывать разнообразие данных. Когда я говорю о разнообразии, я имею в виду тот факт, что переменные могут быть непрерывными и категориальными и варьироваться в зависимости от цели (зависимой переменной). Через визуализацию переменной относительно цели, чтобы увидеть тенденцию, если они скорректированы положительно, отрицательно или нелинейно.

Примите во внимание разнообразие каждого столбца в ваших данных и используйте его в своих интересах;

Посредством построения графика и визуализации вы узнаете, какой столбец является непрерывным, а какой прерывистым, а затем предпринимаете соответствующие шаги для преобразования данных таким образом, чтобы обеспечить хорошую/наилучшую точность для вашей модели. после изучения набора данных я буду использовать «SimpleImputer» для заполнения пропущенных значений и «OneHotEncoder» для преобразования значений в двоичные (0,1).

Я собираюсь отбросить некоторые переменные, потому что они явно неполны или могут привести к переоснащению.

house = mel_data.drop(['Suburb','Date','SellerG','Address',
'BuildingArea','YearBuilt'], axis=1)

Трубопровод будет состоять из двух этапов; первый заполнит переменные отсутствующим столбцом, а затем преобразует заполненные переменные в двоичные, поскольку эти переменные являются категориальными переменными.

Вместо того, чтобы преобразовывать одну переменную с помощью SimpleImputer, Pipeline собирается передать SimpleImputer как этап в Pipeline: две неполные переменные в данных — «Car» и «CouncilArea».
Для «Car» и «CouncilArea» будет установлено значение «missing_col», а стратегия заполнения — «most_frequent» (отсутствующие значения будут заполнены наиболее частым значением в переменной). Затем передайте их OneHotEncoder туда, чтобы преобразовать данные в двоичные, поскольку они оба являются категориальными столбцами. Если вы не знаете, что такое категорическая дата. Категориальная переменная — это переменная, которая распределяет людей, объекты по группам (например, кошка — пол, религия, статус отношений, рейтинги (1–10) и т. д.)
Примечание: в конвейере есть прямое преобразование категориальной переменной объекта в двоичный код при передаче OneHotEncoder.

missing_col =['Car', 'CouncilArea']
pipe1 = Pipeline(steps=[('impute',     SimpleImputer(missing_values=np.nan,strategy='most_frequent')),   
             ('OHE', OneHotEncoder(handle_unknown='ignore'))])

На следующем этапе конвейера полные категориальные переменные передаются через OneHotEncoding для преобразования их в двоичные. остальные переменные, которые должны быть вызваны на первом этапе конвейера или на втором этапе, будут «пропущены» или удалены на этапе ColumnTransformer:

objects_col = ['Type','Method','Regionname','Rooms','Bathroom','Bedroom2']
pipel2 = Pipeline(steps[('OHE',OneHotEncoder(handle_unknown='ignore'))])

В конвейере есть два этапа, pipe1 и pipe2, так как же соединить их оба? как нам соединить эти две разные, но более простые трубы вместе? именно здесь появляется ColumnTransformer. ColumnTransformer не только соединяет каналы вместе, но также объединяет переменные, которые не претерпели никакого преобразования. ColumnTransformer объединяет их в единый конвейер.
код для этого показан ниже:

preprocessor = ColumnTransformer(transformers[('imp',pipe1,missing_col),
              ('OneHot',pipe2,objects_col)],remainder='passthrough')

Перед подгонкой набора данных Мельбурна есть еще один этап в конвейере. На этом этапе этапы предварительной обработки (препроцессор) и алгоритм обучения (в данном случае RandomForestRegessor) устанавливаются в конвейер для создания модели;

model = Pipeline(steps=[('preprocessor', preprocessor)('regressor',RandomForestRegressor())])

Теперь у вас есть конвейер.

В этот момент вы, возможно, забыли о наборе данных Мельбурна. В конвейере имя, назначенное набору данных (в данном случае «дом»), не вызывается до тех пор, пока не будут построены все этапы конвейера. Хотя имена некоторых переменных (как написано в данных) вызываются в конвейере. Данные вводятся только на этапе настройки, если они проходят все преобразования конвейера в порядке их этапов.
вы можете поместить свою цель (Y) и обучающие переменные (X) в модель.
Затем вы можете вызвать model.predict() для данных тестирования, но сначала вам нужно удалить переменные, которые исключены из обучающих данных.

model.fit(housing)
model.predict(test_set)

ПРИМЕЧАНИЕ. в конвейерах вы можете вызывать переменную только один раз на всех этапах конвейера; как и для переменной «Car», мы не можем вызывать «Car» как в pipe1, так и в pipe2, это вернет код ошибки. Следовательно, причина, по которой OneHotEncoder используется для преобразования «Car» и «CouncilArea»; После заполнения отсутствующего значения «Car» в pipe1 мы передаем его через OneHotEncoder, чтобы избежать вызова «Car» в Pipe2.

Преимущества конвейера

  • Как видите, код конвейера понятен и лаконичен, и его легко использовать для представления
    Конвейер помогает отслеживать набор данных и обеспечивает бесперебойную работу процесса.

Низкие стороны строительства конвейера

  • Создание пайплайна занимает много времени, и аналитик данных однажды посоветовал: «Не создавайте пайплайн, пока не убедитесь, что ваше решение без пайплайна принято советом, на который вы работаете».
  • Очень сложно найти ошибку в конвейере.

Вы можете найти полный код на моем Github
Дополнительную информацию о конвейере можно получить в статье Что такое конвейер в машинном обучении? Как его создать?

Спасибо, что прочитали!
Если у вас есть вопросы, вы можете задать их в разделе комментариев, и не забудьте похлопать меня, если вы найдете это хорошим чтением.