project:eve
23.02.05 ์์๋ธ ๋ณธ๋ฌธ
Studying here๐ ๋งฅ์ฌํ๋ํธ ํ๋จ
๋จธ์ ๋ฌ๋์ ๊ฑฐ์ ๋ค ๊ณต๋ถํด๊ฐ๋ค. ๋จ์ ๊ฑด ์์๋ธ๊ณผ ๋์ด๋ธ ๋ฒ ์ด์ฆ, ์์๋ธ์ ๋ ๋ญ๊ฐ ๋ณธ๊ฒฉ์ ์ธ ๋จธ์ ๋ฌ๋ ๊ฐ์์ ๊ณต๋ถ๊ฐ ๋๋๊ฐ๋ ์ฑ์ทจ๊ฐ + ๋จธ์ ๋ฌ๋์ ์ธ๊ณ์ ํ ๋ป ๋น ์ ธ๋ค์ด๊ฐ๋ ๊ฒ ๊ฐ์์ ์ฆ๊ฒ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ค๋๋ ๊ธฐ๋ถ ์ข๊ฒ ๊ธ์ ์จ๋ณด์.
์์๋ธ(Ensemble)
์์๋ธ์ ๋ถ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ๋ฌ ๋ถ์ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์ด๋ค. ์ฆ ํ๋์ ๋ถ์ ๋ฐ์ดํฐ์ ์ฌ๋ฌ ๋ถ์ ๋ชจ๋ธ์ ์ ์ฉํ๊ฑฐ๋ ์ฌ๋ฌ ๊ฐ์ ๋ถ์ ๋ฐ์ดํฐ์ ํ๋์ ๋ถ์ ๋ชจ๋ธ์ ์ ์ฉํด์ ๋์ถ๋ ๊ฒฐ๊ณผ๋ค์ ์ข ํฉ, ํ๋์ ๊ฐ๋ ฅํ ๋ชจ๋ธ์ ๋ง๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก ๋จ์ผ ๋ถ์ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์ฑ๋ฅ์ด ๋ฐ์ด๋๊ณ ๋ฐ์ดํฐ ๋ถ์ ์ฝํ ์คํธ์์๋ ์์๊ถ์ ๋๋ถ๋ถ ์์๋ธ ๊ธฐ๋ฒ์ ์ฌ์ฉํ ๋ชจ๋ธ์ด ์๋ค๊ณ ํ๋ค.
๋จ์ ์ ์๋๊ฐ ์ค๋ ๊ฑธ๋ฆฌ๊ณ ๊ฒฐ๊ณผ ํด์์ด ์ด๋ ค์ธ ์ ์๋ค๋ ์ .
(**์์๋ธ์ ๋ํด ์ฑ ์ด๋ ์ผ๋ถ ๋ธ๋ก๊ทธ ๊ธ์ ๋ณด๋ฉด ์ฝํ ๊ฒ์ถ๊ธฐ๋ฅผ ๋ชจ์ ๊ฐํ ๊ฒ์ถ๊ธฐ๋ฅผ ๋ง๋ ๋ค๊ณ ํ๋ค. ์ด '์ฝํ ๊ฒ์ถ๊ธฐ' ๋ผ๋ ๊ฒ์ด ๋ญ์ง ์ดํด๊ฐ ์ ๋๋๋ฐ, ์์๋ธ ํน์ฑ์ด ์ฌ๋ฌ ๊ฐ์ ๋ถ์ ๋ชจ๋ธ์ ๊ฒฐ๊ณผ๋ฅผ ํฉ์น๋๊น ๊ทธ์ค ๊ฐ๊ฐ์ ๋ชจ๋ธ๋ค์ ์ฝํ ๊ฒ์ถ๊ธฐ๋ผ๊ณ ๋งํ๋ ๊ฒ ๊ฐ๋ค. ์ฝํ๋ค๊ณ ํ๋ ์ด์ ๋ ๊ทธ๊ฒ๋ค์ ์ข ํฉํด์ ๊ฐํ ๊ฒ์ถ๊ธฐ๋ก ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ์๋ฏธ๋ฅผ ์ฃผ๊ธฐ ์ํด์์ธ ๊ฒ ๊ฐ๊ณ .
๊ทธ๋ฅ ์ผ๋ฐ์ ์ธ ๊ฒ์ถ๊ธฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ข ํฉํด์ ๋ ๊ฐํ ๊ฒ์ถ๊ธฐ๋ฅผ ๋ง๋ ๋ค๊ณ ํ๋ฉด ์๋๋? ์ฝํ๋ค๊ณ ํ๋๊น ์ด์ ๊น์ง ๋ฐฐ์ด ๋ถ์ ๋ชจ๋ธ๋ค์ด ๋ค ๊ฒฐํจ์ด ์๋ ๋ชจ๋ธ๋ก ๋ณด์ธ๋ค)
1) ์ข ๋ฅ
1- ๋ณดํ
๋ณดํ ์ ํ๋์ ๋ฐ์ดํฐ์ ์ฌ๋ฌ ์ข ๋ฅ์ ๋จธ์ ๋ฌ๋์ ์ฌ์ฉํด ๋์ถํ ๊ฒฐ๊ณผ๋ค์ ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์ด๋ค.
(tmi์ด์ง๋ง 'ํ์ด์ฌ ํ ๊ถ์ผ๋ก ๋๋ด๊ธฐ' ์ฑ ์ ๋ณด๋ฉด์ ๊ณต๋ถํ๊ณ ์๋๋ฐ ๋ฐ๋ฆฐ์ด์ธ ๋ด๊ฐ ๋ด๋ ํ๋ฆฐ ๋ด์ฉ์ด ์ข ์ข ๋ณด์ด๊ณ ์ฌํ ๊ฒฝ์ฐ์๋ ๊ฐ๋ ์ ๋ณต๋ถ์ ํด๋์ ๊ฒ์ด ๋ณด์ฌ์ ์ข ํน๋ฐ๋๋ค...๐ก ์์๋ธ์์๋ ๋ฐฐ๊น ๊ฐ๋ ์ค๋ช ํ๋ฉด์ ๊ทธ ์์ ๋ณดํ ์ด ์๊ณ .. ๋ฐฐ๊น ๊ณผ ๋ณดํ ์ ๋ด๊ฐ ๋ณด๊ธฐ์๋ ์ ํ ๋ค๋ฅธ ๊ฐ๋ ์ด๊ณ ๊ตฌ๊ธ์ ๊ฒ์ํด๋ ๊ฐ๊ฐ ์นดํ ๊ณ ๋ฆฌ๋ก ๋ถ๋ฆฌํด์ ์ค๋ช ํ๋๋ฐ ์ ์ฑ ์์๋ ๋ฌถ์ด์ ์ค๋ช ํ์ง.. ์ ๋ชจ๋ฅด๊ฒ ๋ค)

๋ณดํ ์๋ ํ๋ ๋ณดํ ๊ณผ ์ํํธ ๋ณดํ ๋ ๊ฐ์ง ์ข ๋ฅ๊ฐ ์๋๋ฐ, ํ๋ ๋ณดํ ์ ๋์ถ๋ ๊ฒฐ๊ณผ๋ค์ ๋ค์๊ฒฐ๋ก ๋ฐ์ ธ์ ๋ ๋ง์ class ๊ฐ์ ์ต์ข ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ํ์ ํ๋ค. ์ํํธ ๋ณดํ ์ ๋์ถ๋ ๊ฒฐ๊ณผ์ ํ๋ฅ ์ ํ๊ท ์ ๋ฐ์ ธ์ ๋ ๋์ ํ๊ท ์ ๊ฐ์ง class๊ฐ์ ์ต์ข ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ํ์ ํ๋ค. ๊ฐ๊ฐ predict๊ฐ๊ณผ predict_proba ๊ฐ์ ์ฌ์ฉํด ํ์ ํ๋ค๊ณ ์๊ฐํ๋ฉด ์ดํด๊ฐ ํจ์ฌ ๋ ์ฌ์ธ ๊ฒ์ด๋ค.

2- ๋ฐฐ๊น
์ฌ๋ฌ ๊ฐ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ๋จ์ผํ ๋ถ์ ๋ชจ๋ธ์ ์ ๋ ฅํ์ฌ ๋์ถ๋ ๊ฐ์ ์ฌ์ฉํ๋ ๊ธฐ๋ฒ. ๊ธฐ๋ณธ ์๊ณ ๋ฆฌ์ฆ์ ์์ฌ๊ฒฐ์ ๋๋ฌด๋ฅผ ์ฌ์ฉํ๋ค. ๋์ถ๋ ๊ฐ์ผ๋ก ์ต์ข class๋ฅผ ํ๋จํ ๋๋ ๋ณดํ ์ ์ฌ์ฉํ๋ค. ๋ฐฐ๊น ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๋ํ์ ์ธ ๋ถ์ ๋ชจ๋ธ์ด ๋๋ค ํฌ๋ ์คํธ์ด๋ค.

3- ๋ถ์คํ
๋ฐฐ๊น ์ด ์ฌ๋ฌ ๊ฐ์ ๋ถ์ ๋ชจ๋ธ์ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค๋ฉด ๋ถ์คํ ์ ์ด ๊ณผ์ ์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค. ์ฒซ๋ฒ์งธ ๋ถ์์ ์งํํ๊ณ ์ค์ ๊ฐ๊ณผ ์ฐจ์ด๊ฐ ์๋ ๊ฒฐ๊ณผ๋ ๋ณด์ ํด์ ๋ ๋ฒ์งธ ๋ถ์์ ์งํํ๋ค. ์ด๋ฐ ๊ณผ์ ์ผ๋ก ์ต๋ํ ์ ํ๋๋ฅผ ์ฌ๋ฆฐ๋ค.
*๋ค๋ง ๋ถ์คํ ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ํ๋ จ ๋ฐ์ดํฐ์ ๊ณผ์ ํฉ๋ ์ฐ๋ ค๊ฐ ์๋ค.

4- ๋๋คํฌ๋ ์คํธ
๋ฐฐ๊น ๊ณผ ๋ถ์คํ ๋ณด๋ค ์ํ ๋ฐ์ดํฐ์ ๋ ๋ง์ ๋ฌด์์์ฑ์ ์ฃผ์ด ๋ชจ๋ธ์ ํ์ตํ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ ๊ธฐ๋ฒ. ์๋ง์ ์์ฌ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค. ์ธ๋ป ๋ณด๋ฉด ๋ฐฐ๊น ๊ณผ ์ฐจ์ด๊ฐ ์์ด ๋ณด์ธ๋ค. ๋ฐฐ๊น ๋ ๋๊ฐ์ด ๋ถ์คํธ๋ฉ์ผ๋ก ๋ฐ์ดํฐ ์ถ์ถํ๊ณ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ณธ๊ฐ์ด ์์ฌ๊ฒฐ์ ํธ๋ฆฌ๋ก ๋์ด์๋ค. ์ฐจ์ด์ ์ ์ด๋ ๋ค๊ณ ํ๋ค.
*** ๋ฐฐ๊น ๊ณผ ๋๋คํฌ๋ ์คํธ์ ์ฐจ์ด
๋๋คํฌ๋ ์คํธ๋ ๋ฐฐ๊น ๊ณผ ๊ฐ์ด ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์์ฌ๊ฒฐ์ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋, ํธ๋ฆฌ ๋ด์์ ๋ถํ ์ด ๊ณ ๋ ค๋ ๋๋ง๋ค ์ ์ฒด์ ๋ ๋ฆฝ๋ณ์๋ฅผ ๋ถํ ์กฐ๊ฑด์ผ๋ก ๋ณด์ง ์๊ณ ์ ํ๋ ์ผ๋ถ์ ๋ ๋ฆฝ๋ณ์๋ง์ ๊ธฐ์ค์ผ๋ก ๋ถํ ํ๋ค.
๋ง์ฝ ๋ฐ์ดํฐ์ ๋งค์ฐ ๊ฐํ ์ค๋ช ๋ณ์ a์ ๊ทธ๋ ์ง ์์ ์ ๋นํ ์ค๋ช ๋ณ์๋ค b, c, d...๊ฐ ์๋ค๊ณ ํ๋ฉด, ๋ฐฐ๊น ์ ์์ฌ๊ฒฐ์ ํธ๋ฆฌ๋ค์ ์ด๋ฐ์ ๋๋ถ๋ถ a๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถํ ํ๊ฒ ๋ ๊ฒ์ด๊ณ ๊ฒฐ๊ตญ ์ํ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅด๋๋ผ๋ ๊ฒฐ๊ณผ์น๊ฐ ๋น์ทํ๊ฒ ๋์ฌ ๊ฒ์ด๋ค. ์ด๋ด ๊ฒฝ์ฐ ๊ทธ ๊ฐ๋ค์ ์ข ํฉํ์ฌ ๋์ถํ๋ ๊ฒ์ ๋ถ์ฐ์ ์ค์ด๋ ๋ฐ์ ๋์์ด ๋์ง ์๋๋ค๊ณ ํ๋ค.
๋ฐ๋ฉด์ ๋๋คํฌ๋ ์คํธ์ ์์ฌ๊ฒฐ์ ํธ๋ฆฌ๋ค์ ๋ถํ ํ๊ธฐ ์ํ ๊ธฐ์ค์ ์ ํ๊ธฐ ์ํ ๋ ๋ฆฝ๋ณ์ ๊ทธ๋ฃน์ด ์ ๊ฐ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ๊ฐ์ ์ข ํฉํ ๋ ๋ณ๋์ฑ์ด ์ ์ด์ง๊ณ ๋ ์์ ์ ์ด๊ฒ ๋๋ค. ์ฆ ๋๋คํฌ๋ ์คํธ์ ๋ถํ ๊ธฐ์ค์ด ๋ ๋ฆฝ๋ณ์ ์ ์ฒด์ผ ๊ฒฝ์ฐ ๋ฐฐ๊น ์ ๊ฒฐ๊ณผ๊ฐ๊ณผ ๊ฐ๋ค.
3) ์ฃผ์ ์์ฑ : ํจ์์์ ์ฃผ๋ก ์ฌ์ฉํ๋ ์์ฑ๋ง ์ ๋ฆฌํด๋ดค๋ค
n_estimators : ๋ถ๋ฅ๊ธฐ์ ์. ๊ธฐ๋ณธ๊ฐ์ 100๊ฐ์ด๊ณ ์ฆ๊ฐํ๋ฉด ํ ์๋ก ๋ ๋ง์ ๋ถ์์ ํ๊ฒ ๋์ด์ ์ ํ๋๊ฐ ์ฆ๊ฐํ๋ค.
base_estimator : (bagging, boosting)์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ. ๊ธฐ๋ณธ๊ฐ์ ์์ฌ๊ฒฐ์ ๋๋ฌด์ด๋ค.
feature_importances_ : (boosting)๋ ๋ฆฝ๋ณ์๋ณ ์ค์๋ ์ถ๋ ฅ
4) ์ฝ๋
1- ๋ณดํ : ์ฌ์ดํท๋ฐ์ ์ ๋ฐฉ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๋ก ๋ถ์ํด๋ณด์๋ค.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
cancer = pd.read_csv('/Users/eve/Downloads/jupyter notebook/files/classification/breast-cancer.csv')
print(cancer.info())
# cancer
plt.figure()
sns.histplot(x='diagnosis', data=cancer, hue=cancer['diagnosis'])
sns.relplot(x='area_mean', y='texture_mean', hue='diagnosis', data=cancer)

diagnosis๋ฅผ ์ข ์๋ณ์๋ก ์ง์ ํ๊ณ ๋ฐ์ดํฐ ๋ถํ (7:3)
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier
clf = BaggingClassifier(base_estimator=DecisionTreeClassifier())
pred = clf.fit(train_x, train_y).predict(test_x)
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
clf_report = classification_report(test_y, pred)
cm = confusion_matrix(test_y, pred)
๋ฐฐ๊น ๊ณผ ๋ฐฐ๊น ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์์ฌ๊ฒฐ์ ๋๋ฌด๋ฅผ ํธ์ถํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ธ์ ํ๋ จ/๊ฒ์ฆ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํด ์์ธก๊ฐ์ ๋์ถํ๋ค.
์ ํ๋ ๋ฐ ์ฑ๋ฅ ํ๊ฐ ์งํ๋ฅผ ํ์ธํ๊ธฐ ์ํด classification_report๋ฅผ ํธ์ถํ๋ค. ์ด๊ฑฐ ํ๋๋ฉด ์ ํ๋, ์ ๋ฐ๋, ์ฌํ์จ ๋ฑ๋ฑ์ ํ ๋ฒ์ ๋ค ํ์ธํ ์ ์์ด์ ์ผ์ผ์ด ํธ์ถํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ํธํ๋ค.
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier
clf = BaggingClassifier(base_estimator=DecisionTreeClassifier())
pred = clf.fit(train_x, train_y).predict(test_x)
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
clf_report = classification_report(test_y, pred)
cm = confusion_matrix(test_y, pred)

์๋ ์ฑ ์์๋ ๋ชจ๋ ๋ ๋ฆฝ๋ณ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ 2๊ฐ๋ง ๊ณจ๋ผ์ ์ฌ์ฉํ๋๋ฐ, ๋๋ ๋ชจ๋ ๋ณ์๋ฅผ ์ ๋ ฅํ๋๊น ๊ฒฐ๊ณผ๊ฐ ๋๋ฌด ์ ๋์จ๋ค..... ์ฒ์์๋ ์๋ชปํ ์ค ์์๋๋ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ผ๋๊น ์ ์๊ฐ์ผ๋ก ๋์ค๋ ๊ฑธ ๋ณด๋ ์ด ์ ๋ฐฉ์ ๋ฐ์ดํฐ๊ฐ ์๊ฐ ์ ๊ธฐ๋ ํ๊ณ ํ์ง์ด ์ข์์ ๊ทธ๋ฐ ๊ฒ ๊ฐ๋ค. ์๋๋ฉด ์์๋ธ์ด ์ด๋ ๊ฒ ์์ฒญ๋ ๋ชจ๋ธ์ด๋ผ๋ ๋ฐ์ฆ์ธ๊ฐ?ใ ใ
out of bag์ด๋ผ๋ ๊ฐ๋ ์ด ์๋ค. ๋ฐฐ๊น ์ ํ๊ธฐ ์ํด ํ๋ จ/๊ฒ์ฆ ๋ฐ์ดํฐ์์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฝ์ ๋ ๋ถ์คํธ๋ํ(bootstraping, ๋จ์๋๋ค์ถ์ถ)์ด๋ผ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋๋ฐ, ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ฉด ์ฝ 63%์ ๋ฐ์ดํฐ๋ง ์ํ๋ง๋๊ณ ๋๋จธ์ง 37%๋ ์ฃฝ์ ๋ฐ์ดํฐ์ด๋ค. ์ด ๋ฐ์ดํฐ๋ค๋ง ๋ชจ์์ ๋ฐ๋ก ํ์ตํ๊ฑฐ๋ ์์ธกํ๋๋ก ๋ชจ๋ธ์ ์์ฑํ ์ ์๋ค. ์ด ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ฐฐ๊น ์ ์ ์ธํ ๋ oob_score=True๋ก ์ง์ ํด์ฃผ์ด์ผ๋ง ๊ฐ๋ฅํ๋ค.
์๋ ์ฝ๋๋ ์์ ์ ๋ฐฉ์ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ํ์ต์ํค๊ณ ์ ํ๋๋ง ์ถ๋ ฅํ ๊ฒ์ด๋ค. ์ด๊ฒ๋ ์ญ์ ์ ํ๋๋ 1๋ก ๋์จ๋ค.
clf_oob = BaggingClassifier(base_estimator=DecisionTreeClassifier(), oob_score=True)
oob = clf_oob.fit(X, y).oob_score_
print(oob) # -> 1.0
์ด๋ฒ์๋ ํ๊ท ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ๋ถ์ํด๋ณด์. ๋ถ๋ฅ์ ๊ธฐ๋ณธ์ ์ธ ํ์ด ๋๋ถ๋ถ ์ ์ฌํ๋ฏ๋ก ํ ์ฝ๋๋ก ์ ๋ฆฌํ๋ค. ๋ฐ์ดํฐ๋ ์ฐจ๋ ์คํ์ ๋ฐ๋ฅธ ๊ฐ๊ฒฉ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ค.
import pandas as pd
carprice = pd.read_csv('/Users/eve/Downloads/jupyter notebook/files/regression/CarPrice_Assignment.csv')
foruse = carprice.select_dtypes(['number'])
X_features = foruse.columns.difference(['car_ID', 'symboling', 'price'])
X = foruse[X_features]
y = carprice['price']
train_x, test_x, train_y, test_y = train_test_split(X, y, train_size=0.7,
random_state=1)
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import BaggingRegressor
reg = BaggingRegressor(base_estimator=DecisionTreeRegressor(), oob_score=True)
pred = reg.fit(train_x, train_y).predict(test_x)
from sklearn.metrics import mean_squared_error, mean_absolute_error
print('mae : {0}'.format(mean_absolute_error(test_y, pred)))
print('mse : {0}'.format(mean_squared_error(test_y, pred)))

2- ๋ถ์คํ
๋ถ์คํ ์ ์์ด๋ค๋ถ์คํธ(adaboost)๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค. ๋ฐ์ดํฐ๋ ๋ฐฐ๊น ์์์ ๊ฐ์ด ์ ๋ฐฉ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด ๋ถ์ํ๋ค.
import pandas as pd
cancer = pd.read_csv('/Users/eve/Downloads/jupyter notebook/files/classification/breast-cancer.csv')
cancer = cancer.iloc[:, 1:10]
cancer['diagnosis'] = np.where(cancer['diagnosis']=='M', 1, 0)
X = cancer.drop(columns=['diagnosis'])
y = cancer['diagnosis']
train_x, test_x, train_y, test_y = train_test_split(X, y, train_size=0.7,
random_state=1, stratify=y)
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score
clf = AdaBoostClassifier(base_estimator=DecisionTreeClassifier())
pred = clf.fit(train_x, train_y).predict(test_x)
pred_proba = clf.fit(train_x, train_y).predict_proba(test_x)[:, 1]
cr = classification_report(test_y, pred)
cm = confusion_matrix(test_y, pred)
print(cr)
print('\n')
print(cm)

๋ฐฐ๊น ๋ณด๋ค๋ ์ด์ง ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ๊ฒ ๊ฐ๋ค.
๋ถ์คํ ์๋ ๋ฐฐ๊น ์๋ ์๋ ๋ ๋ฆฝ๋ณ์๋ณ ์ค์๋ ๋ฉ์๋๊ฐ ์๋ค.
imp = clf.feature_importances_
fig = plt.figure(figsize=(15, 6))
plt.bar(x=X.columns, height=imp)

concave points๊ฐ ๊ฒฐ๊ณผ๊ฐ์ ๊ฐ์ฅ ๋ง์ด ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ ์ ์ ์๋ค.
(tmi : concave point๋ ์ธํฌ์ ์ํน ํจ์ธ ์๊ตญ์ด ์๋ ํ์๋ผ๊ณ ํ๋ค)
ํ๊ท๋ ๋ฐฐ๊น ํ๊ท์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฐจ๋์ ์คํ ๋๋น ๊ฐ๊ฒฉ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์์ผ๋ฏ๋ก ์ค๋ณต๋๋ ๋ถ๋ถ์ ์๋ต.
from sklearn.ensemble import AdaBoostRegressor
from sklearn.tree import DecisionTreeRegressor
rg = AdaBoostRegressor(base_estimator=None)
pred = rg.fit(train_x, train_y).predict(test_x)
from sklearn.metrics import mean_absolute_error, mean_squared_error
print(round(mean_absolute_error(test_y, pred),2))
print(round(mean_squared_error(test_y, pred), 2))
print('acc:{0}%'.format(round(rg.score(test_x, test_y)*100, 2)))

์ญ์ ๋ฐฐ๊น ๋ณด๋ค๋ ์กฐ๊ธ ๋ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ๊ฒ ๊ฐ๋ค.
3- ๋๋ค ํฌ๋ ์คํธ
X = cancer.drop(columns=['diagnosis'])
y = cancer['diagnosis']
train_x, test_x, train_y, test_y = train_test_split(X, y, train_size=0.7, random_state=1,
stratify=y)
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=500, min_samples_split=5)
pred = clf.fit(train_x, train_y).predict(test_x)
pred_proba = clf.fit(train_x, train_y).predict_proba(test_x)
clf.score(test_x, test_y)
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score
from sklearn.metrics import classification_report, plot_roc_curve, roc_auc_score
clf_report = classification_report(test_y, pred)
print(clf_report)
fig = plt.figure(figsize=(10, 6))
plot_roc_curve(clf, test_x, test_y)
plt.show()
auc_score = roc_auc_score(test_y, pred_proba[:, 1])
print(auc_score)
imp = clf.feature_importances_
collst = X.columns
fig = plt.figure(figsize=(15, 6))
plt.bar(x=collst, height=imp)
plt.show()

๋ถ์ ๊ณผ์ ์ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋๊ฐ๊ณ , ์ฑ๋ฅ ํ๊ฐ ์งํ๋ฅผ ์ฌ๋ฌ๊ฐ์ง๋ก ํํํด ๋ดค๋ค.
roc๊ทธ๋ํ์ auc score๋ฅผ ๋ณด๋ ๊ฝค ๋์ ์์ธก ์ ํ๋๋ฅผ ๊ฐ์ง๊ณ ์์. ๋ ๋ฆฝ๋ณ์ ์ค์๋ ์ญ์ concave points๊ฐ ์ ์ผ ๊ฐ๋ ฅํ ์ํฅ๋๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ bagging์ด๋ boosting ๋ถ์์ ํ ๋์ ๋ฌ๋ฆฌ ๋ค๋ฅธ ๋ณ์๋ค๋ ์ํฅ๋ ฅ์ด ์๊ธด ๊ฒ์ ๋ณผ ์ ์๋ค. ์๋ง ๋๋คํฌ๋ ์คํธ์ ํน์ฑ์ ๋ถํ ๊ธฐ์ค ๋ณ์ ๊ทธ๋ฃน์ ๊ณ์ ๋ฐ๊พธ๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ๋์ค๋ ๊ฒ ๊ฐ๋ค.
ํ๊ท ๋ฐฉ์๋ ๋น์ทํ๋ค.
usedata = carprice.select_dtypes('number')
X = usedata.drop(columns=['price'])
y = usedata['price']
train_x, test_x, train_y, test_y = train_test_split(X, y, train_size=0.7, random_state=1)
from sklearn.ensemble import RandomForestRegressor
rg = RandomForestRegressor(n_estimators=500, max_depth=5)
pred = rg.fit(train_x, train_y).predict(test_x)
print('acc score :\t{0}'.format(round(rg.score(test_x, test_y),2)))
from sklearn.metrics import mean_absolute_error, mean_squared_error
print('mae :\t{0}'.format(mean_absolute_error(test_y, pred)))
print('mse :\t{0}'.format(mean_squared_error(test_y, pred)))
print('rmse :\t{0}'.format(np.sqrt(mean_squared_error(test_y, pred))))

๊ฒฐ๊ณผ๋ ๋ฐฐ๊น ๊ณผ ๋น์ทํ๋ฉด ์กฐ๊ธ ๋ ํฅ์๋ ๊ฒ ๊ฐ๋ค. ์ ํ๋๋ ๊ฑฐ์ ๋น์ทํ์ง๋ง ๋ถ์ฐ์ด ๋ง์ด ์ค์ ๊ฒ ๊ฐ๋ค.
์ด๋ ๊ฒ ์์๋ธ ํํธ๋ฅผ ๋ง์น๋ค.. ์ด๊ฑฐ ์ฐ๋๋ผ๊ณ ๋ฐ๋์ ์ ์ด ๊ฒ ๊ฐ์๋ฐ ๊ทธ๋๋ ๋ณต์ต์ ํ๋๊น ๋ชจ๋ฅด๋ ๋ถ๋ถ๋ ํ๋ฒ ๋ ์ง๊ณ ๋์ด๊ฐ ์ ์์์ผ๋ ๋ง์กฑ!
'Daily' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 23.02.14 ํต๊ณ ๋ถ์ ํ๋ก์ธ์ค์ t-test (0) | 2023.02.15 |
|---|---|
| 23.02.11 Naive Bayes ๋์ด๋ธ ๋ฒ ์ด์ฆ (0) | 2023.02.06 |
| 23.02.04 ์์ฌ๊ฒฐ์ ๋๋ฌด (0) | 2023.02.04 |
| 23.01.31 KNN ์ต๊ทผ์ ์ด์ (0) | 2023.01.31 |
| 23.01.28 SVM ์ํฌํธ ๋ฒกํฐ ๋จธ์ (0) | 2023.01.29 |