Python에서 파이프라인 생성

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Python
 pythonCopylearn = df.iloc[:8]
evaluate = df.iloc[8:]

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

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

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

Python
 pythonCopylearn_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()).

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

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

Python
 pythonCopyrock.fit(learn_X, learn_y)

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

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

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

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

Python
 pythonCopyimport 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}")

출력:

 textCopy"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에서 파이프라인을 생성하는 방법을 보여줍니다. 큰 데이터 세트에서 파이프라인 작업을 수행하는 것은 작은 데이터 세트와 약간 다릅니다.

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

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

Python
 pythonCopyfrom 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에 저장합니다.

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

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

Python
 pythonCopya_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 파이프라인을 만들고 여기에 값 맞추기

Bash
 bashCopypipeline = 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는 트리 노드의 깊이를 나타냅니다.

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

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

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

Python
 pythonCopyfrom 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)

출력:

 textCopy"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
튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다