์ฌ์ดํท๋ฐ(scikit-learn)
- ํ์ด์ฌ ๊ธฐ๋ฐ์ ๋ค๋ฅธ ๋จธ์ ๋ฌ๋ ํจํค์ง๋ ์ฌ์ดํท๋ฐ ์คํ์ผ์ API๋ฅผ ์งํฅํ ์ ๋๋ก ์ฝ๊ณ ๊ฐ์ฅ ํ์ด์ฌ์ค๋ฌ์ด API๋ฅผ ์ ๊ณต
- ๋จธ์ ๋ฌ๋์ ์ํ ๋งค์ฐ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ๋ฐ์ ์ํ ํธ๋ฆฌํ ํ๋ ์์ํฌ์ API๋ฅผ ์ ๊ณต
- ์ค๋ ๊ธฐ๊ฐ ์ค์ ํ๊ฒฝ์์ ๊ฒ์ฆ๋์ผ๋ฉฐ, ๋งค์ฐ ๋ง์ ํ๊ฒฝ์์ ์ฌ์ฉ๋๋ ์ฑ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ฃผ๋ก numpy, scipy ๊ธฐ๋ฐ ์์์ ๊ตฌ์ถ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ง๋ํ์ต - ๋ถ๋ฅ
๋ถ๋ฅ(Classification)๋ ๋ํ์ ์ธ ์ง๋ ํ์ต(Supervised Learning) ๋ฐฉ๋ฒ์ ํ๋.
์ง๋ํ์ต์ ํ์ต์ ์ํ ๋ค์ํ ํผ์ฒ์ ๋ถ๋ฅ ๊ฒฐ์ ๊ฐ์ธ ๋ ์ด๋ธ(Label)๋ฐ์ดํฐ๋ก ๋ชจ๋ธ์ ํ์ตํ ๋ค, ๋ณ๋์ ๋ฐ์ดํฐ ๋ฐ์ดํฐ ์ธํธ์์ ๋ฏธ์ง์ ๋ ์ด๋ธ์ ์์ธก.
์ฆ ์ง๋ํ์ต์ ๋ช ํํ ์ ๋ต์ด ์ฃผ์ด์ง ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ํ์ตํ ๋ค ๋ฏธ์ง์ ์ ๋ต์ ์์ธกํ๋ ๋ฐฉ์. ์ด๋ ํ์ต์ ์ํด ์ฃผ์ด์ง ๋ฐ์ดํฐ ์ธํธ๋ฅผ ํ์ต ๋ฐ์ดํฐ ์ธํธ, ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์์ธก ์ฑ๋ฅ์ ํ๊ฐํ๊ธฐ ์ํด ๋ณ๋๋ก ์ฃผ์ด์ง ๋ฐ์ดํฐ ์ธํธ๋ฅผ ํ ์คํธ ๋ฐ์ดํฐ ์ธํธ๋ก ์ง์นญ
1. ์ฌ์ดํท๋ฐ์ ์ด์ฉํ ๋ถ๊ฝ ๋ฐ์ดํฐ ๋ถ๋ฅ
๋ถ๊ฝ ๋ฐ์ดํฐ ์ธํธ๋ ๊ฝ์์ ๊ธธ์ด์ ๋๋น, ๊ฝ๋ฐ์นจ์ ๊ธธ์ด์ ๋๋น ํผ์ฒ(Feature)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฝ์ ํ์ข ์ ์์ธกํ๊ธฐ ์ํ ๊ฒ.
- ํผ์ฒ(Feature), ์์ฑ
ํผ์ฒ๋ ๋ฐ์ดํฐ ์ธํธ์ ์ผ๋ฐ ์์ฑ. ๋จธ์ ๋ฌ๋์ 2์ฐจ์ ์ด์์ ๋ค์ฐจ์ ๋ฐ์ดํฐ์์๋ ๋ง์ด ์ฌ์ฉ๋๋ฏ๋ก ํ๊ฒ๊ฐ์ ์ ์ธํ ๋๋จธ์ง ์์ฑ์ ๋ชจ๋ ํผ์ฒ๋ก ์ง์นญ. - ๋ ์ด๋ธ, ํด๋์ค, ํ๊ฒ(๊ฐ), ๊ฒฐ์ (๊ฐ)
ํ๊ฒ๊ฐ ๋๋ ๊ฒฐ์ ๊ฐ์ ์ง๋ ํ์ต ์ ๋ฐ์ดํฐ์ ํ์ต์ ์ํด ์ฃผ์ด์ง๋ ์ ๋ต ๋ฐ์ดํฐ. ์ง๋ ํ์ต ์ค ๋ถ๋ฅ์ ๊ฒฝ์ฐ์๋ ์ด ๊ฒฐ์ ๊ฐ์ ๋ ์ด๋ธ ๋๋ ํด๋์ค๋ก ์ง์นญ.
2. ๋ถ๊ฝ ๋ฐ์ดํฐ ๋ถ๋ฅ ์์ธก ํ๋ก์ธ์ค
- ๋ฐ์ดํฐ ์ธํธ ๋ถ๋ฆฌ : ๋ฐ์ดํฐ๋ฅผ ํ์ต ๋ฐ์ดํฐ์ ํ ์คํธ ๋ฐ์ดํฐ๋ก ๋ถ๋ฆฌ
- ๋ชจ๋ธ ํ์ต : ํ์ต ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ML ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํด ๋ชจ๋ธ์ ํ์ต
- ์์ธก ์ํ : ํ์ต๋ ML ๋ชจ๋ธ์ ์ด์ฉํด ํ ์คํธ ๋ฐ์ดํฐ์ ๋ถ๋ฅ(์ฆ, ๋ถ๊ฝ ์ข ๋ฅ)๋ฅผ ์์ธก
- ํ๊ฐ : ์ด๋ ๊ฒ ์์ธก๋ ๊ฒฐ๊ณผ๊ฐ๊ณผ ํ ์คํธ ๋ฐ์ดํฐ์ ์ค์ ๊ฒฐ๊ณผ๊ฐ์ ๋น๊ตํด ML๋ชจ๋ธ ์ฑ๋ฅ์ ํ๊ฐ
3. ์ค์ต
์ฌ์ดํท๋ฐ์ ์ด์ฉํ์ฌ ๋ถ๊ฝ(Iris)๋ฐ์ดํฐ ํ์ข ์์ธกํ๊ธฐ
# ์ฌ์ดํท๋ฐ ๋ฒ์ ํ์ธ
import sklearn
print(sklearn.__version__)
** ๋ถ๊ฝ ์์ธก์ ์ํ ์ฌ์ดํท๋ฐ ํ์ ๋ชจ๋ ๋ก๋ฉ **
from sklearn.datasets import load_iris # ๋ด์ฅ๋ฐ์ดํฐ๋ก ๋ค์ด๊ฐ์๋ iris ๋ฐ์ดํฐ ๋ก๋
from sklearn.tree import DecisionTreeClassifier # ์์ฌ๊ฒฐ์ ๋๋ฌด ๋ถ๋ฅ๊ธฐ
from sklearn.model_selection import train_test_split # ํ์ต,ํ
์คํธ ๋ฐ์ดํฐ ๋ถ๋ฆฌ(train, test ๋ฐ์ดํฐ ๋ถํ )
1) ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ก๋ฉ
import pandas as pd
# ๋ถ๊ฝ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ก๋ฉํฉ๋๋ค.
iris = load_iris()
# iris.data๋ Iris ๋ฐ์ดํฐ ์ธํธ์์ ํผ์ฒ(feature)๋ง์ผ๋ก ๋ ๋ฐ์ดํฐ๋ฅผ numpy๋ก ๊ฐ์ง๊ณ ์์ต๋๋ค.
iris_data = iris.data
iris_data
# iris.target์ ๋ถ๊ฝ ๋ฐ์ดํฐ ์ธํธ์์ ๋ ์ด๋ธ(๊ฒฐ์ ๊ฐ) ๋ฐ์ดํฐ๋ฅผ numpy๋ก ๊ฐ์ง๊ณ ์์ต๋๋ค.
iris_label = iris.target
iris_label
print('iris target๋ช
:', iris.target_names)
iris target๋ช : ['setosa' 'versicolor' 'virginica']
# ๋ถ๊ฝ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์์ธํ ๋ณด๊ธฐ ์ํด DataFrame์ผ๋ก ๋ณํํฉ๋๋ค.
iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
iris_df['label'] = iris.target
print(iris_df.shape)
iris_df.head()
2) ํ์ต ๋ฐ์ดํฐ์ ํ ์คํธ ๋ฐ์ดํฐ ์ธํธ๋ก ๋ถ๋ฆฌ
iris_df 150์ ํ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
train: 0.8_150=120 -> (X_train,y_train) ํ์ต -> ๋ชจ๋ธ
test:0.2_150=30 -> (X_test,y_test)์์ธก -> ํ๊ฐ์งํ
X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label,
test_size=0.2, random_state=11)
- test_size: ํ
์คํธ ์
๊ตฌ์ฑ์ ๋น์จ์ ๋ํ๋
๋๋ค. train_size์ ์ต์
๊ณผ ๋ฐ๋ ๊ด๊ณ์ ์๋ ์ต์
๊ฐ์ด๋ฉฐ,
์ฃผ๋ก test_size๋ฅผ ์ง์ ํด ์ค๋๋ค. 0.2๋ ์ ์ฒด ๋ฐ์ดํฐ ์ ์ 20%๋ฅผ test (validation) ์ ์ผ๋ก ์ง์ ํ๊ฒ ๋ค๋ ์๋ฏธ์ ๋๋ค.
default ๊ฐ์ 0.25 ์ ๋๋ค. - random_state: ์ธํธ๋ฅผ ์์ ๋ ํด๋น int ๊ฐ์ ๋ณด๊ณ ์์ผ๋ฉฐ,
ํ์ดํผ ํ๋ผ๋ฏธํฐ๋ฅผ ํ๋์ ์ด ๊ฐ์ ๊ณ ์ ํด๋๊ณ ํ๋ํด์ผ ๋งค๋ฒ ๋ฐ์ดํฐ์ ์ด ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
# ํ์ต ๋ฐ์ดํฐ ์ธํธ
print(X_train.shape)
print(y_train.shape)
# ํ
์คํธ ๋ฐ์ดํฐ ์ธํธ
print(X_test.shape)
print(y_test.shape)
(120, 4)
(120,)
(30, 4)
(30,)
3) "ํ์ต ๋ฐ์ดํฐ" ์ธํธ๋ก ํ์ต(Train) ์ํ
# DecisionTreeClassifier ๊ฐ์ฒด ์์ฑ
dt_clf = DecisionTreeClassifier(random_state=11)
# ํ์ต ์ํ (ํด๋น ํ์ต ๋ฐ์ดํฐ๋ก ํ์ต)
dt_clf.fit(X_train, y_train)
DecisionTreeClassifier(random_state=11)
4) "ํ ์คํธ ๋ฐ์ดํฐ" ์ธํธ๋ก ์์ธก(Predict) ์ํ
# ํ์ต์ด ์๋ฃ๋ DecisionTreeClassifier ๊ฐ์ฒด์์ ํ
์คํธ ๋ฐ์ดํฐ ์ธํธ๋ก ์์ธก ์ํ.
pred = dt_clf.predict(X_test) #y_test(์ค์ ๊ฐ)
pred
print(len(pred))
pred
iris.target_names
array(['setosa', 'versicolor', 'virginica'], dtype='<U10')
5) ์์ธก ์ ํ๋ ํ๊ฐ
from sklearn.metrics import accuracy_score #accuracy_score์ ์ ๋ต๋ฐฐ์ด๊ณผ ์์ธก๊ฐ์ ๋ฐฐ์ด์ ๋ฃ์ผ๋ฉด ์ ํ๋๊ฐ ํ๊ฐ๋๋ค.
print('์์ธก ์ ํ๋: {0:.4f}'.format(accuracy_score(y_test, pred))) #4f:์ค์ํ 4์งธ์๋ฆฌ๊น์ง!
-> 93%์ ์ ํ๋๋ก iris ๋ฐ์ดํฐ์ ํ์ข ์ ์์ธกํจ.
๋๊ธ