셀프스터디/빅데이터 분석기사

[11.27 토] 빅데이터 분석기사 실기 - Machine Learning (1~4강)

티로즈 2021. 11. 27. 16:04

1. 머신러닝(Machine Learning) 과정

 

2. Machine Learning - 전처리

1-1.문제지와 실제 dtype차이 확인

문제지 요구사항에 제시된 column의 dtype이 file에서 읽어온 데이터와 동일한지 확인하여 문제지에 제시된 것에 맞도록 변환
  • 숫자가 아닌 문자가 포함되어 있는 경우 object로 표기되며 이때는 해당 문자를 찾아 없애야 함
    • 일단 astype('int'), astype('float') 등을 사용하여 변환해 보고, 무엇 때문에 변환이 안되는지 오류 메시지를 확인함
    • 오류메시지에 따라 불필요한 문자를 제거함 (Series.replace(regex=True) 또는 Series.str.replace() 사용)
    • astype()을 사용하여 숫자형 데이터로 변경함
  • 날짜/시간 데이터의 경우 pd.to_datetime(Series, format='%Y%m%d') 를 사용하면 문제없이 변환 가능
    • 일반적인 날짜/시간 형식은 astype('datetime64')로 변경 가능
import pandas as pd

data = {'point': ['1''*2''3''*4''1'],
        'date': ['2021-01-02''2021-01-03''2021-01-04''2021-01-05''2021-01-06'],
        'gender': ['F''M''M''F''M']}
df = pd.DataFrame(data)
df.info()

 

3. 모든 column의 dtype 확인

Machine Learning을 위한 column의 dtype은 int 또는 float 이어야 한다
  • 범주형 데이터는 LabelEncoding 또는 OneHotEncoding을 사용하여 수치형으로 변경
  • 날짜/시간 데이터는 dt를 사용하여 year, month, day, hour, weekdays, quarter .. 등 정보를 분할하여 Feature로 사용함
    • 분할 정보의 nunique() 가 1이거나 var() 가 0 값인 것은 의미 없으므로 Feature로 사용하지 않음 #한가지 값으로만 된 경우는 ML에 사용하지 않음
#위 코드에 이어서 계속
print(df['datetime'].dt.day.nunique()) #var, nunique의 값을 확인해서 feature로 사용할 수 없는 값 확인
df['day'] = df['datetime'].dt.day
df['gender_LE'] = df['gender'].replace({'F':0'M':1})
df2 = df[['point_num''day''gender_LE']] #사용할 feature만 새로 저장
df2.info()

 

4. train, test 데이터

train, test 데이터는 세 개의 파일로 나뉘어 제공됨
  • train 데이터 : 학습용 데이터, X_train.csv, Y_train.csv
    • 학습 모델을 만들 때 사용
    • 성능 예측을 위해 2개 나누어 사용 또는 GridSearchCV 사용
  • test 데이터 : 평가용 데이터, X_test.csv
    • 제출 용도의 파일 작성에 사용
    • train 데이터로 생성된 학습 모델을 사용하여 평가용 파일 작성
  • train, test 데이터의 X(입력) Feature
    • 동일한 가공 처리가 되어야 함
    • Feature 순서, 개수가 동일해야 함
    • 2차원의 형태이어야 함
  • train 데이터의 Y(출력, target)은 한 개의 column으로 1차원 형태이어야 함
  • train, test 데이터가 서로 섞여서는 안됨
  • test 데이터는 그 행의 순서나 개수가 변경되어서는 안됨 (shuffle, drop 금지)

 

5. 결측치

  • Machine Learning에 사용되는 데이터는 결측치를 가지고 있으면 안됨
  • train, test 데이터를 보고 양쪽에 결측치가 있는 경우 채우기를 실행하고,
  • train 데이터만 결측치가 있는 경우 삭제/채우기 등 원하는 처리를 할 수 있음

 

6. 평가 결과 제출

  • 원하는 의도를 잘 파악하여 파일에 쓰기 하여 제출해야 함
  • 다양한 평가 도구를 사용할 수 있어야 하며, 결과를 파일에 저장할 수 있어야 함

 

7. 도움말 사용법

  • sklearn에서 사용할 도구의 import 방법을 암기
  • dir(), help() 등의 기능을 잘 사용하도록 함

 

8. 자녀의 키 예측 : 부모의 키를 사용하여 자녀의 키 예측하기

# [0] train, test 파일 가져오기
X_train = pd.read_csv('X_train.csv')
Y1_train = pd.read_csv('Y1_train.csv')
X_test = pd.read_csv('X_test.csv')
  • DataFrame.corr() : 각 Feature 간 상관관계를 확인할 수 있는 DataFrame을 생성함
  • -1 ~ 1의 사이 값을 갖으며, 0인 경우 상관관계가 없는 것임
# [1] 아빠, 엄마, 아들 키의 상관관계 #입력데이터끼리는 상관관계가 낮은 것이, 출력데이터와 입력데이터는 높은 것이 좋음
df= X_train.copy()
df['아들'] = Y1_train['아들']
df.corr()
# [2] 데이터 지정하기
# 아빠, 엄마의 키를 사용해 아들의 키를 예측 (X=[아빠, 엄마], Y1=[아들]) => 필요없는 데이터는 제외하고 학습용으로 사용
X = df[['아빠''엄마']]
Y1 = df['아들']
Y1
# [3] 아들 키를 예측하는 모델 만들어 분석하기
from sklearn.linear_model import LinearRegression #회귀분석_선형분석
model = LinearRegression()
model.fit(X, Y1) #해당 모델로 학습

# [4] 아들 모델 성능 평가하기
model.score(X, Y1) #1에 가까울수록 좋음

# [5] 결과를 표로 작성하기 (예측, 오차)
result = df[['아빠''엄마','아들']]
result['아들예측'] = model.predict(X) #모델을 이용해서 예측 값 알아내기
result['아들오차'] = result['아들'] - result['아들예측']
result

 

9. 기울기(회귀계수), 절편확인, 객체를 파일로 저장

# [1] 기울기, 절편 확인하기
print(model.coef_)
print(model.intercept_)
# [2] 모델 저장하기
import shelve

with shelve.open('height'as data:
    data['model_son'] = model
    data['model_daughter'] = model_d
print('저장완료'
# [3] 모델 불러오기
import shelve

with shelve.open('height'as data:
    A = data['model_son']
    B = data['model_daughter']
print('불러오기 완료'

 

출처 : EduAtoZ