[생활코딩/머신러닝야학] 데이터 및 모델을 위한 팁(부록)

2021. 1. 21. 23:23·개발/머신러닝
728x90

[개발/머신러닝] - [생활코딩/머신러닝야학] 행 - 관측치(observed value), 열 -특성(feature)
[개발/머신러닝] - [생활코딩/머신러닝야학] 독립변수? 종속변수?
[개발/머신러닝] - [생활코딩/머신러닝야학] 머신러닝의 분류
[개발/머신러닝] - [생활코딩/머신러닝야학] 레몬네이드 판매량 예측(1) - pandas
[개발/머신러닝] - [생활코딩/머신러닝야학] 레몬네이드 판매량 예측(2) - neural network
[개발/머신러닝] - [생활코딩/머신러닝야학] 보스턴 집값 예측
[개발/머신러닝] - [생활코딩/머신러닝야학] 아이리스 품종 분류
[개발/머신러닝] - [생활코딩/머신러닝야학] 신경망의 완성-히든레이어 및 정리

 * 데이터 전처리 - 데이터 타입 보정

* 변수(칼럼)타입 확인 : 데이터.dtype
    - 변수를 범주형으로 변경: 데이터['칼럼명'].astype('category')
    - 변수를 수치형으로 변경 : 데이터['칼럼명'].astype('int') / 데이터['칼럼명'].astype('float')

* 데이터 내부의 NA값 처리
    - NA 갯수 체크 - 데이터.isna().sum()
    - NA 값 채우기 - 데이터['칼럼명'].fillna(특정숫자)

*Tip

1. 데이터의 타입을 확인하고

2. 내가 원하는 데이터의 타입으로 변경 후

3. 데이터 처리

* 데이터 전처리- NA값 처리

NaN(NA)은 정해지지 않은 값으로 0과 다른 의미를 가진다.

* 실습

1. 아이리스 품종이 숫자로 변경

2. (아이리스.dtype)각 컬럼들이 어떤 타입으로 읽어드렸는지 알려줌

3. 원핫인코딩은 [category,object]타입인경우만 변환 하기때문에 타입을 category,object 형으로 [변환] 후 진행해야한다.

4. NA값 체크 - 칼럼 별로 NA값 있는 지 확인 해준다.

5. NA값을 지워주거나 , 데이터를 변경하여 데이터를 읽거나, NA값에 평균값을 넣어준다.

6. mean 평균값 계산

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 라이브러리 사용
import pandas as pd # pip install pandas

#1. 과거의 데이터 준비
iris = pd.read_csv('https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/iris2.csv')

# 원핫인코딩 - category, object type만 변환
print(iris.dtypes)
iris_incoding_ = pd.get_dummies(iris)
print(iris_incoding_.head())

# 품종 타입을 범주형으로 바꾸어 준다. 
iris['품종'] = iris['품종'].astype('category') # 품종컬럼을 category타입으로 변환
print(iris.dtypes)
 
# 카테고리 타입의 변수만 원핫인코딩
iris_incoding_ = pd.get_dummies(iris)
print(iris_incoding_.head())
 
# NA값을 체크해 봅시다. 
print(iris.isna().sum()) # 각 컬럼에 있는 NA값을 더하여 보여준다.
print(iris.tail()) ## 데이터의 마지막 값 5개 출력
 
# NA값에 꽃잎폭 평균값을 넣어주는 방법
mean = iris['꽃잎폭'].mean()# 꽃잎폭의 평균값
print('mean = {} '.format(mean)) 
iris['꽃잎폭'] = iris['꽃잎폭'].fillna(mean) # NA값을 꽃잎폭의 평균값으로 채움
print(iris.tail())

* BatchNormalization layer를 사용하여 보다 학습이 잘되는 모델 생성

* 실습

1. 분리 이유는 BatchNormalization layer는 dense 레이어와 activation 레이어 사이에 넣어두면 효과가 좋기때문이다.

2. 레이어를 3개 쌓은것(은닉층)

3. swish는 버전 상의 문제로 'relu'으로 대체했고, 이것은 metrics 타입이라 accuracy 를 알 수 없다(이부분은 좀더 고민해 봐야겠다)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 라이브러리 사용
import tensorflow as tf # pip install --upgrade tensorflow
import pandas as pd # pip install pandas

#1. 과거의 데이터 준비
iris = pd.read_csv('https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/iris.csv')
print(iris.head())

# 원샷인코딩
iris_incoding_ = pd.get_dummies(iris)
print(iris_incoding_.head())
print(iris_incoding_.columns)

# 독립변수, 종속변수
independent_var = iris_incoding_[['꽃잎길이', '꽃잎폭', '꽃받침길이', '꽃받침폭']] #독립변수
dependent_var = iris_incoding_[['품종_setosa', '품종_versicolor','품종_virginica']]  #종속변수

print('iris 독립변수 = {}, 종속변수 = {}\n'.format(independent_var.shape ,dependent_var.shape))

independent_var_row = independent_var.shape[0]  # 독립변수 행(row)
independent_var_col = independent_var.shape[1]  # 독립변수 열(col)

dependent_var_row = dependent_var.shape[0]  # 종속변수 행(row)
dependent_var_col = dependent_var.shape[1]  # 종속변수 열(col)


# 2. 모델의 구조를 BatchNormalization layer를 사용하여 만든다.
X = tf.keras.layers.Input(shape=[4])# 독립변수의 컬럼개수
# 분리 이유는 BatchNormalization layer는 dense 레이어와 activation 레이어 사이에 넣어두면 효과가 좋기때문
H = tf.keras.layers.Dense(8)(X)
H = tf.keras.layers.BatchNormalization()(H) ## BatchNormalization layer는 dense 레이어와 activation 레이어 사이
H = tf.keras.layers.Activation('relu')(H)
 
H = tf.keras.layers.Dense(8)(H)
H = tf.keras.layers.BatchNormalization()(H)## BatchNormalization layer는 dense 레이어와 activation 레이어 사이
H = tf.keras.layers.Activation('relu')(H)
 
H = tf.keras.layers.Dense(8)(H)
H = tf.keras.layers.BatchNormalization()(H)## BatchNormalization layer는 dense 레이어와 activation 레이어 사이
H = tf.keras.layers.Activation('relu')(H)

Y = tf.keras.layers.Dense(3, activation='softmax')(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss='categorical_crossentropy') #Type of `metrics` argument not understood. Expected a list or dictionary, found: accuracy 발생

# 모델 구조 확인
model.summary()

# 3. 데이터로 모델을 학습(FIT)
model.fit(independent_var, dependent_var, epochs=10) # epochs = 전체 데이터를 몇번반복 학습할 것인지를 결정해 주는 숫자
model.fit(independent_var, dependent_var, epochs=100, verbose=0) # verbose =0 출력(로그) 표시안함

# 4. 모델을 이용
print('**** predict ****')
print(model.predict(independent_var[5:10])) #독립변수 예측값 확인 [5~10개만]

print('******check result(test)********')# 종속변수 확인
print(dependent_var[5:10])  # 종속변수결과 출력하여 예측한 값이 맞는 지 확인
print('************************************')
# 맨 마지막 데이터 5개
print('**** predict ****')
print(model.predict(independent_var[-5:]))
print('******check result(test)********')
print(dependent_var[-5:])
# 모델의 수식 확인
# print(model.get_weights())

 


부록 수업에서 많은 것을 알게 되었다. 특히 은닉충을 3개로 나누어서 하는 부분을 실제적용하려고 하니 오류가 많이 발생했다. 이부분은 좀더 공부후 개인적으로 수정해야겠다. 😂

opentutorials.org/course/4570/28989

 

부록1: 데이터를 위한 팁 - 생활코딩

수업소개 데이터 타입의 문제와 NA값의 문제를 해결하는 데이터 전처리 방법을 배웁니다. 강의  소스코드 colab |  backend.ai ########################### # 라이브러리 사용 import pandas as pd ###################

opentutorials.org

opentutorials.org/course/4570/29242

 

부록2: 모델을 위한 팁 - 생활코딩

수업소개 BatchNormalization layer를 사용하여 보다 학습이 잘되는 모델을 만들어 봅니다. 강의  소스코드 colab |  backend.ai  보스턴 집값 예측 ########################### # 라이브러리 사용 import tensorflow as

opentutorials.org

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'개발 > 머신러닝' 카테고리의 다른 글

[Google Colab Pro] 코랩 구독 하는 방법  (0) 2022.06.28
[생활코딩/머신러닝야학] 신경망의 완성-히든레이어 및 정리  (0) 2021.01.21
[생활코딩/머신러닝야학] 아이리스 품종 분류  (0) 2021.01.13
[생활코딩/머신러닝야학] 보스턴 집값 예측  (0) 2021.01.12
[생활코딩/머신러닝야학] 레몬네이드 판매량 예측(2) - neural network  (0) 2021.01.11
'개발/머신러닝' 카테고리의 다른 글
  • [Google Colab Pro] 코랩 구독 하는 방법
  • [생활코딩/머신러닝야학] 신경망의 완성-히든레이어 및 정리
  • [생활코딩/머신러닝야학] 아이리스 품종 분류
  • [생활코딩/머신러닝야학] 보스턴 집값 예측
호이호이209
호이호이209
이것저것 기록하는 메모장
    250x250
  • 호이호이209
    R=VD
    호이호이209
    • R=VD전체글 (83)
      • 개발 (63)
        • Linux (19)
        • 머신러닝 (10)
        • Git (6)
        • Python (9)
        • 프로그래밍 언어 (2)
        • Docker (5)
        • ETC (12)
      • 일상기록 (20)
        • 여행 (5)
        • 일상-이모저모 (8)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
호이호이209
[생활코딩/머신러닝야학] 데이터 및 모델을 위한 팁(부록)
상단으로

티스토리툴바