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_X
는 pipe1.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_learn
및 y_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