Python에서 파이프라인 생성

Jay Shaw 2023년10월10일
  1. 사용자 지정 데이터 세트를 위해 Python에서 파이프라인 생성
  2. Scikit-Learn 데이터 세트를 위해 Python에서 파이프라인 생성
Python에서 파이프라인 생성

이 기사에서는 sklearn 데이터 세트 및 사용자 지정 데이터 세트에 대한 기계 학습을 위한 Python 파이프라인을 만드는 방법을 보여줍니다.

사용자 지정 데이터 세트를 위해 Python에서 파이프라인 생성

Python 파이프라인을 생성하려면 두 개의 가져오기 패키지가 필요합니다. Pandas는 데이터 프레임을 생성하고 sklearn은 파이프라인을 위한 것입니다. 이와 함께 파이프라인 및 선형 회귀라는 두 가지 다른 하위 패키지를 배포합니다.

아래는 사용된 모든 패키지 목록입니다.

import pandas as pd
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression

방정식 값으로 데이터 세트 형성

이 프로그램은 충분한 다음 값이 모델을 훈련할 때 방정식의 결과 값을 예측하는 파이프라인을 만들려고 합니다.

여기에 사용된 방정식은 다음과 같습니다.

c = a + 3*\sqrt[3]{b}

선형 방정식의 값으로 Pandas 데이터 세트를 생성합니다.

df = pd.DataFrame(columns=["col1", "col2", "col3"], val=[[15, 8, 21], [16, 27, 25]])

데이터를 훈련 세트와 테스트 세트로 분할하기

모든 기계 학습 모델은 데이터를 동등하지 않은 두 부분으로 분할해야 합니다. 분리 후 이 두 세트를 사용하여 모델을 훈련하고 테스트합니다.

더 중요한 부분은 학습에 사용되고 다른 부분은 모델을 테스트하는 데 사용됩니다.

아래 코드 스니펫에서 처음 8개 값은 모델 학습에 사용하고 나머지는 테스트에 사용합니다.

learn = df.iloc[:8]
evaluate = df.iloc[8:]

scikit-learn 파이프라인은 파이프라인에 값을 가져온 다음 결과를 제공하는 방식으로 작동합니다. 값은 X와 y의 두 가지 입력 변수를 통해 제공됩니다.

사용된 방정식에서 c는 및 b의 함수입니다. 따라서 파이프라인이 선형 회귀 모델의 값에 맞도록 하기 위해 a, b 값을 X로, c 값을 y로 전송합니다.

X와 y는 변수를 학습하고 평가한다는 점에 유의하는 것이 중요합니다. 그래서 우리는 변수와 b를 기차 함수로 옮기고 변수 c를 테스트 함수에 할당합니다.

learn_X = learn.drop("col3", axis=1)
learn_y = learn.col3

evaluate_X = evaluate.drop("col3", axis=1)
evaluate_y = evaluate.col3

위의 코드에서 Pandas drop() 함수는 learn_X 변수에 값이 입력될 때 c 열의 값을 제거합니다. learn_y 변수에서 c 열의 값이 전송됩니다.

‘축 = 1’은 열을 나타내고 0 값은 행을 나타냅니다.

Python 파이프라인을 만들고 여기에 값 맞추기

Pipeline 함수를 사용하여 Python에서 파이프라인을 생성합니다. 사용하기 전에 변수에 저장해야 합니다.

여기에서 rock이라는 변수가 이를 위해 선언되었습니다.

파이프라인 내부에서 사용할 모델과 이름을 지정해야 합니다. ('선형 회귀 모델', LinearRegression()).

rock = Pipeline(steps=[("Model for Linear Regression", LinearRegression())])

Python에서 파이프라인을 만드는 단계가 완료되면 선형 모델이 제공된 값으로 파이프라인을 훈련할 수 있도록 학습 값에 맞춰야 합니다.

rock.fit(learn_X, learn_y)

파이프라인이 훈련된 후 변수 evaluate_Xpipe1.predict() 함수를 통해 다음 값을 예측합니다.

예측된 값은 새 변수 evalve에 저장되고 인쇄됩니다.

evalve = rock.predict(evaluate_X)
print(f"\n{evalve}")

파이프라인이 생성되는 방식과 성능을 관찰하기 위해 모든 것을 함께 합시다.

import pandas as pd

# import warnings
# warnings.filterwarnings('ignore')

from sklearn.pipeline import Pipeline

from sklearn.linear_model import LinearRegression

df = pd.DataFrame(
    columns=["col1", "col2", "col3"],
    data=[
        [15, 8, 21],
        [16, 27, 25],
        [17, 64, 29],
        [18, 125, 33],
        [19, 216, 37],
        [20, 343, 41],
        [21, 512, 45],
        [22, 729, 49],
        [23, 1000, 53],
        [24, 1331, 57],
        [25, 1728, 61],
        [26, 2197, 65],
    ],
)

learn = df.iloc[:8]
evaluate = df.iloc[8:]

learn_X = learn.drop("col3", axis=1)
learn_y = learn.col3

evaluate_X = evaluate.drop("col3", axis=1)
evaluate_y = evaluate.col3

print("\n step: Here, the pipeline is formed")
rock = Pipeline(steps=[("Model for Linear Regression", LinearRegression())])
print("\n Step: Fitting the data inside")
rock.fit(learn_X, learn_y)
print("\n Searching for outcomes after evaluation")
evalve = rock.predict(evaluate_X)
print(f"\n{evalve}")

출력:

"C:/Users/Win 10/pipe.py"

 step: Here, the pipeline is formed

 Step: Fitting the data inside

 Searching for outcomes after evaluation

[53. 57. 61. 65.]

Process finished with exit code 0

보시다시피 파이프라인은 정확한 값을 예측합니다.

Scikit-Learn 데이터 세트를 위해 Python에서 파이프라인 생성

이 예제는 Scikit 학습 데이터 세트를 위해 Python에서 파이프라인을 생성하는 방법을 보여줍니다. 큰 데이터 세트에서 파이프라인 작업을 수행하는 것은 작은 데이터 세트와 약간 다릅니다.

파이프라인은 대규모 데이터 세트를 처리할 때 데이터를 정리하고 필터링하기 위해 추가 모델을 사용해야 합니다.

다음은 필요한 가져오기 패키지입니다.

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn import datasets

sklearn의 데이터 세트가 사용됩니다. 여기에는 여러 열과 값이 있지만 특히 데이터와 대상이라는 두 개의 열을 사용합니다.

데이터 세트를 훈련 세트와 테스트 세트로 로드 및 분할

데이터 세트를 변수 bc에 로드하고 개별 열 값을 변수 X와 y에 저장합니다.

bc = datasets.load_breast_cancer()
X = bc.data
y = bc.target

데이터 세트가 로드되면 학습 및 평가 변수를 정의합니다. 데이터 세트는 훈련 세트와 테스트 세트로 분할되어야 합니다.

a_learn, a_evaluate, b_learn, b_evaluate = train_test_split(
    X, y, test_size=0.40, random_state=1, stratify=y
)

데이터 세트를 X_learn, X_evaluate, y_learny_evaluate의 4가지 기본 변수에 할당합니다. 여기에서는 이전 프로그램과 달리 train_test_split() 함수를 통해 할당을 수행합니다.

test_size=0.4는 테스트를 위해 데이터 세트의 40%를 예약하고 나머지 절반은 훈련을 위해 유지하도록 함수에 지시합니다.

‘random_state=1’은 데이터 세트 분할이 균일하게 수행되어 함수가 실행될 때마다 예측이 동일한 출력을 제공하도록 합니다. ‘random_state=0’은 함수가 실행될 때마다 다른 결과를 제공합니다.

‘stratify=y’는 매개변수를 계층화하기 위해 제공된 것과 동일한 데이터 크기가 샘플 크기에 사용되도록 합니다. 1의 15%와 0의 85%가 있는 경우 ‘stratify’는 모든 무작위 분할에서 시스템이 1의 15%와 0의 85%를 갖도록 합니다.

Python 파이프라인을 만들고 여기에 값 맞추기

pipeline = make_pipeline(StandardScaler(),
RandomForestClassifier (n_estimators=10, max_features=5, max_depth=2, random_state=1))

어디에:

  • make_pipeline()은 파이프라인을 생성하기 위한 Scikit-learn 함수입니다.
  • Standard scaler()는 평균에서 값을 제거하고 이를 단위 값으로 분배합니다.
  • RandomForestClassifier()는 데이터 세트에서 몇 가지 샘플 값을 가져와 각 샘플 값으로 의사 결정 트리를 만든 다음 각 의사 결정 트리에서 결과를 예측하는 의사 결정 모델입니다. 그런 다음 모델은 예측 결과의 정확성에 대해 투표를 하고 가장 많은 투표를 받은 결과가 최종 예측으로 선택됩니다.
  • n_estimators는 투표 전에 생성될 의사결정 트리의 수를 나타냅니다.
  • max_features는 노드 분할이 실행될 때 형성될 무작위 상태의 수를 결정합니다.
  • max_depth는 트리 노드의 깊이를 나타냅니다.

파이프라인을 생성한 후 값이 피팅되고 결과가 예측됩니다.

pipeline.fit(a_learn, b_learn)
y_pred = pipeline.predict(a_evaluate)

전체 프로그램을 살펴보겠습니다.

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import make_pipeline
from sklearn import datasets

bc = datasets.load_breast_cancer()
X = bc.data
y = bc.target

a_learn, a_evaluate, b_learn, b_evaluate = train_test_split(
    X, y, test_size=0.40, random_state=1, stratify=y
)

# Create the pipeline

pipeline = make_pipeline(
    StandardScaler(),
    RandomForestClassifier(
        n_estimators=10, max_features=5, max_depth=2, random_state=1
    ),
)


pipeline.fit(a_learn, b_learn)

y_pred = pipeline.predict(a_evaluate)

print(y_pred)

출력:

"C:/Users/Win 10/test_cleaned.py"
[0 0 0 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1
 1 1 0 1 1 1 1 0 1 1 0 0 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 0 0 1 1 1 1 0 1 1 1
 1 1 0 1 1 0 1 0 1 1 1 1 0 0 0 1 0 0 1 0 1 1 1 0 1 1 0 1 0 1 1 1 1 0 1 1 1
 1 1 0 0 1 1 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 1 0 0 1 1 1 1 1 0 1 1
 0 0 1 0 1 0 0 1 1 0 1 0 0 0 1 0 1 1 1 0 0 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 0 1 0 0 1 1 0 1 1
 1 1 1 1 1 0]

Process finished with exit code 0