๐ ๋จธ์ ๋ฌ๋์ ์ธ๊ณ, ๋ถ๋ฅ(Classification)๋ก ์ฒซ๋ฐ ๋ด๋๊ธฐ
๋จธ์ ๋ฌ๋์ ์ธ๊ณ์ ์ฒซ๋ฐ์ ๋ด๋๋ ๋น์ , ์ด๋๋ถํฐ ์์ํด์ผ ํ ์ง ๋ง๋งํ๊ฐ์? ์ค๋์ ๊ทธ ์ฒซ๊ฑธ์์ผ๋ก, ์๋ง์ ๋ชจ๋ธ์ ๊ธฐ์ด๊ฐ ๋๋ ๋ถ๋ฅ(Classification) ์๊ณ ๋ฆฌ์ฆ๋ค์ Scikit-Learn์ด๋ผ๋ ๊ฐ๋ ฅํ ๋ฌด๊ธฐ์ ํจ๊ป ์ ๋ณตํด๋ณธ ๊ฒฝํ์ ๊ณต์ ํ๋ ค ํ๋ค. ๋ฑ๋ฑํ ์ด๋ก ์๋ฅผ ๋์ด, ์ง์ ์ฝ๋๋ฅผ ๋ง์ ธ๋ณด๋ฉฐ ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฅ์ ๋ค์ฌ๋ค๋ณด๋ ์ฌ์ ์ด์๋ค. ๐
๐ก โ์ด๋ฉ์ผ์ด ์คํธ์ผ๊น, ์๋๊น?โ
์ฐ๋ฆฌ ์ฃผ๋ณ์ ์๋ง์ AI ์๋น์ค๋ ๋ฐ๋ก ์ด โ๋ถ๋ฅโ์์ ์์๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ โ์ด๊ฒโ๊ณผ โ์ ๊ฒโ์ผ๋ก ๋๋๋ ์งํ, ์ฆ ๋ถ๋ฅ์ ์๋ฆฌ๋ฅผ ์ดํดํ๋ ๊ฒ์ ๋จธ์ ๋ฌ๋์ ๋ฐ๋ค๋ฅผ ํญํดํ๊ธฐ ์ํ ํ์ ๋์นจ๋ฐ๊ณผ๋ ๊ฐ๋ค.
๐ ๏ธ 1. ์ฐ๋ฆฌ์ ๋ ๋ ํ ์ฅ๋น, Scikit-Learn
ํํ์ ๋ ๋๊ธฐ ์ , ์ต๊ณ ์ ์ฅ๋น๋ถํฐ ์ฑ๊ฒจ์ผ ํ๋ค. Scikit-learn์ ๋ง์น ์ ๋ง๋ค์ด์ง ์ค์์ค ์๋ฏธ ๋์ดํ์ฒ๋ผ, ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ ๊ณตํด์ค๋ค.
Scikit-learn ์ฌ์ฉ๋ฒ์ ๋ฑ 5๋จ๊ณ๋ง ๊ธฐ์ตํ๋ฉด ๋๋ค.
- ๋ชจ๋ธ ์ ํ:
from sklearn.some_module import SomeModel
- ๋ชจ๋ธ ์์ฑ:
model = SomeModel(hyperparameter=value)
- ๋ฐ์ดํฐ ์ค๋น:
X_train, y_train
- ํ๋ จ:
model.fit(X_train, y_train)
โจ - ์์ธก:
model.predict(X_new)
์ด ๊ฐ๋จํ ํจํด๋ง ์ตํ๋ฉด, ํผ์ ํธ๋ก ๋ถํฐ SVM๊น์ง ๋ชจ๋ ๋ชจ๋ธ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ค๋ฃฐ ์ ์๋ค. ์ ๋ง ๋ฉ์ง์ง ์์๊ฐ!
๐บ๏ธ 2. ๋ณธ๊ฒฉ์ ์ธ ํํ: 6๊ฐ์ ๋ถ๋ฅ ์๊ณ ๋ฆฌ์ฆ ์ ๋ณต๊ธฐ
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก 6๊ฐ์ ์ฃผ์ ๋ถ๋ฅ ์๊ณ ๋ฆฌ์ฆ์ ํ๋์ฉ ๋ง๋๋ณด์๋ค.
(1) ํผ์ ํธ๋ก (Perceptron): ๊ฐ์ฅ ๋จ์ํ ์์
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ ํ ๋ถ๋ฅ๊ธฐ. sklearn.linear_model.Perceptron
์ผ๋ก ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค. ์ ํ์ ์ผ๋ก ๋ถ๋ฆฌ ๊ฐ๋ฅํ ๋ฌธ์ ์์๋ ์ฌ์ ํ ๊ฐ๋ ฅํ ๋ชจ์ต์ ๋ณด์ฌ์ค๋ค.
from sklearn.linear_model import Perceptron
# ํผ์
ํธ๋ก ํ๋ จ
ppn = Perceptron(eta0=0.1, random_state=1)
ppn.fit(X_train_std, y_train)
(2) ๋ก์ง์คํฑ ํ๊ท (Logistic Regression): ํ๋ฅ ์ ์ธ๊ณ๋ก
์ด๋ฆ์ โํ๊ทโ์ง๋ง, ์ฌ์ค์ ๋ถ๋ฅ ๋ชจ๋ธ์ด๋ค. ๊ฐ ํด๋์ค์ ์ํ ํ๋ฅ ์ ๊ณ์ฐํด์ฃผ๋ ์ ์ด ๋งค๋ ฅ์ ์ด๋ค. ์ด ๊ณผ์ ์์ ๋ชจ๋ธ์ด ํ๋ จ ๋ฐ์ดํฐ์๋ง ๋๋ฌด ์ต์ํด์ง๋ ๊ณผ๋์ ํฉ(Overfitting) ์ด๋ผ๋ ๋ฌธ์ ๋ฅผ ๋ง๋ฌ๋ค.
๐ง ๋ฐ๊ฒฌ! ๊ณผ๋์ ํฉ์ ๋ง๋ ๋ง๋ฒ, ๊ท์ (Regularization)
๋ชจ๋ธ์ด ๋๋ฌด ๋ณต์กํด์ง์ง ์๋๋ก ํ๋ํฐ๋ฅผ ์ฃผ๋ ๊ธฐ์ ์ด๋ค. Scikit-learn์์๋
LogisticRegression(C=1.0, penalty='l2')
์ฒ๋ผ ๊ฐ๋จํ ํ๋ผ๋ฏธํฐ๋ก ์ด ๋ง๋ฒ์ ๋ถ๋ฆด ์ ์๋ค.C
๊ฐ์ด ์์์๋ก ๊ฐํ ๊ท์ ๊ฐ ์ ์ฉ๋์ด ๋ชจ๋ธ์ด ๋ ๋จ์ํด์ง๋ค. ์ด ์๋ฆฌ๋ ๋ค๋ฅธ ๋ง์ ๋ชจ๋ธ์์๋ ์ฌ์ฉ๋๋ ์์ฃผ ์ค์ํ ๊ฐ๋ ์ด์๋ค.
from sklearn.linear_model import LogisticRegression
# L2 ๊ท์ ๋ฅผ ์ฌ์ฉํ๋ ๋ก์ง์คํฑ ํ๊ท ํ๋ จ
lr = LogisticRegression(C=1.0, penalty='l2', random_state=1)
lr.fit(X_train_std, y_train)
(3) ์ํฌํธ ๋ฒกํฐ ๋จธ์ (SVM): ์ต์ ์ ๊ฒฝ๊ณ์ ์ ์ฐพ์์
ํด๋์ค ๊ฐ์ ๋ง์ง(๊ฐ๊ฒฉ)์ ์ต๋ํํ๋ ๊ฐ์ฅ ์์ ์ ์ธ ๊ฒฝ๊ณ์ ์ ์ฐพ๋ ๋๋ํ ์๊ณ ๋ฆฌ์ฆ. ํนํ ์ปค๋ ํธ๋ฆญ์ ์ฌ์ฉํ๋ฉด ์ ํ์ผ๋ก ๋ถ๋ฆฌํ ์ ์๋ ๋ณต์กํ ๋ฐ์ดํฐ๋ ๊ฑฐ๋ฌํ ๋ถ๋ฅํด๋ธ๋ค. SVC(kernel='rbf')
๊ฐ ๋ฐ๋ก ๊ทธ ๋ง๋ฒ์ ์ฃผ๋ฌธ์ด๋ค.
from sklearn.svm import SVC
# RBF ์ปค๋์ ์ฌ์ฉํ๋ SVM ํ๋ จ
svm = SVC(kernel='rbf', random_state=1, gamma=0.10, C=10.0)
svm.fit(X_train_std, y_train)
(4) ๊ฒฐ์ ํธ๋ฆฌ (Decision Tree): ์ค๋ฌด๊ณ ๊ฐ ํ๋ฏ ๋ช ์พํ๊ฒ
โ์ด ํน์ง์ด A๋ณด๋ค ํฐ๊ฐ์?โ ๊ฐ์ ์ง๋ฌธ์ ๋ฐ๋ณตํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฅํ๋, ๋ง์น ์ค๋ฌด๊ณ ๊ฐ ๊ฐ์ ๋ชจ๋ธ์ด๋ค. ๋ชจ๋ธ์ ๊ฒฐ์ ๊ณผ์ ์ ์ฌ๋์ด ์ฝ๊ฒ ์ดํดํ ์ ์๋ค๋ ์์ฒญ๋ ์ฅ์ ์ด ์๋ค. ํ์ง๋ง ๋๋ฌด ๊น๊ฒ ํ๊ณ ๋ค๋ฉด ๊ณผ๋์ ํฉ์ ๋ซ์ ๋น ์ง๊ธฐ ์ฌ์ฐ๋ max_depth
๋ก ๊น์ด๋ฅผ ์กฐ์ ํ๋ ์งํ๊ฐ ํ์ํ๋ค.
from sklearn.tree import DecisionTreeClassifier
# ๊ฒฐ์ ํธ๋ฆฌ ํ๋ จ (์ต๋ ๊น์ด 4๋ก ์ ํ)
tree = DecisionTreeClassifier(criterion='gini', max_depth=4, random_state=1)
tree.fit(X_train, y_train)
(5) ๋๋ค ํฌ๋ ์คํธ (Random Forest): ์ง๋จ์ง์ฑ์ ํ
๊ฒฐ์ ํธ๋ฆฌ๊ฐ ํ ๋ช ์ ์ ๋ฌธ๊ฐ๋ผ๋ฉด, ๋๋ค ํฌ๋ ์คํธ๋ ์๋ง์ ์ ๋ฌธ๊ฐ ์ง๋จ์ด๋ค. ์ฌ๋ฌ ๊ฐ์ ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ ๋ง๋ค์ด ํฌํ(์์๋ธ)๋ฅผ ํ๋, ์ฑ๋ฅ์ด ํจ์ฌ ์์ ์ ์ด๊ณ ๊ฐ๋ ฅํด์ง๋ค. ์ญ์ ํจ๊ปํ ๋ ๋ ๊ฐํ๋ค! ๐ง
from sklearn.ensemble import RandomForestClassifier
# 100๊ฐ์ ํธ๋ฆฌ๋ก ๊ตฌ์ฑ๋ ๋๋ค ํฌ๋ ์คํธ ํ๋ จ
forest = RandomForestClassifier(n_estimators=100, random_state=1)
forest.fit(X_train, y_train)
(6) K-์ต๊ทผ์ ์ด์ (KNN): โ์น๊ตฌ๋ฅผ ๋ณด๋ฉด ๋๋ฅผ ์ ์ ์๋คโ
์๋ก์ด ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด, ์ฃผ๋ณ์ ๊ฐ์ฅ ๊ฐ๊น์ด k๊ฐ ์ด์๋ค์ ๋ณด๊ณ ํด๋์ค๋ฅผ ๊ฒฐ์ ํ๋ ๋จ์ํ๊ณ ์ง๊ด์ ์ธ ์๊ณ ๋ฆฌ์ฆ. ๋ชจ๋ธ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋์ง ์์ โ๊ฒ์ผ๋ฅธ ํ์ตโ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
from sklearn.neighbors import KNeighborsClassifier
# 5๊ฐ์ ์ด์์ ์ฐธ๊ณ ํ๋ KNN ํ๋ จ
# ํน์ง์ ํ์คํ(Standardization)ํ๋ ์ ์ฒ๋ฆฌ๊ฐ ๋งค์ฐ ์ค์ํ๋ค!
knn = KNeighborsClassifier(n_neighbors=5, p=2, metric='minkowski')
knn.fit(X_train_std, y_train)
โจ ์ค๋์ ํ๊ณ
๋จ์ํ Scikit-learn์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋์ด, ๊ฐ ๋ถ๋ฅ ๋ชจ๋ธ์ด ์ด๋ค ์๋ฆฌ๋ก ๋์ํ๊ณ , ์ ํน์ ์ํฉ์์ ํน์ ํ๋ผ๋ฏธํฐ(๊ท์ , ์ปค๋ ๋ฑ)๊ฐ ์ค์ํ์ง ๋ชธ์ ์ฒด๊ฐํ๋ ์๊ฐ์ด์๋ค. ๐
์ค๋ ๋ฐฐ์ด 6๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์์ผ๋ก ๋ง์ฃผํ ๋ ๋ณต์กํ ๋ชจ๋ธ๋ค์ ๋ ๋ ํ ๊ธฐ์ด๊ฐ ๋์ด์ค ๊ฒ์ด๋ค. ๋ค์์๋ ์ค๋ ๋ฐฐ์ด ๋ชจ๋ธ๋ค์ ํ์ฉํด ์ค์ ์บ๊ธ ๋ฐ์ดํฐ์ ์ผ๋ก ์์ธก ๋ชจ๋ธ์ ๋ง๋ค์ด ๋ณผ ์๊ฐ์ ๊ฐ์ด์ด ๋ด๋ค! ๐ฅ