Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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 31
Archives
Today
Total
관리 메뉴

데이터분석 공부하기

[핸즈온 머신러닝]-제 2장: 머신러닝 프로젝트 처음부터 끝까지 본문

머신러닝

[핸즈온 머신러닝]-제 2장: 머신러닝 프로젝트 처음부터 끝까지

Eileen's 2021. 8. 29. 18:05

[머신러닝 프로젝트 가이드/체크리스트]

  1. Define problem & Draw big picture
  2. Data Collection
  3. EDA
  4. Preprocessing : 데이터의 내제 패턴을 ML알고리즘에 잘 드러나도록 데이터 준비
  5. Model Selection : 여러 모델을 시험 -> 가장 좋은 몇 개 선택
  6. 모델 튜닝, 최적 솔루션 생성
  7. 솔루션 출시
  8. 시스템 론칭, 모니터링, 유지 보수

[실제 데이터로 프로젝트 수행해보기]

-캘리포니아 인구조사 데이터를 사용해 주택 가격 모델 생성

-데이터 : 블록 그룹마다 인구, median 소득, median 주택 가격 등 포함 -> 새로운 데이터(블록)의 median 주택 가격 예측

 

1. 문제 정의 :
  1) Big Picture : "비즈니스의 목적이 무엇인가?", "현재 솔루션은 어떻게 구성이 되어있나?"

  2) 시스템 설계 :  지도 학습 vs 비지도 학습 vs 강화 학습; 회귀 vs 분류; 배치 vs 온라인

  3) 성능 측정 지표 선택 : 회귀-RMSE, MAE

  4) 가정 검사 (check assumption): 당연하다고 생각했던 가정을 확인해보기 

 

2. 데이터 수집 : 

  1) 작업환경 만들기 : 파이썬 설치, 작업 디렉터리 생성, 파이썬 패키지 설치

  2) 데이터 다운로드 

  3) 데이터 구조 파악 : head(), info(), describe(), value_counts(), hist()
  4) 테스트 세트 생성 : train_test_split(random_state=); StratifiedShuffleSplit
     *데이터 스누핑 편항(data snooping bias)를 막기위해 데이터를 상세하게 파악하지 않고 데이터를 분리한다.
     *계층적 샘플링(Stratified Sampling):계층이라는 동질의 그룹으로 나누고, 테스트 세트가 전체 인구를 대표하도록 계층별 샘플 추출        

 

3. EDA(데이터 이해를 위한 탐색/시각화) :  

  1) 훈련 세트 복사본 만들기 : .copy()  

  2) 시각화 : 산점도
         [참고] https://stackoverflow.com/questions/59602819/what-do-c-and-s-mean-as-parameters-to-matplotlibs-plot-function

  3) 상관관계 :  corr(), scatter_matrix()    *상관계수는 선형적 상관관계만 측정, 비선형의 경우 독립적이지 않음에도 '0'으로 나옴

  4) 특성 조합 실험 
-> 시각화, 상관관계, 특성 조합 실험을 통해 데이터를 탐색한다 (이상치, 주목할만한 상관관계, 조합), 빠른 prototype을 만들고 반복한다.

 

4. Preprocessing(ML 알고리즘을 위한 데이터 준비) : 
     * 이 작업을 함수로 만들어 자동화 한다:  어떤/새로운 dataset에서도 손쉬운 변환 반복, 향후 project에 사용할 변환 library 점진 구축,
             실 시스템에서 알고리즘에 새 데이터 주입 전 변환하는데 사용 가능, 여러 데이터 변환을 쉽게 시도하고 가장 좋은 조합 확인 편리 *
  1) 타깃값 분리 : 본 훈련 세트(카피본 x)에서 예측 변수와 타깃값에 같은 변형을 적용하지 않기 위해 서로 분리
  2) 데이터 정제 : Null data(dropna(), drop(), fillna(); SimpleImputer()

  3) 텍스트/번주형 특성 다루기 : OrdinalEncoder(), OneHotEncoder() *categoires_인스턴스 변수로 카테고리 리스트 조회
        -OneHotEncoding 후 출력은 사이파이 희소행렬임으로 toarray()로 넘파이로 변경

        -카테고리 특성 수가 많다면(ex-직업, 생물 종류 등), 원-핫 인코딩은 많은 입력 수를 만들어 훈련을 느리게 하고, 성능을 감소시킴 -
           -> 범주형 특성관련 숫자형으로 변경 추천 (ex> ocean_proximity -> 해안까지의 거리)

        -나만의 변환기 :  fit(), transform(), fit_transform()메서드를 구현한 python class 생성 

  4) 특성 스케일링(feature scaling) : * 훈련데이터에서만 fit() 적용, 훈련/테스트 세트(& new 데이터)에서는 transform()사용

        1. 정규화(normalization, a.k.a. mix-max 스케일링) : MinMaxScalar변환기; 0~1 범위 값; (data-최소값)/(최대값-최소값)

        2. 표준화(regularlization) : StandardScaler변환기; (data-평균)/(표준편자) -> 분표의 분산= 1 (상한/하안 x; 이상치영향 적음)

      

 

*sklearn fit(), transform(), fit_transform: https://dsbook.tistory.com/107