Machine_Learning_Final

AIginner·2023년 10월 16일
1

MachineLearn

목록 보기
9/9
post-thumbnail

Machine_Learning_Project

포켓몬스터 일반/전설 몬스터 분류하기

전체 Flow

  • 목 표 -
  • 전설몬스텅 분류를 위한 데이터 셋 분석
  • 그래프, 피벗테이블을 활용 EDA 진행
  • 전처리
  • 데이터셋 분리, Base_line 과 비교하며 학습

총 코드 참조 링크
Github


하고자 하는 목적이 뭔지 정확하게 설정부터 필요!
목적에 영향을 줄 수 있는 피처 고려

1. 데이터셋 만들기

  • 라이브러리 호출
  • 데이터 불러오기 (DataFrame화 되어 있는 dataset) - pandas 활용
  • 데이터 샘플 확인
  • 원본 데이터 유지(.copy)
  • 데이터 셋의 피처(컬럼) 확인
    (label 컬럼이 존재)
  • legendary, originary 데이터 구분

2. EDA (영향을 주는 컬럼들 어떻게 처리할지 분석하는 과정)

  • 빈 데이터(결측치 NaN) 여부 확인
  • 전체 컬럼 이해하기(큰 데이터셋이 아니므로 전체적으로 확인)
  • 컬럼 수와 컬럼명 확인
  • 컬럼 별 type 확인
    (범주형 데이터와 수치형 데이터 구분해서 전처리 하기 위함)
  • len, set 함수로 중복 데이터 확인
    (unique 값 확인을 위함, ex. name 같은 경우는 unique 한 경우가 많고, '#'컬럼은 중복이 있음)
  • Type1,2 속성 확인(랜덤 인덱스 확인)
  • Type1,2 속성의 각 종류가 몇가지 인지 확인
  • 종류의 수가 다르기 때문에 (차집합 함수로 다른 type 확인)
  • Type 변수에 저장 처리
    (일반/전설 속성 분포를 확인 위함)
  • Type2에 다른 값 NaN 확인 (.isna().sum() 함수 활용)
  • 데이터 분포 시각화 (plot 활용, plt)
    1) 속성 별 데이터 분포 확인 (그래프)
    2) 속성 별 데이터 비율 확인 (피벗 테이블, pivot_tabel).sort(정렬)
  • Type2 분포도 시각화
  • Total 값 검층 (Total=stats 별 합)
    (stats을 전부 더한 컬럼 추가 생성 후 Total 컬럼과 비교)
  • 전설/일반 몬스터 Total 값에 대한 분포 plot
  • 각각의 stats 컬럼 별 분포 확인 (각 stats 마다의 분석을 위함)
  • Generation(세대) plot 으로 확인
  • Total 값들의 집합 확인 (일반/전설의 토탈 별 몬스터 수 분포 확인)
    (전설 몬스터가 특정 Total 값에 집중되어 있음 확인)
  • Name 컬럼도 영향이 있는지 확인 (pd.concat().reset_index로 전설 이름 확인)
  • Name에 전설 몬스터는 특정 단어가 많이 들어가 있음을 확인
    (분류에 있어 영향을 줌)
  • Name이 긴 경우도 전설일 경우가 많다 (해당 피처 생성)
  • Name의 길이 컬럼도 시각화
    (길이 10 이상의 이름이 많은 경우 확인)

3. 전처리

  • 분류에 영향을 주는 데이터
    1) Name(토큰화)
    2) Total,stats
    3) Type1,2 (인코딩)
  • Name의 길이 10 기준 위아래 판별 categorical 컬럼 생성 (True,False)
  • Name 컬럼 전처리
    1) 많이 쓰이는 토큰 확인하고 컬럼 생성
    2) 띄어쓰기 없애는 컬럼 생성 (.apply(lambda 식 활용)
    3) 알파벳이 아닌 문자를 포함하는 경우 처리 후 컬럼 생성
  • 알파벳이 아닌 데이터 알파벳으로 전환 (isalpha == False)
  • Name 토큰화
    1) 라이브러리 re 호출
    2) 샘플 데이터 변수에 저장
    3) 공백 기준으로 쪼개기 (토큰)
    4) 1번째 인덱스 변수에 저장
    5) 대문자 자르기 (정규표현식 사용)
    6) 위 쪼개는 과정을 for문으로 반복해서 token 화
    7) 토큰화를 모든 이름에 적용시킬 함수 생성
    8) 전체 전설의 데이터셋에 적용 (중복 확인까지)
  • 최빈 토큰 추출 (collections Counter 라이브러리 활용)
  • 가장 많이 등장하는 요소 횟수 정렬
  • 전설 몬스터 Name에 최빈도 토큰 있는지 여부의 컬럼 생성 (True면 전설일 확률이 높다)
  • Type1, 2 전처리 (one-hot-Encoding)

4. Baseline 모델 만들기

  • 원본 데이터 호출
  • 문자열을 빼야 해서 컬럼 확인 후 필요 컬럼 리스트 생성
  • target 데이터인 Legendary 컬럼 변수에 저장
  • 필요 컬럼 리스트 (features) x에 저장

5. 의사결정트리 모델 학습

  • train, test 데이터 분리 후 모델 학습
  • 채점 (confusion_matrix(), classification_report 활용)

6. 전처리 데이터로 모델 학습

  • 데이터가 크지 않으니 사용할 컬럼 변수 저장 (요약할 수 있는 코드 고민해보자)
  • target 저장
  • 전처리 한 데이터 x에 저장
  • y에 target 컬럼 저장
  • 전처리한 데이터 분리
  • 모델 학습 및 예측
  • 채점 (confusion_matrix(), classification_report 활용)
  • recall 0.62 > 0.92로 상승 확인
profile
비전공자지만 밑바닥부터 공격적으로 공부중입니다! 공부 해온 것들 정리해보고 있습니다. 잘못 된 부분 있으면 알려주세요~ 서로 공유 하고 싶습니다

0개의 댓글