일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스케이링
- ICDL 파이썬
- 지도학습
- 다중선형 회귀
- 경사하강법
- 데이터 전 처리
- 평가용 데이터
- MSEE
- 데이터 분리
- 이상치 처리
- 불순도
- 퍼셉트론
- 뉴런 신경망
- 딥러닝 역사
- 알고리즘 기술
- 명목형
- 학습용데이터
- LinearRegression 모델
- 결측값 처리
- 항공지연
- 분류 머신러닝 모델
- 웹 크롤링
- 머신러닝 과정
- 수치 맵핑 기법
- 지도학습 분류
- 회귀 알고리즘 평가
- 수치형 자료
- 지니 불순도
- 더미 기법
- 가중치 업데이트
- Today
- Total
끄적이는 기록일지
[머신러닝] 04.지도학습-분류_(1) 분류란 본문
지난 시간엔 회귀에 대해 배웠습니다. 이번에는 지도학습의 분류의 예를 들어보겠습니다.
해외여행을 가려고 한다. 이 때 계획에 차질이 없게 항공지연을 피하고자 한다.
기상정보(구름양, 풍속)를 활용하여 해당 항공의 지연여부를 예측할 수 있다면?
0. 문제정의
1) 데이터: 과거 기상 정보(풍속) X과 그에 따른 항공 지연 여부 Y
2) 목표: 현재 풍속에 따른 항공 지연 여부 예측하기
→ 분류 알고리즘 이용
1. 분류란?
1) 주어진 입력 값이 어떤 클래스에 속할지에 대한 결괏값을 도출하는 알고리즘
2) 다양한 분류 알고리즘이 존재하며, 예측 목표와 데이터 유형에 따라 적용
3) 분류 문제 다양한 머신러닝 모델 사용
트리 구조 기반 | 의사결정나무, 랜덤포레스트, ... |
확률 모델 기반 | 나이브 베이즈 분류기, ... |
결정 경계 기반 | 선형 분류기, 로지스틱 회귀, 분류기, SVM, ... |
신경망 | 퍼셉트론, 딥러닝 모델, ... |
... | ... |
→ 여기서는 가장 간단하면서도 성능이 좋은 의사결정나무를 사용해보겠습니다.
2. 의사결정나무(Decision Tree)
1) 스무고개와 같이 특정 질문들을 통해 정답을 찾아가는 모델
2) 맨 위(뿌리 마디)에서부터 마지막(끝마디)까지 아래로 내려간다.
3) 항공 지연 알고리즘 해결방안
- 풍속 4m/s (feature X)를 기준으로 지연 여부(lable Y)를 나누면
• 풍속 4m/s 보다 크면 지연
• 풍속 4m/s 보다 작으면 지연 없다.
4) 만약 데이터가 한 질문으로 나누어지지 않는 경우라면,
중간 마디를 추가하여 나눈다.
- 먼저 feature X를 2의 기준으로 분리한 후, 2보다 큰 경우의 데이터들을 다시 4 기준으로 나눈다.(질문 2개)
5) 두 개이상의 feature 데이터도 마찬가지로, 먼저 X1을 A와 B로 나눈 후, X2기준을 4로 나누면 깔끔하게 나눌 수 있다.
6) 의사결정나무 구조를 정리해보자면, 아래와 같이 설명할 수 있다.
5. 실습
항공지연 데이터
1. binary_tree 함수는 입력하는 threshold 풍속을 기준으로 지연 여부를 예측한
결과를 DataFrame 형태로 출력합니다. data의 지연 여부와 예상 지연 여부가
같은 값이 나오도록 의사결정나무의 결과물을 data_pred에 저장하세요.
* threshold 에 값을 넣어서 결과를 확인합니다. (ex) 1, 2, 3.5, …)
import numpy as np
import pandas as pd
# 풍속을 threshold 값(binary_tree의 기준값)에 따라 분리하는 의사결정나무 모델 함수
def binary_tree(data, threshold):
# 빈 리스트 초기화
yes = []
no = []
# data로부터 풍속 값마다 비교를 하기 위한 반복문
# for 변수 in data
for wind in data['풍속']:
# threshold 값과 비교하여 분리합니다.
if wind > threshold:
yes.append(wind) #yes리스트에 추가
else:
no.append(wind) # no리스트에 추가
# 예측한 결과를 DataFrame 형태로 저장합니다.
data_yes = pd.DataFrame({'풍속': yes, '예상 지연 여부': ['Yes']*len(yes)})
data_no = pd.DataFrame({'풍속': no, '예상 지연 여부': ['No']*len(no)})
# 데이터 no에다가 yes 추가
return data_no.append(data_yes,ignore_index=True)
# ignore_index : 새롭게 인덱스 생성(원래는 0,1,2 0,1,2)
# 풍속에 따른 항공 지연 여부 데이터
Wind = [1, 1.5, 2.5, 5, 5.5, 6.5] #풍속
Delay = ['No', 'No', 'No', 'Yes', 'Yes', 'Yes'] #지연
# 위 데이터를 DataFrame 형태로 저장합니다.
data = pd.DataFrame({'풍속': Wind, '지연 여부': Delay})
print(data,'\n')
"""
1. binary_tree 모델을 사용하여 항공 지연 여부를 예측합니다.
"""
data_pred = binary_tree(data, threshold = 3) # 3 or 4
print(data_pred,'\n')
>>> 풍속 지연 여부
0 1.0 No
1 1.5 No
2 2.5 No
3 5.0 Yes
4 5.5 Yes
5 6.5 Yes
풍속 예상 지연 여부
0 1.0 No
1 1.5 No
2 2.5 No
3 5.0 Yes
4 5.5 Yes
5 6.5 Yes
'AI실무' 카테고리의 다른 글
[머신러닝] 04.지도학습-분류_(3) 분류 평가 지표 (0) | 2021.10.03 |
---|---|
[머신러닝] 04.지도학습-분류_(2) 의사결정나무-불순도 (1) | 2021.10.03 |
[머신러닝] 03.지도학습-회귀_(3) 회귀 성능 지표 (0) | 2021.09.25 |
[머신러닝] 03.지도학습-회귀_(3) 다중 선형 회귀 (0) | 2021.09.25 |
[머신러닝] 03.지도학습-회귀_(2) 단순 선형 회귀 (0) | 2021.09.25 |