본문 바로가기

멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차/ML

3/31 목

728x90

목요일!

 

오늘은 우리가 주력으로 사용할 Tensorflow를 배운다! 🐱‍🏍

 

수행평가 또 나왔넹..

데이터 핸들링 2 + 머신러닝(다중선형회귀) 1. 4/5 화요일까지 제출!!

Ozone 데이터로 다중선형회귀를 3가지 방법(Python, Sklearn, Tensorflow)으로 구현, 예측치가 비슷하게 나와야 한다!

당연히 데이터 전처리(결치값, 이상치, 정규화)도~

 

가장 많이 쓰이는 딥러닝 오픈소스 라이브러리는 Google의 Tensorflow와 Facebook의 PyTorch~

 

Sklearn은 데이터 양과 변수가 많아지면 속도가 굉장히 느려지기 때문에, Tensorflow를 이용한다.

Tensorflow 2.0 ver.이 등장하면서 이전 버전과는 완전히 다르게 바뀌었다.

 

기존에 만들었던 가상환경(machine)에는 Tensorflow 1.15 ver.을, 새로운 가상환경에는 2 ver.을 설치한다.

conda install tensorflow==1.15

하지만!! 사용 중인 Python은 3.8 ver.이기 때문에, Tensorflow 1.15 ver.과 호환이 안 된다..

(Dependency 때문에 Python 3.6~3.7 ver. 필요)

 

어쩔 수 없이 새로운 가상환경을 만들자

conda deactivate
conda create -n machine_TF15 python=3.7 openssl
conda activate machine_TF15
conda install numpy
conda install pandas
conda install matplotlib
pip install sklearn
conda install nb_conda # Jupyter Notebook
conda install tensorflow==1.15

 

1. data flow graph : Node(수치계산, 데이터의 입출력)와 Edge(Tensor가 지나가는 통로)로 구성된 방향성 있는 graph

Tensor는 다차원 배열

data flow graph

import tensorflow as tf # 1.15 ver.

node1 = tf.constant(10, dtype=tf.float32) # 상수 node를 만들자
node2 = tf.constant(30, dtype=tf.float32)

node3 = node1 + node2

sess = tf.Session() # 그래프를 실행시켜주는 Session이 필요하다

print(sess.run(node1)) # 10.0. graph를 실행시킴
print(sess.run(node3)) # 40.0
print(sess.run([node1, node3])) # [10.0, 40.0]

#------------------------------------------------------------------------------------

# 만약 다차원 데이터가 입력되려면 shape을 지정해야함. 나중에 입력 받을 값을 실수로 사용하겠다
# node1 = tf.placeholder(shape=[2,2], dtype=tf.float32)

node1 = tf.placeholder(dtype=tf.float32) # scalar
node2 = tf.placeholder(dtype=tf.float32)

node3 = node1 + node2

sess = tf.Session()

result = sess.run(node3, feed_dict={node1: 10, node2: 30}) # 입력이 없는 상태에서 sess을 실행하면 오류. feed로 초기값을 지정해줌

print(result) # 40.0

 

2. Exam 예제에 Tensorflow를 사용해서 다중선형회귀를 구현해보자

 

# Q1, Q2, Q3, Exam 예제에 Tensorflow를 사용해서 다중선형회귀를 구현해보자
import numpy as np
import pandas as pd
import tensorflow as tf

# Raw Data Loading
df = pd.read_csv('./data/student_exam_score.csv')
# display(df.head())

# Training Data Set
x_data = df.drop('exam', axis=1, inplace=False) # (25, 3)
t_data = df['exam'].values.reshape(-1,1) # (25, 1)

# 학습종료 후 예측
# predict_data = np.array([[90, 100, 95]]) # (1, 3)

# Placeholder
X = tf.placeholder(shape=[None, 3], dtype=tf.float32) # Shape는 입력값이 어떻든 상관없지만, 열은 3개다
T = tf.placeholder(shape=[None, 1], dtype=tf.float32) # Shape는 입력값이 어떻든 상관없지만, 열은 1개다

# Weight, bias. 파이썬의 변수처럼 텐서플로에도 변수처럼 작동하는 Node를 쓰자
W = tf.Variable(tf.random.normal([3,1])) # Shape는 (3, 1). 표준 정규분포에서 난수를 추출
b = tf.Variable(tf.random.normal([1]))

# model(hypothesis, 가설) y = Wx + b
H = tf.matmul(X,W) + b

# loss function. Error(오차, t-y)를 가지고 동작하는 Node
loss = tf.reduce_mean(tf.square(H - T)) # square과 reduce_mean으로 오차의 제곱의 평균(MSE) 구하자

# train node를 생성하자. 경사하강법과 learning rate와 최소 MSE. loss를 가지고 동작하는 Node
train = tf.train.GradientDescentOptimizer(learning_rate=1e-7).minimize(loss)

# Session을 생성하고 초기화를 진행
sess = tf.Session()
sess.run(tf.global_variables_initializer()) # 그래프를 실행하기 전에 초기화 구문이 선행되어야 함

# 반복 학습
for step in range(300000):
    _, W_val, b_val, loss_val = sess.run([train, W, b, loss], feed_dict={X: x_data, T: t_data})
    if step % 30000 == 0:
        print('W : {}, b: {}, loss : {}'.format(W_val, b_val, loss_val))

 

# 학습종료 후 예측
result = sess.run(H, feed_dict={X: np.array([[89, 100, 95]])})
print(result) # 30만번 : [[187.72133]], [[195.62724]], [[191.56349]] / 40만번 : [[194.6791]]

 

3. 수행평가 : Ozone 데이터로 다중선형회귀를 3가지 방법(Python, Sklearn, Tensorflow)으로 구현

 

여기까지가 Linear Regression!


이제부터 Classification!

 

Linear Regression을 확장해서 Classification(분류)가 가능한 모델로 만듦

- Binary Classification(이항분류) : 주식을 사야 하나 말아야 하나, 닭인가 백조인가

- Multinomial Classification(다항분류) : 학점, 등급

 

이항분류부터 살펴보고 Logistic Regression으로 넘어감! → Deep Learning의 기본 component

Logistic은 perception으로부터 기인함

 

 

1. 3/15 화 2. 3/16 수 3. 3/17 목 4. 3/18 금 5. 3/21 월
ML
환경 설정

(아나콘다, 주피터 노트북),
Pandas,

Numpy,
ndarray
ML
Numpy,

행렬곱연산,
전치행렬,
iterator,
axis,
Pandas,
Series,
DataFrame
ML
Pandas,
DataFrame,

함수들
ML
Pandas,
데이터 분석,
데이터 전처리
ML
Pandas,
데이터 전처리,
수행평가
6. 3/22 화 7. 3/23 수 8. 3/24 목 9. 3/25 금 10. 3/28 월
ML
데이터 시각화,
Matplotlib,
기술통계
ML
기술통계
ML
기술통계,
머신러닝
ML
미분,
Regression
ML
머신러닝 기법들,
Regression
11. 3/29 화 12. 3/30 수 13. 3/31 목 14. 4/1 금 15. 4/4 월
ML
Regression 구현
(Python, Scikit-Learn)
ML
Outlier,
Z-score,
MinMaxScaler,
다변수
 ML
Tensorflow,
Classification
ML
Classification,
Logistic Regression
 

* Regression에 대한 기본이 탄탄해야 다음으로 넘어갈 수 있다!

728x90

'멀티캠퍼스 프로젝트형 AI 서비스 개발 5회차 > ML' 카테고리의 다른 글

4/4 월  (0) 2022.04.05
4/1 금  (0) 2022.04.01
3/30 수  (0) 2022.03.30
3/29 화  (0) 2022.03.29
3/28 월  (0) 2022.03.28