728x90
반응형
텐서플로우를 통한 데이터 예측
네이버 부스트코스
모두를 위한 데이터 사이언스
머신러닝의 과정
- 데이터 수집
- 데이터 전처리
- Feature Engineering : Feature Seletion / Feature Extraction / Feature Transform & Scaling
- 모델링 : 초개매개변수 조정
- 예측
- 평가
텐서플로우 활용 실습
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를 사용하면 데이터 내역을 간단하게 확인할 수 있다
- 부스트코스에 공개된 무료 강의를 잘 활용해보자
'Machine Learning' 카테고리의 다른 글
[모두를 위한 딥러닝] 02_Linear Regression (0) | 2021.12.08 |
---|---|
[모두를 위한 딥러닝] 01_Machine Learning Basics (0) | 2021.12.08 |