뮤트 개발일지

AIFFEL 아이펠 14일차 본문

AIFFEL

AIFFEL 아이펠 14일차

박뮤트 2022. 1. 17. 18:47

이번 노드는 목차가 너무 길고, 데이터를 분석하고 전처리 하는 과정도 길었다. 내용이 어렵지는 않았으나 흐름을 따라가기 어려운 느낌이었다.(이걸 왜 이 부분에서 살펴보지?와 같은 느낌) 그래서 목차를 쭉 써놓고 내 기준대로 적을만한 내용을 적는 걸로 오늘 노드는 정리하려고 한다.


탐색적 데이터 분석 Exploratory Data Analysis, EDA

포켓몬 게임 데이터를 분석할 것

https://www.kaggle.com/abcsds/pokemon

 

Pokemon with stats

721 Pokemon with stats and types

www.kaggle.com

라이브러리 가져오기

numpy, pandas: 1차원 또는 2차원 형식의 표 데이터를 다루는 라이브러리

seaborn, matplotlib: 데이터를 시각화할 때 사용

 

데이터셋 pandas로 불러오기

 

빈 데이터 확인하기

 

전체 컬럼 이해하기

800개의 행, 13개의 열이 존재한다.

 

데이터 살펴보기

#: ID number

Name: 이름

Type1 & Type2: 속성 1, 2

Type1 데이터 분포 plot

Type2 데이터 분포 plot

Total: 모든 스탯의 총합

Total 값에 따른 분포 plot

세부 스탯: HP, Attack, Defense, Sp.Atk, Sp.Def, Speed

각 스탯에 대한 분석

Generation: 포켓몬의 세대

전설의 포켓몬 Total 값

특정 단어가 들어가 있는 이름

긴 이름

===> 각 데이터를 살펴보면서 전설의 포켓몬과 일반 포켓몬의 차이점을 도출했다. 전설의 포켓몬은 스탯이 높고(그래서 Total값이 높다.), 특정 단어가 들어가거나 이름이 긴 포켓몬이 많았다.

 

전처리하기

이름의 길이가 10 이상인가 아닌가

이름에 알파벳이 아닌 문자가 들어가 있는 경우 전처리하기

이름을 띄어쓰기&대문자 기준으로 분리해 토큰화하기

===> 이 과정에서 정규표현식을 사용했다.

https://wikidocs.net/4308

 

07-2 정규 표현식 시작하기

[TOC] ## 정규 표현식의 기초, 메타 문자 정규 표현식에서 사용하는 메타 문자(meta characters)에는 다음과 같은 것이 있다. > ※ 메타 문자란 원래 ...

wikidocs.net

# 데이터셋에 있는 이름을 토큰화하는 함수
def tokenize(name):
    name_split = name.split(" ")
    
    tokens = []
    for part_name in name_split:
        a = re.findall('[A-Z][a-z]*', part_name)
        tokens.extend(a)
        
    return np.array(tokens)

Counter 패키지: list, set의 자료형에서 각 요소의 개수를 다루고 싶을 때 사용한다. collection은 순서가 있는 딕셔너리인 OrderedDict, 요소의 개수를 카운트하는 Counter 등 다양한 모듈을 제공한다. 

(토큰이 사용된 개수를 알기위해 Counter 객체 사용)

 

Type1 & Type2 범주형 데이터 전처리하기

원-핫 인코딩: 주어진 카테고리 중 하나만1(true), 나머지는 0(false)로 나타나도록 인코딩 하는 방식

 

가장 기본 데이터로 만드는 베이스라인Baseline

===> 처음에 데이터를 복사해서 원 데이터는 original에, 복사한 데이터는 pokemon에 넣고 전처리 과정을 거쳤다. 원 데이터를 사용해서 모델을 학습시킨 것과 전처리를 한 데이터로 학습시킨 것을 비교하였다. 전처리의 중요성!을 알기 위해!(그리고 원 데이터가 필요한 상황이 많다고 한다. 복사하는 것을 습관화하자!)

===> train, target, test 값을 나눈다. 포켓몬 데이터에서 Legendary 컬럼은 타켓값이 되므로 train, test 데이터에는 빼줘야한다는 것 

 

의사 결정 트리 모델 학습시키기

TN(True Negative): 옳게 판단한 negative, 일반 포켓몬을 일반 포켓몬이라고 판단

FP(False Positive): 틀리게 판단한 Positive, 일반 포켓몬을 전설의 포켓몬이라고 잘못 판단

FN(False Negative): 틀리게 판단한 negative, 전설의 포켓몬을 일반 포켓몬이라고 잘못 판단

TP(True Positvie): 옳게 판단한 positvie, 전설의 포켓몬을 전설의 포켓몬이라고 판단

(이건 아직도 안 익숙하다.. 하나씩 쓰면서 이해해야하는..)

 

Recall

Recall이 낮다는 것은 분모의 FN이 높다는 것. 즉, 전설의 포켓몬을 일반 포켓몬이라고 잘못 판단한 경우

Recall이 높을 수록 정확도가 올라간 것이다.

피쳐 엔지니어링 데이터로 학습시키면 얼마나 차이가 나는지

 

의사 결정 트리 모델 학습시키기

'AIFFEL' 카테고리의 다른 글

AIFFEL 아이펠 16일차  (0) 2022.01.25
AIFFEL 아이펠 15일차  (0) 2022.01.24
AIFFEL 아이펠 13일차  (0) 2022.01.13
AIFFEL 아이펠 12일차  (0) 2022.01.12
AIFFEL 아이펠 11일차  (0) 2022.01.11