머신러닝이란?
명시적인 프로그램에 의해서가 아니라, 주어진 데이터를 통해 규칙을 찾는것
머신러닝 전 사람이 직접 해보자
데이터 관찰1
iris 데이터 분석하기
sklearn 설치 후
150개 중 1 setosa가 50개 / 2 versicolor가 50개 / 3 virginica가 50개
pandas import
종 추가
박스플롯
sepal length만 가지고는 3개 품종 구분이 어려운 것을 알 수 있다.
sepal width 역시 마찬가지
petal length로는 setosa는 구분 가능
petal width로도 setosa만 구분 가능
데이터 관찰2
decision tree
과연 그 근거가 있는가?
Decision Tree
setosa 제외하고 나머지 구분해야할 데이터만 보자
Decision Tree 의 분할 기준 (Split Criterion)
정보 획득 : 정보의 가치를 반환하는데 발생하는 사전의 확률이 작을수록
정보의 가치는 커진다
정보 이득 : 어떤 속성을 선택함으로 인해서 데이터를 더 잘 구분하게 되는것
엔트로피 연습
과거에는 코드로 다 짰던 것을 Frame Work로!
Scikit Learn
가장 유명한 기계학습 오픈 소스 라이브러리
scikit learn을 통한 Decision tree 만들기
from sklearn.tree import DecisionTreeClassifier
iris_tree = DecisionTreeClassifier()
iris_tree.fit(iris.data[:,2:],iris.target)
이것이 학습 시키는 코드
fit이 학습해라 라는 뜻이고, 뒤에 iris.target으로 정답을 알려줘서 학습을 시킴
from sklearn.metrics import accuracy_score
y_pred_tr = iris_tree.predict(iris.data[:,2:])
y_pred_tr
이것은 예측해보라는 코드, 따라서 정답을 가르쳐주지 않고 예측만 시킴
데이터 나누기
Decision Tree를 이용한 Iris 분류 - 과적합
지도 학습
mlxtend 설치
from mlxtend.plotting import plot_decision_regions
plt.figure(figsize=(14,8))
plot_decision_regions(X=iris.data[:,2:], y= iris.target, clf= iris_tree, legend=2)
plt.show()
내가 가진 데이터에만 너무 적합해지면, 일반적 성능을 가질 수 없게됨
이것이 과적합
데이터나누기2
Decision Tree를 이용한 Iris 분류 - 데이터나누기
분리하기
검증하기
검증을 위해 stratify추가
X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, stratify = labels,random_state= 13 )
과적합되지 않도록 모델 성능에 제한을 거는 셈
학습시키기
from sklearn.tree import DecisionTreeClassifier
iris_tree = DecisionTreeClassifier
(max_depth =2, random_state= 13)
iris_tree.fit(X_train, y_train)
accuracy 계산
데이터 나누기 전보다 accuracy 가 떨어진 것을 확인 가능
결정경계
모델을 사용하는 방법?
데이터나누기3
Decision Tree를 이용한 Iris 분류 - 간단한 zip과 언패킹
리스트를 튜플로 만드는 zip
튜플을 dict으로