본문 바로가기

Study/Hands-On Machine Learning

[Book] 2. 머신러닝 프로젝트 처음부터 끝까지

Book Title : Hands-On Machine Learning with Scikit-Learn, Keras & TF

지은이 : 오렐리앙 제롱

옮긴이 : 박해선

출판사 : 한빛미디어

코드 출처

https://github.com/rickiepark/handson-ml2

 

GitHub - rickiepark/handson-ml2: 핸즈온 머신러닝 2/E의 주피터 노트북

핸즈온 머신러닝 2/E의 주피터 노트북. Contribute to rickiepark/handson-ml2 development by creating an account on GitHub.

github.com


2. 머신러닝 프로젝트 처음부터 끝까지

머신러닝 용어 사전

데이터 스누핑(data snooping)

  • 테스트 세트에서 겉으로 드러난 어떤 패턴에 속아 특정 머신러닝 모델을 선택하고 해당 텍스트 세트로 일반화 오차를 추정해서 매우 낙관적인 추정을 얻었지만 실제 시스템을 론칭했을 때 기대한 성능이 나오지 않는 경우

 

표준 상관계수(standard correlation coefficient) 특징

  • 피어슨 상관계수라고도 함
  • 상관계수는 선형적인 상관관계(x가 증가하면 y는 증가하거나 감소)만 측정함
  • 즉, 비선형적인 관계는 잡을 수 없음

데이터 정제 (null값 처리)

방법 1. Padas

대부분의 알고리즘은 누락된 특성을 다루지 못하기 때문에 이를 처리해야 한다. 이때 3가지 방법 정도 있다

  1. dropna() : 해당 구역 제거
  2. drop() : 전체 특성 제거
  3. fillna() : 특정 값으로 채움

캘리포니아 주택 가격 데이터셋을 사용함

'total_bedrooms' 칼럼에 null 값이 있나 확인

# 총 null값이 몇개
df['total_bedrooms'].isnull().sum()
# 207

# null값이 하나라도 있는지 확인
df['total_bedrooms'].isnull().values.any()
# True

null 값이 있는 부분만 따로 뽑아서 데이터 프레임으로 확인하기

# 평균 값이 537
df['total_bedrooms'][690:700].mean()
# 537.4444444444445

NaN값을 중간값으로 채우기( 중간값!= 평균값)

중간값 534로 696인덱스 값이 채워졌다

median = sample_df['total_bedrooms'].median()
print(median)
# 534.0

# fillna 함수로 채우기
sample_df['total_bedrooms'].fillna(median, inplace = True)

방법 2. SimpleImputer

사이킷런의 SimpleImputer는 누락된 값을 손쉽게 다루도록 해줌

from sklearn.impute import SimpleImputer

imputer = SimpleImputer(strategy = 'median')

# 데이터 타입 확인
sample_df.dtypes
'''
longitude             float64
latitude              float64
housing_median_age    float64
total_rooms           float64
total_bedrooms        float64
population            float64
households            float64
median_income         float64
median_house_value    float64
ocean_proximity        object
dtype: object
'''

# 중간값이 수치형 특성에서만 계산될 수 있기 떄문에 object형 특성은 drop
sample_df.drop('ocean_proximity', axis = 1 ,inplace = True)

# 중간값 계산
imputer.fit(sample_df)

# 확인
imputer.statistics_
'''
array([-1.2211e+02,  3.7690e+01,  2.3000e+01,  2.2270e+03,  5.3400e+02,
        1.1400e+03,  4.7200e+02,  2.6464e+00,  1.6730e+05])
'''

# 데이터 프레임으로 확인하기
pd.DataFrame(imputer.transform(sample_df), columns = sample_df.columns, index = sample_df.index)

이외에도 null값을 처리하는 방식은 매우 다양함


덕 타이핑(duck)을 지원하는 사이킷런

  • 사이킷런은 덕 타이핑을 지원하므로 fit(), transform() 메서드를 구현한 파이썬 클래스를 만들 수 있음
책에서는 전체적인 파이프 라인을 찍먹으로 다뤘지만 블로그에서는 Null 값 처리에 대해서만 요약하였습니다

'Study > Hands-On Machine Learning' 카테고리의 다른 글

[Book] 6. 결정 트리  (0) 2022.04.23
[Book] 5. 서포트 벡터 머신  (0) 2022.04.21
[Book] 4. 모델 훈련  (0) 2022.04.20
[Book] 3. 분류  (0) 2022.04.09
[Book]1. 한눈에 보는 머신러닝  (0) 2022.04.02