
๋ถ๋ฅ๋ ํ์ต๋ฐ์ดํฐ๋ก ์ฃผ์ด์ง ๋ฐ์ดํฐ์ ํผ์ฒ์ ๋ ์ด๋ธ๊ฐ(๊ฒฐ์ ๊ฐ, ํด๋์ค ๊ฐ)์ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํ์ตํด ๋ชจ๋ธ์ ์์ฑ
๋ถ๋ฅ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ
- ๋ฒ ์ด์ฆ ํต๊ณ์ ์์ฑ ๋ชจ๋ธ์ ๊ธฐ๋ฐํ ๋์ด๋ธ ๋ฒ ์ด์ฆ
- ๋ ๋ฆฝ๋ณ์์ ์ข ์๋ณ์์ ์ ํ ๊ด๊ณ์ฑ์ ๊ธฐ๋ฐํ ๋ก์ง์คํฑ ํ๊ท
- ๋ฐ์ดํฐ ๊ท ์ผ๋์ ๋ฐ๋ฅธ ๊ท์น ๊ธฐ๋ฐ์ ๊ฒฐ์ ํธ๋ฆฌ
- ๊ฐ๋ณ ํด๋์ค ๊ฐ์ ์ต๋ ๋ถ๋ฅ ๋ง์ง์ ํจ๊ณผ์ ์ผ๋ก ์ฐพ์์ฃผ๋ ์ํฌํธ ๋ฒกํฐ ๋จธ์
- ๊ทผ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ ์ต์ ๊ทผ์ ์๊ณ ๋ฆฌ์ฆ
- ์ฌ์ธต ์ฐ๊ฒฐ ๊ธฐ๋ฐ์ ์ ๊ฒฝ๋ง
- ์๋ก ๋ค๋ฅธ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฐํฉํ ์์๋ธ
์์๋ธ์ ๋งค์ฐ ๋ง์ ์ฌ๋ฌ๊ฐ์ ์ฝํ ํ์ต๊ธฐ๋ฅผ ๊ฒฐํฉํด ํ๋ฅ ์ ๋ณด์๊ณผ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๋ถ๋ถ์ ๋ํ ๊ฐ์ค์น๋ฅผ ๊ณ์ ์ ๋ฐ์ดํธ ํ๋ฉด์ ์์ธก ์ฑ๋ฅ์ ํฅ์์ํค๋๋ฐ, ๊ฒฐ์ ํธ๋ฆฌ๊ฐ ์ข์ ์ฝํ ํ์ต๊ธฐ๋ก ์ฌ์ฉ๋จ.
๊ฒฐ์ ํธ๋ฆฌ(Decision Tree)๋ ๋ฐ์ดํฐ์ ์๋ ๊ท์น์ ํ์ต์ ํตํด ์๋์ผ๋ก ์ฐพ์๋ด ํธ๋ฆฌ ๊ธฐ๋ฐ์ ๋ถ๋ฅ ๊ท์น์ ๋ง๋๋ ๊ฒ
๊ท์น๋ ธ๋ ๋ ธ๋๋ ๊ท์น ์กฐ๊ฑด์ด ๋๊ณ ๋ฆฌํ๋ ธ๋๋ ๊ฒฐ์ ๋ ํด๋์ค ๊ฐ

๊ฒฐ์ ๋ ธ๋๋ ์ ๋ณด ๊ท ์ผ๋๊ฐ ๋์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋จผ์ ์ ํํ ์ ์๋๋ก ๊ท์น ์กฐ๊ฑด์ ๋ง๋ฆ
1. ์๋ธ ๋ฐ์ดํฐ ์ธํธ ์์ฑ
2. ์๋ธ ๋ฐ์ดํฐ ์ธํธ์์ ๊ท ์ผ๋๊ฐ ๋์ ์์ ๋ฐ์ดํฐ ์ธํธ ์ชผ๊ฐ๋ ๋ฐฉ์์ ์์ ํธ๋ฆฌ๋ก ๋ด๋ ค๊ฐ๋ฉฐ ๋ฐ๋ณตํ๋ ๋ฐฉ์
1) ์ํธ๋กํผ๋ฅผ ์ด์ฉํ ์ ๋ณด ์ด๋
1 - ์ํธ๋กํผ ์ง์
(์๋ก ๋ค๋ฅธ ๊ฐ์ด ์์ฌ ์์์๋ก ์ํธ๋กํผ๊ฐ ๋์)
2) ์ง๋ ๊ณ์ (๋ถํ๋ฑ ์ง์)
0์ด ๊ฐ์ฅ ํ๋ฑํ๊ณ 1๋ก ๊ฐ์๋ก ๋ถํ๋ฑ
์ง๋ ๊ณ์๊ฐ ๋ฎ์ ์์ฑ์ ๊ธฐ์ค์ผ๋ก ๋ถํ ํด ๋ฐ์ดํฐ ๊ท ์ผ๋๊ฐ ๋๋๋ก ํจ
์ฐจ๋ผ๋ฆฌ ๋ชจ๋ ๋ฐ์ดํฐ ์ํฉ์ ๋ง์กฑํ๋ ์๋ฒฝํ ๊ท์น์ ๋ง๋ค ์ ์๋ค๊ณ ๋จผ์ ์ธ์ ํ๋ ํธ์ด ๋ ๋์ ์ฑ๋ฅ์ ๋ณด์ฅโจ
Graphviz ํจํค์ง ์ฌ์ฉ
โ export_graphviz()
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import warnings
warnings.filterwarnings('ignore')
# DecisionTree Classifier ์์ฑ
dt_clf= DecisionTreeClassifier(random_state=156)
# ๋ถ๊ฝ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ฉํ๊ณ ,ํ์ต๊ณผ ํ
์คํธ ๋ฐ์ดํฐ ์ธํธ๋ก ๋ถ๋ฆฌ
iris_data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, test_size=0.2, random_state=11)
# DecisionTreeClassifier ํ์ต
dt_clf.fit(X_train, y_train)
from sklearn.tree import export_graphviz
# export_graphviz()์ ํธ์ถ ๊ฒฐ๊ณผ๋ก out_file๋ก ์ง์ ๋ tree.dot ํ์ผ์ ์์ฑํจ
export_graphviz(dt_clf, out_file="tree.dot", class_names=iris_data.target_names, feature_names = iris_data.feature_names, impurity=True, filled = True)
import graphviz
# ์์์ ์์ฑ๋ tree.dot ํ์ผ์ Graphviz๊ฐ ์ฝ์ด์ ์ฃผํผํฐ ๋
ธํธ๋ถ์์์ ์๊ฐํ
with open("tree.dot") as f:
dot_graph = f.read()
graphviz.Source(dot_graph)

๊ทธ๋ํ ์๊น์ด ์ง์ด์ง์๋ก ์ง๋๊ณ์๊ฐ ๋ฎ๊ณ ํด๋น ๋ ์ด๋ธ์ ์ํ๋ ์ํ ๋ฐ์ดํฐ๊ฐ ๋ง๋ค๋ ์๋ฏธ
์์๋
ธ๋๊ฐ ์๋ ๋
ธ๋ ๋ธ๋์น ๋
ธ๋, ๋ง๋จ ๋ฆฌํ ๋
ธ๋
petal_length <= 2.45 ๊ท์น์ด True ๋๋ False๋ก ๋ถ๊ธฐํ๊ฒ ๋๋ฉด 2๋ฒ, 3๋ฒ ๋
ธ๋๊ฐ ๋ง๋ค์ด์ง.
โก ๋ฏธ๋ฆฌ ์ ์ดํ์ง ์์ผ๋ฉด ์๋ฒฝํ๊ฒ ํด๋์ค ๊ฐ์ ๊ตฌ๋ณํ๊ธฐ ์ํด ํธ๋ฆฌ ๋
ธ๋๋ฅผ ๊ณ์ํด์ ๋ง๋ค์ด๋๊ฐ๋ ๊ณผ์ ํฉ ๋ฌธ์ ๋ฅผ ๋ฐ์
โก ํ์ดํผ ํ๋ผ๋ฏธํฐ max_depth, min_samples_leaf(์์๋
ธ๋ ์ต์๋ฐ์ดํฐ ๊ฑด์๊น์ง๋ง ๊ฐ์ง๋๋ก ๋ถํ )
๊ฒฐ์ ํธ๋ฆฌ๋ ๊ท ์ผ๋์ ๊ธฐ๋ฐํด ์ด๋ ํ ์์ฑ์ ๊ท์น ์กฐ๊ฑด์ผ๋ก ์ ํํ๋๋๊ฐ ์ค์ํ ์๊ฑด
import seaborn as sns
import numpy as np
%matplotlib inline
# feature importance ์ถ์ถ
print("Feature importance:\n{0}".format(np.round(dt_clf.feature_importances_, 3)))
# feature๋ณ importance ๋งคํ
for name, value in zip(iris_data.feature_names, dt_clf.feature_importances_):
print('{0} : {1:.3f}'.format(name, value))
# feature importance๋ฅผ column ๋ณ๋ก ์๊ฐํ ํ๊ธฐ
sns.barplot(x=dt_clf.feature_importances_, y=iris_data.feature_names)

2๊ฐ์ ํผ์ฒ๊ฐ 3๊ฐ์ง ์ ํ์ ํด๋์ค ๊ฐ์ ๊ฐ์ง๋ ๋ฐ์ดํฐ ์ธํธ ์์ฑ
from sklearn.datasets import make_classification
import matplotlib.pyplot as plt
%matplotlib inline
plt.title("3 Class values with 2 Features Sample data creation")
# 2์ฐจ์ ์๊ฐํ๋ฅผ ์ํด์ ํผ์ฒ๋ 2๊ฐ, ํด๋์ค๋ 3๊ฐ์ง ์ ํ์ ๋ถ๋ฅ ์ํ ๋ฐ์ดํฐ ์์ฑ
X_features, y_labels = make_classification(n_features=2, n_redundant=0, n_informative=2, n_classes=3, n_clusters_per_class=1, random_state = 0)
# ๊ทธ๋ํ ํํ๋ก 2๊ฐ์ ํผ์ฒ๋ก 2์ฐจ์ ์ขํ ์๊ฐํ, ๊ฐ ํด๋์ค ๊ฐ์ ๋ค๋ฅธ ์๊น๋ก ํ์๋จ.
plt.scatter(X_features[:,0], X_features[:,1], marker='o', c=y_labels, s=25, edgecolor='k')

x, y์ถ์ด 2๊ฐ์ X_feature, 3๊ฐ์ง ์ข
๋ฅ์ ์์ด 3๊ฐ์ง ์ ํ์ ํด๋์ค ๊ฐ y_labels ์๋ฏธ
[ํน์ ํ ํธ๋ฆฌ ์์ฑ ์ ์ฝ ์๋ ๊ฒฐ์ ํธ๋ฆฌ]

๊ฒฐ์ ๊ธฐ์ค ๊ฒฝ๊ณ๊ฐ ๋งค์ฐ ๋ง์์ ธ ์์ธก์ ํ๋๊ฐ ๋จ์ด์ง๊ฒ ๋จ
[min_samples_leaf=6]
# min_samples_leaf=6์ผ๋ก ํธ๋ฆฌ ์์ฑ ์กฐ๊ฑด์ ์ ์ฝํ ๊ฒฐ์ ๊ฒฝ๊ณ ์๊ฐํ
dt_clf = DecisionTreeClassifier(min_samples_leaf = 6, random_state=156).fit(X_features, y_labels)
visualize_boundary(dt_clf, X_features, y_labels)

import pandas as pd
def get_human_dataset( ):
# ๊ฐ ๋ฐ์ดํฐ ํ์ผ๋ค์ ๊ณต๋ฐฑ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์์ผ๋ฏ๋ก read_csv์์ ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ sep์ผ๋ก ํ ๋น.
feature_name_df = pd.read_csv('./human_activity/features.txt',sep='\s+',
header=None,names=['column_index','column_name'])
# ์ค๋ณต๋ ํผ์ฒ๋ช
์ ์์ ํ๋ get_new_feature_name_df()๋ฅผ ์ด์ฉ, ์ ๊ท ํผ์ฒ๋ช
DataFrame์์ฑ.
new_feature_name_df = get_new_feature_name_df(feature_name_df)
# DataFrame์ ํผ์ฒ๋ช
์ ์ปฌ๋ผ์ผ๋ก ๋ถ์ฌํ๊ธฐ ์ํด ๋ฆฌ์คํธ ๊ฐ์ฒด๋ก ๋ค์ ๋ณํ
feature_name = new_feature_name_df.iloc[:, 1].values.tolist()
# ํ์ต ํผ์ฒ ๋ฐ์ดํฐ ์
๊ณผ ํ
์คํธ ํผ์ฒ ๋ฐ์ดํฐ์ DataFrame์ผ๋ก ๋ก๋ฉ. ์ปฌ๋ผ๋ช
์ feature_name ์ ์ฉ
X_train = pd.read_csv('./human_activity/train/X_train.txt',sep='\s+', names=feature_name )
X_test = pd.read_csv('./human_activity/test/X_test.txt',sep='\s+', names=feature_name)
# ํ์ต ๋ ์ด๋ธ๊ณผ ํ
์คํธ ๋ ์ด๋ธ ๋ฐ์ดํฐ์ DataFrame์ผ๋ก ๋ก๋ฉํ๊ณ ์ปฌ๋ผ๋ช
์ action์ผ๋ก ๋ถ์ฌ
y_train = pd.read_csv('./human_activity/train/y_train.txt',sep='\s+',header=None,names=['action'])
y_test = pd.read_csv('./human_activity/test/y_test.txt',sep='\s+',header=None,names=['action'])
# ๋ก๋๋ ํ์ต/ํ
์คํธ์ฉ DataFrame์ ๋ชจ๋ ๋ฐํ
return X_train, X_test, y_train, y_test
X_train, X_test, y_train, y_test = get_human_dataset()
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
# ์์ ๋ฐ๋ณต ์๋ง๋ค ๋์ผํ ์์ธก ๊ฒฐ๊ณผ ๋์ถ์ ์ํด random_state ์ค์
dt_clf = DecisionTreeClassifier(random_state=156)
dt_clf.fit(X_train, y_train)
pred = dt_clf.predict(X_test)
accuracy = accuracy_score(y_test, pred)
print('๊ฒฐ์ ํธ๋ฆฌ ์์ธก ์ ํ๋: {0:4f}'.format(accuracy))
# DecisionTreeClassifier์ ํ์ดํผ ํ๋ผ๋ฏธํฐ ์ถ์ถ
print('DecisionTreeClassifier ๊ธฐ๋ณธ ํ์ดํผ ํ๋ผ๋ฏธํฐ:\n', dt_clf.get_params())
GridSearchCV ์ด์ฉ
from sklearn.model_selection import GridSearchCV
params = {
'max_depth' : [6,8,10,12,16,20,24],
'min_samples_split': [16],
}
grid_cv = GridSearchCV(dt_clf, param_grid= params)
grid_cv.fit(X_train, y_train)
print('GridSearchCV ์ต๊ณ ํ๊ท ์ ํ๋ ์์น: {0:.4f}'.format(grid_cv.best_score_))
print('GridSearchCV ์ต์ ํ์ดํผ ํ๋ผ๋ฏธํฐ:', grid_cv.best_params_)
max_depths = [6,8,10,12,16,20,24]
#max_depth ๊ฐ์ ๋ณํ์ํค๋ฉด์ ๊ทธ๋๋ง๋ค ํ์ต๊ณผ ํ
์คํธ ์ธํธ์์์ ์์ธก ์ฑ๋ฅ ์ธก์
for depth in max_depths:
dt_clf = DecisionTreeClassifier(max_depth=depth, min_samples_split=16, random_state=156)
dt_clf.fit(X_train, y_train)
pred = dt_clf.predict(X_test)
accuracy = accuracy_score(y_test, pred)
print('max_depth = {0} ์ ํ๋: {1:.4f}'.format(depth, accuracy))
[Output]
max_depth = 6 ์ ํ๋: 0.8551
max_depth = 8 ์ ํ๋: 0.8717
max_depth = 10 ์ ํ๋: 0.8599
max_depth = 12 ์ ํ๋: 0.8571
max_depth = 16 ์ ํ๋: 0.8599
max_depth = 20 ์ ํ๋: 0.8565
max_depth = 24 ์ ํ๋: 0.8565
Fitting 5 folds for each of 8 candidates, totalling 40 fits
GridSearchCV ์ต๊ณ ํ๊ท ์ ํ๋ ์์น: 0.8549
GridSearchCV ์ต์ ํ์ดํผ ํ๋ผ๋ฏธํฐ: {'max_depth': 8, 'min_samples_split': 16}
๊ฒฐ์ ํธ๋ฆฌ ์์ธก ์ ํ๋:0.8717

์์๋ธ ํ์ต์ ์ฌ๋ฌ๊ฐ์ ๋ถ๋ฅ๊ธฐ๋ฅผ ์์ฑํ๊ณ ๊ทธ ์์ธก์ ๊ฒฐํฉํจ์ผ๋ก์จ ์ ํํ ์ต์ข
์์ธก์ ๋์ถํ๋ ๊ธฐ๋ฒ
๋ค์ํ ๋ถ๋ฅ๊ธฐ์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํฉํจ์ผ๋ก์จ ๋จ์ผ ๋ถ๋ฅ๊ธฐ๋ณด๋ค ์ ๋ขฐ์ฑ์ด ๋์ ์์ธก๊ฐ์ ์ป๋ ๊ฒ
์์๋ธ ์๊ณ ๋ฆฌ์ฆ
- ๋ณดํ
- ๋ฐฐ๊น ๋๋ค ํฌ๋ ์คํธ
- ๋ถ์คํ ๊ทธ๋๋์ธํธ ๋ถ์คํ , XGboost, LightGBM
์ฌ๋ฌ๊ฐ์ ๋ถ๋ฅ๊ธฐ๊ฐ ํฌํ๋ฅผ ํตํด ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐฉ์

๋ณดํ
์ผ๋ฐ์ ์ผ๋ก ์๋ก ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฐํฉ
๋ฐฐ๊น
๊ฐ๊ฐ์ ๋ถ๋ฅ๊ธฐ๊ฐ ๋ชจ๋ ๊ฐ์ ์ ํ์ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฐ์ด์ง๋ง, ๋ฐ์ดํฐ ์ํ๋ง์ ์๋ก ๋ค๋ฅด๊ฒ ๊ฐ์ ธ๊ฐ๋ฉด์ ํ์ต์ ์ํํด ๋ณดํ
์ ์ํํ๋ ๊ฒ
โ ๊ฐ๋ณ Classifier์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ํ๋งํด์ ์ถ์ถํ๋ ๋ฐฉ์์ ๋ถํธ ์คํธ๋ํ ๋ถํ ๋ฐฉ์์ด๋ผ ํจ โ ๊ต์ฐจ ๊ฒ์ฆ์ ์ค์ฒฉ์ ํ์ฉํ์ง ์๋ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ ๋ฐฐ๊น ๋ฐฉ์์ ์ค์ฒฉ์ ํ์ฉ
๋ถ๋ฅ๊ธฐ๊ฐ ์์ฐจ์ ์ผ๋ก ํ์ต์ ์ํํ๋, ์์์ ํ์ตํ ๋ถ๋ฅ๊ธฐ๊ฐ ์์ธก์ด ํ๋ฆฐ ๋ฐ์ดํฐ์ ๋ํด์๋ ์ฌ๋ฐ๋ฅด๊ฒ ์์ธกํ ์ ์๋๋ก ๋ค์ ๋ถ๋ฅ๊ธฐ์๊ฒ๋ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ๋ฉด์ ํ์ต๊ณผ ์์ธก์ ์งํ
1. ํ๋ ๋ณดํ
ํ๋ ๋ณดํ
์ ๋ค์์ ๋ถ๋ฅ๊ธฐ๊ฐ ๊ฒฐ์ ํ ์์ธก๊ฐ์ ์ต์ข
๋ณดํ
๊ฐ์ผ๋ก ์ ์
2. ์ํํธ ๋ณดํ
๊ฒฐ์ ํ๋ฅ ์ ๋ชจ๋ ๋ํ๊ณ ์ด๋ฅผ ํ๊ท ํด์ ์ด๋ค ์ค ํ๋ฅ ์ด ๊ฐ์ฅ ๋์ ๋ ์ด๋ธ ๊ฐ์ ์ต์ข
๋ณดํ
๊ฒฐ๊ด๊ฐ์ผ๋ก ์ ์
โจํ๋ ๋ณดํ ๋ณด๋ค๋ ์ํํธ ๋ณดํ ์ด ์์ธก ์ฑ๋ฅ์ด ์ข์์ ๋ ๋ง์ด ์ฌ์ฉ๋จ
[์ค์ต] ์์ค์ฝ์ ์ ๋ฐฉ์ ๋ฐ์ดํฐ ์ธํธ ์์ธก ๋ถ์
import pandas as pd
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
cancer = load_breast_cancer()
data_df = pd.DataFrame(cancer.data, columns = cancer.feature_names)
data_df.head(3)
# ๊ฐ๋ณ ๋ชจ๋ธ์ ๋ก์ง์คํฑ ํ๊ท์ KNN์
lr_clf = LogisticRegression(solver="liblinear")
knn_clf = KNeighborsClassifier(n_neighbors = 8)
# ๊ฐ๋ณ ๋ชจ๋ธ์ ์ํํธ ๋ณดํ
๊ธฐ๋ฐ์ ์์๋ธ ๋ชจ๋ธ๋ก ๊ตฌํํ ๋ถ๋ฅ๊ธฐ
vo_clf = VotingClassifier(estimators=[("LR", lr_clf), ("KNN", knn_clf)], voting='soft')
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, test_size=0.2, random_state=156)
#VotingClassifier ํ์ต/์์ธก/ํ๊ฐ
vo_clf.fit(X_train, y_train)
pred = vo_clf.predict(X_test)
print("Voting ๋ถ๋ฅ๊ธฐ ์ ํ๋ : {0:.4f}".format(accuracy_score(y_test, pred)))
# ๊ฐ๋ณ ๋ชจ๋ธ์ ํ์ต/ ์์ธก/ ํ๊ฐ
classifiers = [lr_clf, knn_clf]
for classifier in classifiers:
classifier.fit(X_train, y_train)
pred = classifier.predict(X_test)
class_name = classifier.__class__.__name__
print("{0} ์ ํ๋ : {1: .4f}".format(class_name, accuracy_score(y_test, pred)))
# ๊ฐ๋ณ ๋ชจ๋ธ์ ํ์ต/ ์์ธก/ ํ๊ฐ
classifiers = [lr_clf, knn_clf]
for classifier in classifiers:
classifier.fit(X_train, y_train)
pred = classifier.predict(X_test)
class_name = classifier.__class__.__name__
print('{0} ์ ํ๋: {1:.4f}'.format(class_name, accuracy_score(y_test, pred)))
[Output]
LogisticRegression ์ ํ๋: 0.9474
KNeighborsClassifier ์ ํ๋: 0.9386
๋ณดํ ์ผ๋ก ์ฌ๋ฌ๊ฐ์ ๊ธฐ๋ฐ๋ถ๋ฅ๊ธฐ๋ฅผ ๊ฒฐํฉํ๋ค๊ณ ํด์ ๋ฌด์กฐ๊ฑด ๊ธฐ๋ฐ ๋ถ๋ฅ๊ธฐ๋ณด๋ค ์์ธก ์ฑ๋ฅ์ด ํฅ์๋์ง๋ ์์.
ML ๋ชจ๋ธ์ ์ฑ๋ฅ์ ๋ค์ํ ํ ์คํธ ๋ฐ์ดํฐ ์ธํธ์ ์ํด ๊ฒ์ฆ๋๋ฏ๋ก ์ด๋ป๊ฒ ๋์ ์ ์ฐ์ฑ์ ๊ฐ์ง๊ณ ํ์ค์ ๋์ฒํ ์ ์๋๊ฐ๊ฐ ์ค์ํ ML ๋ชจ๋ธ์ ํ๊ฐ์์๊ฐ ๋จ
๋๋คํฌ๋ ์คํธ์ ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฐ์ ํธ๋ฆฌ.
๋๋คํฌ๋ ์คํธ๋ ์ฌ๋ฌ๊ฐ์ ๊ฒฐ์ ํธ๋ฆฌ ๋ถ๋ฅ๊ธฐ๊ฐ ์ ์ฒด ๋ฐ์ดํฐ์์ ๋ฐฐ๊น ๋ฐฉ์์ผ๋ก ๊ฐ์์ ๋ฐ์ดํฐ๋ฅผ ์ํ๋งํด ๊ฐ๋ณ์ ์ผ๋ก ํ์ต์ ์ํํ๋ค ์ต์ข ์ ์ผ๋ก ๋ชจ๋ ๋ถ๋ฅ๊ธฐ๊ฐ ๋ณดํ ์ ํตํด ์์ธก ๊ฒฐ์ ์ ํจ.

์ฌ๋ฌ๊ฐ์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ค์ฒฉ๋๊ฒ ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋ถํธ์คํธ๋ํ ๋ถํ ๋ฐฉ์ ์ด๋ผํจ.

๋ฐ์ดํฐ๊ฐ ์ค์ฒฉ๋ ๊ฐ๋ณ ๋ฐ์ดํฐ ์ธํธ์ ๊ฒฐ์ ํธ๋ฆฌ ๋ถ๋ฅ๊ธฐ๋ฅผ ๊ฐ๊ฐ ์ ์ฉํ๋ ๊ฒ์ด ๋๋ค ํฌ๋ ์คํธ
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
# ๊ฒฐ์ ํธ๋ฆฌ์์ ์ฌ์ฉํ get_human_dataset()๋ฅผ ์ด์ฉํด ํ์ต/ํ
์คํธ์ฉ DataFrame ๋ฐํ
X_train, X_test, y_train, y_test = get_human_dataset()
# ๋๋ค ํฌ๋ ์คํธ ํ์ต ๋ฐ ๋ณ๋์ ํ
์คํธ ์ธํธ๋ก ์์ธก ์ฑ๋ฅ ํ๊ฐ
rf_clf = RandomForestClassifier(random_state=0, max_depth=8)
rf_clf.fit(X_train, y_train)
pred = rf_clf.predict(X_test)
accuracy= accuracy_score(y_test, pred)
print('๋๋ค ํฌ๋ ์คํธ ์ ํ๋:{0:.4f}'.format(accuracy))
from sklearn.model_selection import GridSearchCV
params = {
'max_depth': [8, 16, 24],
'min_samples_leaf': [1, 6, 12],
'min_samples_split': [2, 8, 16]
}
#RandomForestClassifier ๊ฐ์ฒด ์์ฑ ํ GridSearchCV ์ํ
rf_clf = RandomForestClassifier(n_estimators=100, random_state=0, n_jobs=-1)
grid_cv = GridSearchCV(rf_clf, param_grid=params, cv=2, n_jobs=-1)
grid_cv.fit(X_train, y_train)
print('์ต์ ํ์ดํผ ํ๋ผ๋ฏธํฐ:\n', grid_cv.best_params_)
print('์ต๊ณ ์์ธก ์ ํ๋: {0:.4f}'.format(grid_cv.best_score_))
[Output]
์ต์ ํ์ดํผ ํ๋ผ๋ฏธํฐ:
{'max_depth': 16, 'min_samples_leaf': 6, 'min_samples_split': 2}
์ต๊ณ ์์ธก ์ ํ๋: 0.9165



titanic : Machine Learning from Distaster Competitions
test_data = pd.read_csv("/kaggle/input/titanic/test.csv")
test_data.head()
train_data = pd.read_csv("/kaggle/input/titanic/train.csv")
train_data.head()
from sklearn.ensemble import RandomForestClassifier
y = train_data["Survived"]
features = ["Pclass", "Sex", "SibSp", "Parch"]
X = pd.get_dummies(train_data[features])
X_test = pd.get_dummies(test_data[features])
model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
model.fit(X, y)
predictions = model.predict(X_test)
output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': predictions})
output.to_csv('submission.csv', index=False)
print("Your submission was successfully saved!")

