์ด์ ์ธ์ ๋ค์์ ํ ์คํธ ์ธํธ์ฒ๋ผ ์๋ก์ด ๋ฐ์ดํฐ์ ์ค์ผ์ผ์ ์กฐ์ ํ๊ณ ์์ถํ๊ธฐ ์ํด ํ๋ จ ์ธํธ์์ ์ฌ์ฉํ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฌ์ฉํด์ผํ๋ค๊ณ ์ด์ผ๊ธฐํ์๋๋ฐ์, ์กฐ๊ธ ๋ ์ฌ์ด ๋จธ์ ๋ฌ๋์ ์ํด ์ด๋ฒ ์ธ์ ์์ ์ฌ์ดํท๋ฐ์ Pipeline ํด๋์ค๋ฅผ ๋ฐฐ์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ธ์ ๊ฒ์ฆํ๊ธฐ ์ํด ๋๋ฆฌ ์ฐ์ด๊ณ ์๋ k-๊ฒน ๊ต์ฐจ๊ฒ์ฆ ๋ฐฉ๋ฒ์ ๋ํด์๋ ์์๋ณด๊ฒ ์ต๋๋ค.
A. ํ์ดํ๋ผ์ธ์ ์ฌ์ฉํ ํจ์จ์ ์ธ ์ํฌํ๋ก ๋ง๋ค๊ธฐ
1. ์์ค์ฝ์ ์ ๋ฐฉ์ ๋ฐ์ดํฐ์
์์ค์ฝ์ ๋ฐ์ดํฐ์ ์ ์ ์ฑ๊ณผ ์์ฑ์ธ ์ข ์ ์ํ 569๊ฐ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์์์ ๋ ์ด์ ์ํ์ ID์ ์ง๋จ๊ฒฐ๊ณผ๊ฐ ๋ค์ด์๊ณ , 3~32๋ฒ์งธ๊น์ง์ ์ด์๋ ์ธํฌ ํต์ ์ด๋ฏธ์ง์์ ๊ณ์ฐ๋ 30๊ฐ ์ค์ ๊ฐ ํน์ฑ์ด ๋ค์ด์์ต๋๋ค. ์ผ๋จ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋๋ก ํ ๊น์? ์ด ๋ฐ์ดํฐ์ ์ ๋ํ ๋ด์ฉ์ ๋งํฌ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.(https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29)
๋จผ์ , pandas ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ ์ฝ์ด์ต๋๋ค.
import pandas as pd
df = pd.read_csv('https://archive.ics.uci.edu/ml/'
'machine-learning-databases'
'/breast-cancer-wisconsin/wdbc.data', header=None)
df.head()
๊ทธ๋ฆฌ๊ณ 30๊ฐ ํน์ฑ์ ๋ํ์ด ๋ฐฐ์ด X์ ํ ๋นํด์ค ๋ค์ LabelEncoder๋ก ๊ฐ์ฒด์ ์ง๋จ ๊ฒฐ๊ณผ(ํด๋์ค ๋ ์ด๋ธ์ ๋๋ค)๋ฅผ ๋ฌธ์์ด์์ ์ ์๋ก ๋ฐ๊พธ์ด์ค๋๋ค. ์๋๋ ์ ์ฑ์ ๋ปํ๋ M๊ณผ ์์ฑ์ ๋ปํ๋ B๋ฅผ ์ ์ํ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ์์ ์ ๋๋ค.
from sklearn.preprocessing import LabelEncoder
X = df.loc[:, 2:].values
y = df.loc[:, 1].values
le = LabelEncoder()
y = le.fit_transform(y)
le.classes_
ํด๋์ค ๋ ์ด๋ธ์ ๋ฐฐ์ด y์ ์ธ์ฝ๋ฉ์ ํด์ฃผ๋ฉด ์ ์ฑ ์ข ์์ 1๋ก, ์์ฑ ์ข ์์ 0์ผ๋ก ํํ๋ฉ๋๋ค. LabelEncoder ๊ฐ์ฒด์ transfrom ๋ฉ์๋๋ฅผ ํตํด์ ๋งคํ์ด ์ ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
le.transform(['M', 'B'])
#array([1, 0])
๊ทธ๋ฆฌ๊ณ ๋์, ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํ๊ธฐ ์ ์ ๋ฐ์ดํฐ์ ์ ํ๋ จ๊ณผ ํ ์คํธ ์ธํธ๋ก ๋๋์ด์ค๋๋ค.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = \
train_test_split(X, y,
test_size=0.20,
stratify=y,
random_state=1)
2. ํ์ดํ๋ผ์ธ์ผ๋ก ๋ณํ๊ธฐ์ ์ถ์ ๊ธฐ ์ฐ๊ฒฐํ๊ธฐ
์ด์ ์ ์ธ์ ๋ค์์ ์ธ๊ธํ๋ค์ํผ ์๊ณ ๋ฆฌ์ฆ์๊ฒ์ ์ต์ ์ ์ฑ๋ฅ์ ๋ด๊ธฐ ์ํด์๋ ์ ๋ ฅ ํน์ฑ์ด ๊ฐ์ ์ค์ผ์ผ์ ๊ฐ์ ธ์ผํฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ ์ง๊ธ ์ฐ๊ณ ์๋ ์์ค์ฝ์ ์ ๋ฐฉ์ ๋ฐ์ดํฐ์ ๋ ํน์ฑ์ ํ์คํํด์ค์ผ๊ฒ ์ฃ ? ์ ์ธ์ ์์ ์ฌ์ฉํ PCA๋ฅผ ํตํด์ 30์ฐจ์ ๋ฐ์ดํฐ๋ฅผ 2์ฐจ์์ผ๋ก ์์ถํ๋ค๊ณ ๊ฐ์ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
ํ๋ จ ์ธํธ์ ํ ์คํธ ์ธํธ๋ฅผ ๊ฐ๊ฐ ํ์ต ๋ฐ ๋ณํํ๋ ๋์ StandardScaler, PCA, LogisticRegression ๊ฐ์ฒด๋ฅผ ํ๋์ ํ์ดํ๋ผ์ธ์ผ๋ก ๋ฌถ์ ์ ์์ต๋๋ค.
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
pipe_lr = make_pipeline(StandardScaler(),
PCA(n_components=2),
LogisticRegression(solver='liblinear', random_state=1))
pipe_lr.fit(X_train, y_train)
y_pred = pipe_lr.predict(X_test)
print('ํ
์คํธ ์ ํ๋: %.3f' % pipe_lr.score(X_test, y_test))
#ํ
์คํธ ์ ํ๋: 0.956
์ ์ฝ๋์์ ์ฌ์ฉ๋ ํด๋์ค์ ํจ์๋ค, ์๊ณ ๋ฆฌ์ฆ์ ์ดํด๋ณด๋๋ก ํ ๊น์?
๋จผ์ make_pipeline ํจ์๋ ์ฌ๋ฌ๊ฐ์ ์ฌ์ดํท๋ฐ ๋ณํ๊ธฐ์ ๊ทธ ๋ค์ ์ฌ์ดํท๋ฐ ์ถ์ ๊ธฐ๋ฅผ ์ฐ๊ฒฐ์์ผ์ค๋๋ค. ์ฌ๊ธฐ์ ์ฌ์ดํท๋ฐ ๋ณํ๊ธฐ๋ ์ ๋ ฅ์ ๋ํด fit ๋ฉ์๋์ transform ๋ฉ์๋๋ฅผ ์ง์ํ๋ ๊ฐ์ฒด์ด๊ณ , ์ฌ์ดํท๋ฐ ์ถ์ ๊ธฐ๋ fit ๋ฉ์๋์ predict ๋ฉ์๋๋ฅผ ๊ตฌํํ ๊ฐ์ฒด์ ๋๋ค. ์ ์ฝ๋์์๋ StandardScaler, PCA ๋ ๊ฐ์ ๋ณํ๊ธฐ์ LogisticRegression ์ถ์ ๊ธฐ๋ฅผ make_pipeline์ ์ ๋ ฅ์ผ๋ก ๋ฃ์ด์ฃผ์์ต๋๋ค. ์ด ํจ์๋ ์ด์ ์ฌ์ดํท๋ฐ์ Pipeline ํด๋์ค ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๋ฐํํด์ค๋๋ค.
์ด Pipeline ํด๋์ค๋ฅผ ๋ฉํ ์ถ์ ๊ธฐ(meta-estimator)๋ ๋ณํ๊ธฐ์ ์ถ์ ๊ธฐ๋ฅผ ๊ฐ์ผ ์ผ์ข ์ ๋ฉ์ด๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค. Pipeline ๊ฐ์ฒด์ fit ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ๋ฐ์ดํฐ๊ฐ ๊ทธ ์์ ์๋ ๋ชจ๋ ๋ณํ๊ธฐ์ fit๊ณผ transform ๋ฉ์๋๋ฅผ ๊ฑฐ์ณ์ ์ถ์ ๊ธฐ์ ๋์ฐฉํฉ๋๋ค. ์ฌ๊ธฐ์์ ํ์ต์ ํ์ฃ .
์ ์ฝ๋์ pipe_lr์ fit ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ StandardScaler์ fit๊ณผ transform๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ์ด๋ ๊ฒ ๋ณํ๋ ํ๋ จ ์ธํธ๊ฐ ๋ค์ PCA๊ฐ์ฒด๋ก ์ ๋ฌ๋ฉ๋๋ค. ์ ๋จ๊ณ์ ๋น์ทํ๊ฒ ์กฐ์ ๋ ์ ๋ ฅ ๋ฐ์ดํฐ์ PCA์ fit๊ณผ transform ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ถ์ ๊ธฐ์ ๋ฐ์ดํฐ๊ฐ ์ ๋ฌ๋์ฃ .
์ด์ LogisticRegression์ด ์ด ๋ฐ์ดํฐ๋ก ํ์ต์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ์ดํ๋ผ์ธ์ ์ค๊ฐ ๋จ๊ณ๋ ๊ฐ์์ ์๊ด์ ์์ง๋ง ๋ง์ง๋ง ์์๋ ๋ฐ๋์ ์ถ์ ๊ธฐ์ฌ์ผํฉ๋๋ค.
ํ์ดํ๋ผ์ธ์์๋ predict ๋ฉ์๋๋ ์ ๊ณตํฉ๋๋ค. ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ ๋์ ๋ฐ์ดํฐ๋ ์ค๊ฐ ๋จ๊ณ์ ์์๋ transform ๋ฉ์๋๋ฅผ ํต๊ณผํ๊ณ , ๋ณํ๋ ๋ฐ์ดํฐ์ ๋ํ ์์ธก์ ์ถ์ ๊ธฐ๊ฐ ๋ณด์ฌ์ค๋๋ค. ์๋ ๊ทธ๋ฆผ์ด ์ดํด์ ๋์์ด ๋์ค ๊ฒ ๊ฐ์ต๋๋ค.
B. k-๊ฒน ๊ต์ฐจ ๊ฒ์ฆ์ ์ด์ฉํ ๋ชจ๋ธ ์ฑ๋ฅ ํ๊ฐ
๊ณผ์์ ํฉ๊ณผ ๊ณผ๋์ ํฉ์ ํผํ๊ธฐ ์ํด์ ์ฐ๋ฆฌ๋ ๋ณดํธ์ ์ธ ๊ต์ฐจ ๊ฒ์ฆ ๊ธฐ๋ฒ์ธ ํ๋์์ ๊ต์ฐจ ๊ฒ์ฆ(holdout cross-validation)๊ณผ k-๊ฒน ๊ต์ฐจ ๊ฒ์ฆ(k-fold cross-validation)์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1. ํ๋์์ ๋ฐฉ๋ฒ
ํ๋์์ ๊ต์ฐจ ๊ฒ์ฆ์ ์ด๊ธฐ ๋ฐ์ดํฐ๋ฅผ ํ ์คํธ์ ํ๋ จ ๋ฐ์ดํฐ๋ก ๋๋์ด์ค๋๋ค. ํ๋ จ ๋ฐ์ดํฐ๋ ๋ชจ๋ธ ํ๋ จ์, ํ ์คํธ ๋ฐ์ดํฐ๋ ์ผ๋ฐํ ์ฑ๋ฅ์ ์ถ์ ํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค. ๋ณดํต ์ฒ์ ๋ณด๋ ๋ฐ์ดํฐ์ธ ํ ์คํธ ๋ฐ์ดํฐ์์์ ์์ธก ์ฑ๋ฅ์ ์พ์ด๊ธฐ ์ํด์ ํ์ดํผ ํ๋ผ๋ฏธํฐ๋ฅผ ํ๋ํฉ๋๋ค. ์ด ๊ณผ์ ์ ๋ชจ๋ธ ์ ํ์ด๋ผ๊ณ ํฉ๋๋ค.
๋ชจ๋ธ ์ ํ์ ์ฃผ์ด์ง ๋ถ๋ฅ ๋ฌธ์ ์์ ํ๋ํ ํ๋ผ๋ฏธํฐ์ ์ต์ ๊ฐ์ ์ ํํด์ผํ๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ๋ชจ๋ธ ์ ํ์ ์ํด ์ฌ์ฉํ๋ฉด ํ ์คํธ ๋ฐ์ดํฐ๋ ํ๋ จ ๋ฐ์ดํฐ์ ๋ค๋ฅผ ๋ฐ ์์ด์ง๊ฒ ์ฃ . ์ด๊ฑด ์ข์ ๋ฐฉ๋ฒ์ด ์๋๋๋ค.
๋ชจ๋ธ ์ ํ์ ํ๋์์ ๋ฐฉ๋ฒ์ ์ ์ฉํ๊ธฐ ์ํด์๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ จ ์ธํธ, ๊ฒ์ฆ ์ธํธ(๋ชจ๋ธ ์ ํ), ํ ์คํธ ์ธํธ์์ ์ฑ๋ฅ์ ํ์ธํ ์ ์๊ฒ 3๊ฐ๋ก ๋๋์ด์ค๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด ํ ์คํธ ์ธํธ๊ฐ ์์ ํ ์๋ก์ด ๋ฐ์ดํฐ๋ก ๋ถ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์ถ์ ํ ๋ ๋ ํธํฅ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์๋ ๊ทธ๋ฆผ์์ ํ๋์์ ๊ต์ฐจ ๊ฒ์ฆ ๋ฐฉ๋ฒ์ ์์ฝํด์ฃผ๊ณ ์์ต๋๋ค!
๊ฒ์ฆ ์ธํธ๋ก ํ๋ผ๋ฏธํฐ ๊ฐ์ ๋ฐ๊ฟ๊ฐ๋ฉด์ ๋ชจ๋ธ์ ํ๋ จํ๊ณ ํ๊ฐํด์ค๋๋ค. ํ๋ผ๋ฏธํฐ ๊ฐ์ด ๊ด์ฐฎ๋ค๊ณ ์๊ฐ๋๋ค๋ฉด ์ด์ ํ ์คํธ ์ธํธ์์ ๋ชจ๋ธ์ ์ผ๋ฐํ ์ฑ๋ฅ์ ์ถ์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
ํ๋์์ ๋ฐฉ๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋๋๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ์ฑ๋ฅ์ ํ๊ฐํ๋๋ฐ ์๋ฏผํ ์ ์๋ค๋ ๋จ์ ์ด ์์ต๋๋ค. ๊ฒ์ฆ ์ธํธ์ ์ด๋ค ์ํ์ด ๋ค์ด๊ฐ๋๋๊ฐ ์ํฅ์ ์ค ์ ์๋ ๊ฒ์ด์ฃ .
2. k-๊ฒน ๊ต์ฐจ ๊ฒ์ฆ
k-๊ฒน ๊ต์ฐจ ๊ฒ์ฆ์์๋ ์ค๋ณต์์ด ํ๋ จ ๋ฐ์ดํฐ๋ฅผ k๊ฒน์ผ๋ก ๋๋คํ๊ฒ ๋๋์ด์ค๋๋ค. k-1๊ฒน์ผ๋ก ๋ชจ๋ธ์ ํ๋ จํ๊ณ , ๋๋จธ์ง ํ๋๋ก ์ฑ๋ฅ์ ํ๊ฐํ์ฃ . ์ด ๊ณผ์ ์ k๋ฒ ๋ฐ๋ณตํด k๊ฐ ๋ชจ๋ธ์ ์ป์ ์ ์๊ณ , ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ธ์ ์ฑ๋ฅ๋ ์ป์ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๊ฐ๊ฐ์ ํด๋์์ ์ป์ ์ฑ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ท ์ฑ๋ฅ์ ๊ณ์ฐํฉ๋๋ค. ์ด ๊ฒฝ์ฐ์๋ ํ๋์์ ๋ฐฉ๋ฒ๋ณด๋ค ๋ฐ์ดํฐ ๋ถํ ์ ๋ ์๋ฏผํ ์ฑ๋ฅ ํ๊ฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ ๋ค์์ ํ๋ จ ์ธํธ๋ก ๋ค์ ํ๋ จ์ํค๊ณ , ํ ์คํธ์ธํธ๋ก ์ฑ๋ฅ ํ๊ฐ๋ฅผ ํฉ๋๋ค.
k-๊ฒน ๊ต์ฐจ ๊ฒ์ ์ ์ค๋ณต์ ํ๋ฝํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์ํ์ด ๊ฒ์ฆ์ ๋ฑ ํ ๋ฒ ์ฌ์ฉ๋๊ณ , ๋ชจ๋ธ ์ฑ๋ฅ ํ๊ฐ์ ๋ถ์ฐ์ด ๋ฎ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ์๋ ๊ทธ๋ฆผ์์ E๋ ํ๊ท ์ฑ๋ฅ์ด๊ณ , En์ ๊ฐ ํผ๋์ ์ถ์ ๋ ์ฑ๋ฅ์ ๋๋ค.
์ฑ ์ ์ ์๊ฐ ์ถ์ฒํ๋ ์ข์ k ๊ธฐ๋ณธ๊ฐ์ 10์ ๋๋ค. ๋น๊ต์ ์์ ํ๋ จ ์ธํธ๊ฐ ์๋ค๋ฉด ํด๋ ๊ฐ์๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ด ์ข์ต๋๋ค.
k๊ฐ์ด ํฌ๋ฉด ๋ ๋ง์ ํ๋ จ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ณต๋ง๋ค ์ฌ์ฉ๋๊ณ ์ฑ๋ฅ์ ์ถ์ ํ ๋ ํธํฅ๋๋ ์ ๋๊ฐ ์์ต๋๋ค. ๋ฐ๋ฉด k๊ฐ์ด ์์ฃผ ํฌ๋ฉด ์คํ ์๊ฐ์ด ๊ธธ์ด์ง๊ณ ๋ถ์ฐ์ด ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋๋ค.
๋ฐ๋ผ์ ํฐ ๋ฐ์ดํฐ์์๋ ์๊ฐ์ ์๊ฐํด์ ์กฐ๊ธ ์์ k๊ฐ์ ์ ํํด๋ ๊ด์ฐฎ์ต๋๋ค.
๊ธฐ๋ณธ k-๊ฒน ๊ต์ฐจ ๊ฒ์ฆ๋ณด๋ค ๋ ๋์ ๋ฐฉ๋ฒ์ผ๋ก ๊ณ์ธต์ k-๊ฒน ๊ต์ฐจ๊ฒ์ฆ(stratified k-fold cross validation)์ด ์์ต๋๋ค. ๊ฐ ๊ฒน์ ํด๋์ค ๋น์จ์ด ์ ์ฒด ํ๋ จ ์ธํธ์ ๋์ผํ ๋น์จ์ ๊ฐ๋๋ก ํด์ค๋๋ค. ์ฝ๋๋ก ๋ณผ๊น์?
import numpy as np
from sklearn.model_selection import StratifiedKFold
kfold = StratifiedKFold(n_splits=10,
random_state=1).split(X_train, y_train)
scores = []
for k, (train, test) in enumerate(kfold):
pipe_lr.fit(X_train[train], y_train[train])
score = pipe_lr.score(X_train[test], y_train[test])
scores.append(score)
print('ํด๋: %2d, ํด๋์ค ๋ถํฌ: %s, ์ ํ๋: %.3f' % (k+1,
np.bincount(y_train[train]), score))
print('\nCV ์ ํ๋: %.3f +/- %.3f' % (np.mean(scores), np.std(scores)))
์ฌ์ดํท๋ฐ์ StratifiedKFold ๋ฐ๋ณต์๋ฅผ ํตํด ์์๋ฅผ ๋ง๋ค์ด์ฃผ์์ต๋๋ค. ๋จผ์ sklearn.model_selection ๋ชจ๋์ StratifiedKFoldํด๋์ค๋ฅผ y_train์ ์ ๋ฌํด ์ด๊ธฐํํด์ฃผ๊ณ , n_splits ๋งค๊ฐ๋ณ์๋ฅผ ํตํด k์ ๊ฐ์ ์ง์ ํด์ค๋๋ค.
pipe_lr ํ์ดํ ๋ผ์ธ์ ์ฌ์ฉํด ์ค์ผ์ผ์ ์กฐ์ ์์ผ์ฃผ๊ณ , ๋ชจ๋ธ์ ์ ํ๋ ์ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ด๊ฒ๋ณด๋ค ๋ ๊ฐ๋จํ๊ฒ, ์ฌ์ดํท๋ฐ์ด ์ ๊ณตํ๋ ํจ์๋ฅผ ํตํด์๋ ๊ตฌํํ ์ ์์ต๋๋ค.
from sklearn.model_selection import cross_val_score
scores = cross_val_score(estimator=pipe_lr,
X=X_train,
y=y_train,
cv=10,
n_jobs=1)
print('CV ์ ํ๋ ์ ์: %s' % scores)
print('CV ์ ํ๋: %.3f +/- %.3f' % (np.mean(scores), np.std(scores)))
cross_val_score ํจ์๋ ๊ฐ ํด๋, ์ฆ ๊ฒน์ ๋ํ ํ๊ฐ๋ฅผ ์ปดํจํฐ์ ์๋ ์ฌ๋ฌ ๊ฐ์ CPU ์ฝ์ด๋ก ๋ถ์ฐํ ์ ์์ต๋๋ค. ์์ ์์์์ฒ๋ผ n_jobs๋ฅผ 1๋ก ์ค์ ํ๋ฉด 1๊ฐ์ CPU ์ฝ์ด๋ง ์ฑ๋ฅ ํ๊ฐ์ ์ฌ์ฉํฉ๋๋ค. -1๋ก ์ค์ ํ๋ฉด ์ปดํจํฐ์ ๋ชจ๋ CPU ์ฝ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๋ ๊ฒ ์ฌ๊ธฐ๊น์ง ํ์ดํ๋ผ์ธ์ ๋๋ต์ ์ฌ์ฉ๋ฒ๊ณผ k-๊ฒน ๊ต์ฐจ ๊ฒ์ฆ์ ๋ํด์ ์ดํด๋ณด์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ธ์ ๋ง๋ค์์ ๋, ์ด ๋ชจ๋ธ์ ํ๊ฐํ๋ ๋ฐฉ์์ ๋น์ฐํ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด๋ป๊ฒ๋ณด๋ฉด ๋ชจ๋ธ์ ๊ฐ์น๋ฅผ ์ฆ๋ช ํ๋ ์ผ์ด๋ผ๊ณ ๋ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด ์ค์ํ ๋ชจ๋ธ์, ๋ชจ๋ธ์ ๊ฐ์น๋ฅผ ํ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ค๋ช ์ ๋ค์ ์ธ์ ์์๋ ์ด์ด์ง๋๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค๋ ์ผ๋ฅธ ๋ง๋๋ณด๋๋ก ํด์!