Machine Learning

[네이버 부스트코스] 모두를 위한 데이터 사이언스

728x90
반응형

텐서플로우를 통한 데이터 예측

네이버 부스트코스

모두를 위한 데이터 사이언스

 

머신러닝의 과정

  1. 데이터 수집
  2. 데이터 전처리
  3. Feature Engineering : Feature Seletion / Feature Extraction / Feature Transform & Scaling
  4. 모델링 : 초개매개변수 조정
  5. 예측
  6. 평가

 

텐서플로우 활용 실습


1. 학습 데이터 준비

데이터셋 로드

import pandas as pd
import seaborn as sns
df = sns.load_dataset('mpg')
df.shape
df.head()

 

  • mpg는 sns에 저장되어있는 자동차 연비 데이터

 

결측치 확인

df.isna()  # 결측치 확인
df.isna().sum()  # 결측치 개수 확인

# 결측치 개수가 많지 않으므로 제거를 고려

 

결측치 제거

df = df.dropna()
df.shape

# 6개 (결측)데이터 제거된 것을 확인

 

수치데이터만 가져오기

  • 머신러닝이나 딥러닝은 모델 내부에서 수치 계산을 함, 숫자가 아닌 데이터는 학습과 예측을 할 수 없다
# select_dtypes를 통해 object 타입을 제거하고 가져옴
df = df.select_dtypes(exclude = 'object')
df.shape

# 2개의 열 제거    

 

전체 데이터 기술 통계 확인

df.describe()

 

데이터셋 나누기

# 전체 df에서 train, test를 분리
train_dataset = df.sample(frac = 0.8, random_state=42)  

# sample을 사용해서 분리 가능
# random_state로 랜덤 분리값 고정

train_dataset.shape
test_dataset = df.drop(train_dataset.index)  # index
test_dataset.shape

 

  • index를 사용해야 df.sample로 분리된 train_dataset과 test_dataset의 데이터가 겹치지 않는다

 

# train_dataset, test_dataset에서 label(정답) 값을 꺼내 label을 따로 생성
# 문제에서 정답을 분리하는 과정

train_labels = train_dataset.pop('mpg')
test_labels = test_dataset.pop('mpg')

print(train_labels.shape, test_labels.shape)
train_dataset.head(2)

# mpg 열 제거 확인
test_labels.head(2)

 

2. 딥러닝 모델 활용

딥러닝 모델 만들기

# tensorflow 불러오기
import tensorflow as tf
tf.__version__  # tf의 버전 체크

 

딥러닝 층 구성

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(64, input_shape=[len(train_dataset.keys())]))
model.add(tf.keras.layers.Dense(64)) # 히든레이어 1 생성
model.add(tf.keras.layers.Dense(64)) # 히든레이어 2 생성
model.add(tf.keras.layers.Dense(1))          

 

  • Dense의 첫번째 옵션으로 유닛의 개수를 지정, 임의로 64를 입력했다
  • input_shape() 옵션으로 변수의 개수(train_dataset 컬럼)를 입력해준다

 

모델 컴파일

# loss : 회귀모델 평가에 mse 사용
# metrics : 모델의 정확도 판단, 회귀의 경우 mae, mse, rmse등을 사용
model.compile(loss='mse', metrics=['mae', 'mse'])

 

  • mae : 평균절대오차 : 오차에 대한 절대값의 평균, 회귀지표로 사용
  • mse : 평균제곱오차 : 오차에 대한 제곱값의 평균, 회귀에서 손실함수로 사용

 

만든 모델 확인하기

 model.summary()

 # 히든레이어 생성으로 인해 dense_4, dense_5 확인 가능

 

딥러닝 모델로 학습하기

# .fit을 통해 학습(x, y, epochs = 반복 횟수, verbose = 표시 주기)
model.fit(train_dataset, train_labels, epochs = 10, verbose=1)

 

딥러닝 모델로 평가하기

model.evaluate(test_dataset, test_labels)

 

딥러닝 모델의 예측하기

predict_labels = model.predict(test_dataset).flatten()  # flatten : 다차원 배열을 1차원으로 평평하게 해줌
predict_labels

 

딥러닝 모델의 예측결과 평가하기

sns.scatterplot(x=test_labels, y=predict_labels)

 

  • 그래프가 우상향일 때, 딥러닝 모델이 학습을 통해 예측을 잘 했다고 볼 수 있다
  • 성능을 높이기 위해 두 가지 방법이 있다
    • 학습(.fit) 할 때 epochs를 높이는 방법 : 학습 횟수를 높인다
    • 딥러닝 층(Dense) 옵션으로 activation = 'relu' 추가

 

cf. ReLU에 대해 추가학습이 필요

 


  • 데이터 준비 과정에서 shape를 사용하면 데이터 내역을 간단하게 확인할 수 있다
  • 부스트코스에 공개된 무료 강의를 잘 활용해보자