• 검색 결과가 없습니다.

실제 데이터에 적용하여 머신러닝을 수행할 수 있다.

N/A
N/A
Protected

Academic year: 2022

Share "실제 데이터에 적용하여 머신러닝을 수행할 수 있다."

Copied!
30
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

이 교육과정은 교육부 ‘성인학습자 역량 강화 교육콘텐츠 개발'사업의 일환으로써 교육부로부터 예산을 지원 받아 고려사이버대학교가 개발하여 운영하고 있습니다.

제공하는 강좌 및 학습에 따르는 모든 산출물의 적작권은 교육부, 한국교육학술정보원, 한국원격대학협의외와 고려사이버대학교가 공동 소유하고 있습니다.

(2)

작동 원리를 설명할 수 있다.

2 랜덤포레스트 알고리즘을 실제 데이터에 적용하여 머신러닝을 수행할 수 있다.

3 보팅 앙상블 기법을

실제 데이터에 적용하여 머신러닝을 수행할 수 있다.

1 앙상블 기법의 이해

2 앙상블 기법 활용 실습(1)

3 앙상블 기법 활용 실습(2)

(3)

해결하지?어떻게

해결할까?혼자 같이 해결할까?

(4)

INE LEARNING FOR PRACTICAL USE

어려운 문제가 생겼는데어떻게

해결하지?

해결할까?혼자

여러 사람이 같이 해결할까?

(5)

INE LEARNING FOR PRACTICAL USE

여러 개의 분류기를 생성하고, 그 예측을 결합하여

더욱 정확한 예측을 도출하는 기법

강력한 하나의 모델을 사용

약한 모델 여러 개를 조합하여 사용해 강한 모델 생성

출처 : https://www.flaticon.com/

MACHINE LEARNING FOR PRACTICAL USE

알고리즘의 안정성 및 정확성 향상을 위해 수행

부트스트랩(bootstrap)과 어그리게이팅(aggregating)을 합친 단어

대표적인 모델 : 랜덤포레스트(Random Forest) 샘플을

여러 번 추출

모델을 학습

결과물을 집계

(6)

INE LEARNING FOR PRACTICAL USE

분류 모델을 여러 개 만들어서 서로 다른 학습 데이터로 학습 서로 다른 예측 값들을 투표를 통해 가장 높은 예측 값으로 결정

부트스트랩 어그리게이팅

분류기 분류기

분류기

오리지널 데이터

부트스트랩 어그리게이팅

앙상블 분류기 배깅

MACHINE LEARNING FOR PRACTICAL USE

분류기 분류기

분류기

오리지널 데이터

부트스트랩 어그리게이팅

앙상블 분류기 배깅

• 데이터를 약간 편향되도록 샘플링하는 기법

• 의사결정 트리처럼 과대적합되기 쉬운 모델을 앙상블할 때 많이 사용

(7)

INE LEARNING FOR PRACTICAL USE

부트스트랩 예시

전체 데이터 :

의사결정 트리 6개를 배깅할 경우

의사결정 트리1의 학습 데이터

1 2 3 4 5 6 7 8 9

1 2 3 4 5 1

의사결정 트리2의 학습 데이터

2 3 4 5 6 2

의사결정 트리3의 학습 데이터

3 4 5 6 7 3

의사결정 트리4의 학습 데이터

4 5 7

6 8 4

의사결정 트리5의 학습 데이터

5 6 8

7 9 5

의사결정 트리6의 학습 데이터

6 7 9

8 1 6

출처 : https://www.flaticon.com/

MACHINE LEARNING FOR PRACTICAL USE

부트스트랩

데이터 샘플링 시편향을 높임으로써 분산이 높은 모델의 과대적합 위험을 줄이는 효과를 가져옴

각 분류 모델은 총 N개의 데이터보다 적은 데이터로 학습하되,

중복된 데이터를 허용함으로써 편향이 높은 학습 데이터로 학습

데이터 샘플링 크기는

보통 전체 데이터의 60~70%를 사용

Low Variance high Variance

highBiasLowBias

(8)

INE LEARNING FOR PRACTICAL USE

어그리게이팅

어그리케이팅은 여러 분류 모델이 예측한 값들을 조합해서 하나의 결론을 도출하는 과정

결론은 투표(voting)를 통해 결정

분류기 분류기

분류기

오리지널 데이터

부트스트랩 어그리게이팅

앙상블 분류기 배깅

고양이 고양이 고양이 고양이 강아지

고양이 : 4 강아지 : 1

고양이

출처 : https://www.freepik.com/

MACHINE LEARNING FOR PRACTICAL USE

하드 보팅

배깅에 포함된 K개의 분류 모델에서 최대 득표를 받은 예측값으로 결론 도출

(9)

INE LEARNING FOR PRACTICAL USE

하드 보팅

손글씨 숫자를 보고, 숫자를 1~9로 분류하는 의사결정 트리 6개를 학습한 후,

숫자 7을 보여줬을 경우

다음과 같이 각각 분류했다고 가정

7 7 1 7 7 2

결과는그럼 7이군!

숫자 7이 가장 많네4표로

의사결정 트리1 7 의사결정 트리2 7 의사결정 트리3 1 의사결정 트리4 7 의사결정 트리5 7 의사결정 트리6 2

분류값 분류모델

숫자 7이 입력됐을 때 각 의사결정 트리의 분류값

출처 : https://www.flaticon.com

MACHINE LEARNING FOR PRACTICAL USE

소프트 보팅

소프트 보팅은 각 분류값별 확률을 합한 값을 점수로 사용해 최대 점수를 가진 분류값을 결론으로 도출

의사결정 트리1 0.9 0.1 0 0 0 0 0 0 0 의사결정 트리2 0 0.8 0.1 0.1 0 0 0 0 0 의사결정 트리3 0 0 0.1 0 0 0 0.9 0 0 의사결정 트리4 0 0 0 0.1 0 0 0.9 0 0

의사결정 트리5 0 0 0 0 0 0 1 0 0

의사결정 트리6 0.4 0 0 0 0 0 0.6 0 0 분류모델

숫자 7이 입력됐을 때 각 의사결정 트리의 분류값 별 확률 1 2 3 4 5 6 7 8 9

(10)

INE LEARNING FOR PRACTICAL USE

소프트 보팅의 각 분류값별 점수 계산 1 0.9 + 0.4 1.3 2 0.1 + 0.8 0.9 3 0.1 + 0.1 0.2 4 0.1 + 0.1 0.2

5 0 0

6 0 0

7 0.9 + 0.9 + 1 + 0.6 3.4

8 0 0

9 0 0

확률 합

분류값 최종 점수

결과는그럼 7이군!

숫자 7의 3.4점으로점수가 가장 높네!

출처 : https://www.flaticon.com

MACHINE LEARNING FOR PRACTICAL USE

다수의 결정 트리들을 배깅해서 예측을 실행하는 앙상블 기법

각 노드에 주어진 데이터를 샘플링해서 일부 데이터를 제외한 채 최적의 특징을 찾아 트리를 분기

모델의 편향을 증가시켜 과대적합의 위험을 감소

다양한 분야에서 비교적 좋은 성능을 보여줌

단일 의사결정 트리 랜덤 포레스트

Class 1

Class 1

Class 1 Class 1

Class 2

Class 1 Class 1 Class 2

Class 2 Class 1

(11)

INE LEARNING FOR PRACTICAL USE

배깅을 이용한 포레스트 구성

트리들이 서로 조금씩 다른 특성을 갖게 되어 일반화 성능을 향상할 수 있음

출처 : 위키피디아

MACHINE LEARNING FOR PRACTICAL USE

출처 : 위키피디아

class P

class P

class P

class P

(12)

INE LEARNING FOR PRACTICAL USE

출처 : https://www.flaticon.com/

이전 분류기의 학습 결과를 바탕으로

다음 분류기의 학습 데이터의 샘플 가중치를 조정하여 학습하는 방법

동일한 알고리즘의 분류기를 순차적으로 학습해서 여러 개의 분류기를 만든 후, 테스트할 때 가중 투표를 통해 예측값을 결정

대표적 모델 : XGBoost와 AdaBoost, GradientBoost

병렬적 학습배깅: 부스팅:

순차적 학습

MACHINE LEARNING FOR PRACTICAL USE

분류기 오리지날 데이터

분류기 가중된 데이터

분류기 가중된 데이터

앙상블 분류기

부스팅 기법 이해하기

(13)

INE LEARNING FOR PRACTICAL USE

부스팅 기법 이해하기

트레이닝 데이터

샘플1 학습 알고리즘 가중치 업데이트

샘플2 학습 알고리즘 가중치 업데이트

샘플T-1 학습 알고리즘 가중치 업데이트

샘플T 학습 알고리즘

최종 결정 학습 데이터

분류기1 분류기2

분류기3 분류기4

MACHINE LEARNING FOR PRACTICAL USE

부스팅 예제

인물 사진 안에 있는 인물을 보고,

남자 또는 여자로 분류하는 의사결정 트리를 부스팅

테스트 결과, 남자 분류가 미흡할 경우,

남자 학습 데이터를 보강한 후 두 번째 의사결정 트리를 학습

두 번째 의사결정 트리의 테스트 결과에 따라

학습 데이터를 보강해서 세 번째 의사결정 트리를 학습

출처 : https://www.freepik.com/, https://www.flaticon.com/

남자?여자?

(14)

INE LEARNING FOR PRACTICAL USE

가중 투표 ­ 하드 보팅

분류기의 성능에 따라 가중치를 반영하여 투표 결과를 조정

정확도 0.4 0.5 0.95 세 분류기의 정확도

분류기1 분류기2 분류기3

분류값 남자 남자 여자

세 분류기의 분류값

분류기1 분류기2 분류기3

MACHINE LEARNING FOR PRACTICAL USE

가중 투표 ­ 하드 보팅

가중 투표는 다음과 같이 진행

남자 = 0.4 + 0.5 여자 = 0.95

두 분류기가 남자라고 예측했음에도, 사진의 인물을 여자로 분류

(15)

INE LEARNING FOR PRACTICAL USE

가중 투표 ­ 소프트 보팅

단일 예측값이 아닌 모든 분류값에 대한

확률에 가중치를 곱한 값으로 최종 결론을 도출

분류값 남자 : 0.7 여자 : 0.3

남자 : 0.8 여자 : 0.2

남자 : 0.1 여자 : 0.9 소프트 보팅 계산법

분류기1 분류기2 분류기3

남자 : 0.4 * 0.7 + 0.5 * 0.8 + 0.95 * 0.1 = 0.775 여자 : 0.4 * 0.3 + 0.5 * 0.2 + 0.95 * 0.9 = 1.075

여자로분류!

DEEP LEARNING FOR PRACTICAL USE

(16)

INE LEARNING FOR PRACTICAL USE

출처 : 위키피디아

MNIST 손글씨 데이터셋을 학습시킨 후 분류 성능 비교

1 7 랜덤 포레스트 9

Class 1

Class 1 Class 1

Class 1 Class 1

(17)

INE LEARNING FOR PRACTICAL USE

랜덤 포레스트 주요 파라미터

모델에서 사용할 트리 개수

최적의 분할을 위해 고려할 피처의 최대 개수 트리의 최대 깊이

n_estimators max_features

max_depth min_samples_leaf min_samples_split

리프 노드가 되기 위한 최소 샘플 데이터 개수 자식 노드를 갖기 위한 최소한의 데이터 개수

MACHINE LEARNING FOR PRACTICAL USE

필요한 라이브러리 import

from sklearn.datasets import fetch_openml

from sklearn.model_selection import train_test_split from sklearn import tree

from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score

from sklearn.model_selection import GridSearchCV import matplotlib.pyplot as plt

import numpy as np import pandas as pd import seaborn as sns

(18)

INE LEARNING FOR PRACTICAL USE

데이터 로드 및 확인

mnist = fetch_openml('mnist_784') mnist_data = mnist.data[:10000]

mnist_target = mnist.target[:10000]

print(mnist_data)

print(mnist_data.shape) print(mnist_target)

print(mnist_target.shape)

:: 실행 결과

[[0. 0. 0. ... 0. 0. 0.]

[0. 0. 0. ... 0. 0. 0.]

[0. 0. 0. ... 0. 0. 0.]

...

[0. 0. 0. ... 0. 0. 0.]

[0. 0. 0. ... 0. 0. 0.]

[0. 0. 0. ... 0. 0. 0.]]

(10000, 784)

['5' '0' '4' ... '6' '9' '7']

(10000,)

MACHINE LEARNING FOR PRACTICAL USE

학습/테스트 데이터 나누기

X_train,X_test,y_train,y_test=train_test_split(mnist.data, mnist.target, test_size=0.2)

(19)

INE LEARNING FOR PRACTICAL USE

파라미터 없이 학습하기

dt_clf = tree.DecisionTreeClassifier() rf_clf = RandomForestClassifier() dt_clf.fit(X_train, y_train) rf_clf.fit(X_train, y_train) dt_pred = dt_clf.predict(X_test) rf_pred = rf_clf.predict(X_test)

accuracy_dt = accuracy_score(y_test, dt_pred) accuracy_rf = accuracy_score(y_test, rf_pred)

MACHINE LEARNING FOR PRACTICAL USE

파라미터 없이 학습하기

print('의사결정트리 예측 정확도: {0:.4f}'.format(accuracy_dt)) print('랜덤 포레스트 예측 정확도: {0:.4f}'.format(accuracy_rf))

:: 실행 결과

의사결정트리 예측 정확도: 0.7865 랜덤 포레스트 예측 정확도: 0.9435

(20)

INE LEARNING FOR PRACTICAL USE

모델 파라미터 확인 print(rf_clf)

:: 실행 결과

RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None, criterion='gini', max_depth=None, max_features='auto', max_leaf_nodes=None, max_samples=None,

min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2,

min_weight_fraction_leaf=0.0, n_estimators=100, n_jobs=None, oob_score=False, random_state=None, verbose=0, warm_start=False)

MACHINE LEARNING FOR PRACTICAL USE

특징 중요도 확인

ft_importances_values = rf_clf.feature_importances_

ft_importances = pd.Series(ft_importances_values)

top10 = ft_importances.sort_values(ascending=False)[:10]

plt.figure(figsize=(12,10)) plt.title('Feature Importances') sns.barplot(x=top10.index, y=top10) plt.show()

:: 실행 결과

(21)

INE LEARNING FOR PRACTICAL USE

파라미터를 사용하여 학습 rf_param_grid ={

'n_estimators' : [100, 110, 120], 'min_samples_leaf' : [1, 2, 3], 'min_samples_split' : [2, 3, 4]

}

rf_clf = RandomForestClassifier(random_state = 0)

grid = GridSearchCV(rf_clf, param_grid = rf_param_grid, scoring='accuracy', n_jobs=1)

grid.fit(X_train, y_train)

MACHINE LEARNING FOR PRACTICAL USE

모델 파라미터 확인

print('최고 평균 정확도 : {0:.4f}'.format(grid.best_score_)) print(grid.best_params_)

:: 실행 결과

최고 평균 정확도 : 0.9470 {'min_samples_leaf': 1, 'min_samples_split': 3, 'n_estimators': 110}

(22)

EARNING FOR PRACTICAL USE

(23)

INE LEARNING FOR PRACTICAL USE

출처 : 위키피디아

의사결정트리

K-NN

SVM

분류 정확도

확인

(24)

INE LEARNING FOR PRACTICAL USE

from sklearn import datasets from sklearn import tree

from sklearn.neighbors import KNeighborsClassifier from sklearn.svm import SVC

from sklearn.ensemble import VotingClassifier

from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score

import numpy as np

import matplotlib.pyplot as plt 필요한 라이브러리 import

MACHINE LEARNING FOR PRACTICAL USE

데이터 로드

np.random.seed(5)

mnist = datasets.load_digits()

features, labels = mnist.data, mnist.target

X_train,X_test,y_train,y_test=train_test_split(features,labels, test_size=0.2)

(25)

INE LEARNING FOR PRACTICAL USE

단일 모델의 정확도 측정

dtree = tree.DecisionTreeClassifier(

criterion="gini", max_depth=8, max_features=32) dtree = dtree.fit(X_train, y_train)

dtree_predicted = dtree.predict(X_test)

knn = KNeighborsClassifier(n_neighbors=299).fit(X_train, y_train) knn_predicted = knn.predict(X_test)

svm = SVC(C=0.1, gamma=0.003,

probability=True).fit(X_train, y_train) svm_predicted = svm.predict(X_test)

MACHINE LEARNING FOR PRACTICAL USE

단일 모델의 정확도 측정 print("[accuarcy]")

print("d-tree: ", accuracy_score(y_test, dtree_predicted)) print("knn : ", accuracy_score(y_test, knn_predicted)) print("svm : ", accuracy_score(y_test, svm_predicted))

:: 실행 결과 [accuarcy]

d-tree: 0.7916666666666666 knn : 0.8944444444444445 svm : 0.8916666666666667

(26)

INE LEARNING FOR PRACTICAL USE

분류값별 확률 확인

svm_proba = svm.predict_proba(X_test) print(svm_proba[0:2])

:: 실행 결과

[[0.00198803 0.00839195 0.00810019 0.00463173 0.00482916 0.88824992

0.00230768 0.00694883 0.06909342 0.00545907]

[0.00379136 0.01488566 0.80969652 0.01018209 0.00678553 0.02547445

0.00502502 0.01161747 0.10314573 0.00939618]]

MACHINE LEARNING FOR PRACTICAL USE

하드보팅

voting_model = VotingClassifier(estimators=[

('Decision_Tree', dtree), ('k-NN', knn), ('SVM', svm)], weights=[1,1,1], voting='hard')

voting_model.fit(X_train, y_train)

hard_voting_predicted = voting_clf.predict(X_test) accuracy_score(y_test, hard_voting_predicted)

:: 실행 결과

0.9444444444444444

(27)

INE LEARNING FOR PRACTICAL USE

소프트 보팅

voting_model = VotingClassifier(estimators=[

('Decision_Tree', dtree), ('k-NN', knn), ('SVM', svm)], weights=[1,1,1], voting='soft')

voting_model.fit(X_train, y_train)

soft_voting_predicted = voting_clf.predict(X_test) accuracy_score(y_test, soft_voting_predicted)

:: 실행 결과

0.8861111111111111

MACHINE LEARNING FOR PRACTICAL USE

정확도 비교 시각화 x = np.arange(5)

plt.bar(x, height= [accuracy_score(y_test, dtree_predicted), accuracy_score(y_test, knn_predicted), accuracy_score(y_test, svm_predicted),

accuracy_score(y_test, hard_voting_predicted), accuracy_score(y_test, soft_voting_predicted)]) plt.xticks(x, ['decision tree','knn','svm','hard voting','soft

voting']);

:: 실행 결과

(28)

EARNING FOR PRACTICAL USE

(29)

- 앙상블 기법의 정의 - 배깅의 이해

- 랜덤포레스트의 이해 - 부스팅의 이해

앙상블 기법 활용 실습(1)

- 랜덤 포레스트 손글씨 분류 이해하기 - 랜덤 포레스트 손글씨 분류 실습

앙상블 기법 활용 실습(2)

- 보팅 앙상블 손글씨 분류 이해하기 - 보팅 앙상블 손글씨 분류 실습

(30)

보팅 앙상블 손글씨 분류 실습을 다음 조건에 따라 분류기의 정확도를 향상해 보세요.

알고리즘 : 지도학습 알고리즘 활용

(SVM, k-NN, 나이브 베이즈, 의사결정트리)

방법 : 지도학습 알고리즘의 개수를 2개~4개로 변화시킨 후 정확도의 변화를 파악하기

서체 출처 : 에스코어드림체-㈜에스코어, 나눔글꼴체-㈜네이버, 경기천년체-경기도 이미지 출처

나의 첫 머신러닝/딥러닝, 허민석, 위키북스, 2020

• https://www.flaticon.com

• https://www.freepik.com

• 위키피디아

참조

관련 문서

이 보고서는 년도 정부 교육부 의 재원으로 한국과학창의재단의 지원을 받아 수행된 성과물임. 본 연구의 내용은 연구팀의 의견이며 교육부와

이 프로그램은 전통시장(상점가) 상인의 기본 역량 강화 및 상인들이 지역의 주체로서 지역문제를 파악하고 변화와 혁신의 필요성을 공감, 대응방안을 함께

특히 곤충체험장과 연계하여 지역 축제 중 하나인 시흥갯골축제에서 곤충 체험 부스를 운영하고, 밀웜을 포함한 다양한 곤충 음식을 직접 만들 고 시식할

정책적으로 기상여건에 영향을 많이 받는 김장채소 수급 안정을 위해 기상 및 농업관측 강화, 기상피해에 대한

◦영연방 국가뿐만 아니라 전체 FTA 체결국에 대한 농축산물 수급 및 가격 등의 시장정보 수집 강화, 국내 농업부문 경쟁력 강화 및 차별화 지원 사업, 농축산물 수출

○ 예술가 창작환경 안정화 및 질적 성장 지원을 위하여 입주작가 맞춤형 창작 환경 지원 , 입주작가 맞춤형 창작 역량 강화 프로그램 지원 , 경기창작센터 내 소통 활성화

청소년지도자 역량 강화. 

저작권법에 따른 이용자의 권리는 위의 내용에 의하여 영향을 받지 않습니다.. 이것은 이용허락규약 (Legal Code) 을 이해하기