딥러닝-1단계(지도학습-분류/회귀)

엔지니어 큐브·2023년 9월 4일
0

딥러닝

목록 보기
1/5

딥러닝 기본 개념

  • 1) 인공지능 > 머신러닝 > 딥러닝의 구조를 갖고 있다.

  • 2) 딥러닝에 쓰이는 라이브러리는 1. tensorflow 2. pytorch가 있다.

  • 3) 딥러닝은 epochs(반복)을 통해 loss를 줄임으로써, 정확한 모델을 만드는 것이 목표이다.

  • 4) onehot-encoding은 머신러닝에서 사용했던 정규화 방법인 pd.get_dummies를 사용한다.
    • ex) 봄/여름/가을/겨울
    • onehot-encoding의 경우, 각각의 칼럼 4개가 형성되며 해당 될 때, 1의 값을 갖고 나머지는 0의 값을 갖는다.
    • 머신러닝에서는 pd.get_dummies(drop_firtst=True)를 같이 입력했었는데, 그렇게 하면 000 일 때의 한 값이 배정되고 4개의 칼럼이 아니라 3개의 칼럼만 형성된다.
    • 즉, softmax의 개념 중 총 합이 1이 되는 정의와 어긋난다.
    • 따라서, 딥러닝에서는 y = pd.get_dummies(y, columns=target)만 작성해야 한다. 안하면 실행안됨.

  • 5) LinearRegressor / LogisticRegressor 두 방법 공통적으로 예측을 하고자 할 때 사용된다.

  • 6) 분류 모델의 경우:

  • 종속변수가 1개일 때 - > 'sigmoid'
  • 종속변수가 1개일 때 -> loss = 'binary_crossentropy'

  • 종속변수가 2개 이상일 때 -> 'softmax' 사용한다.
  • 종속변수가 2개이상일 때 -> loss = 'categorical_crossentropy' 사용한다.

실습 1(레모네이드)

# 1. 라이브러리 호출
import pandas as pd
import tensorflow as tf
---------------------------------------------------------
# 2. 데이터 준비
레모네이드 = pd.read_csv(path)
독립 = 레모네이드[['온도']]
종속 = 레모네이드[['판매량']]
print(독립.shape, 종속.shape)
<출력>
(6,1), (6,1)
---------------------------------------------------------
# 3. 모델 준비
x = tf.keras.layers.Input(shape=[1])    # shape=[칼럼수]
y = tf.keras.layers.Dense(1)(x)          # (1)=칼럼수

model = tf.keras.Model(x, y)
model.compile(loss='mse')               # 회귀 유형이라서
---------------------------------------------------------
# 4. 데이터를 이용하여 모델 학습
model.fit(독립, 종속, epochs=1000, verbose=0)  # verbose=0 -> 학습 과정안보여도 된다는 의미
---------------------------------------------------------
# 5. 데이터 예측
model.predict(독립[:3])
<출력>
 [[11.286754]
 [11.800876]
 [12.314999]]

print(종속[:3])
<실제값>      <예측값>
40            22.71
42            23.74
44            24.76

===> 오차는 5정도 됨을 알 수 있다.
---------------------------------------------------------
# 6. 회귀식
model.get_weights()
<출력>
[array([[1.9862037]], dtype=float32), array([0.30032754], dtype=float32)]
=> 판매량 = 1.9862037 * 온도 + 0.30032754

실습 2(집값)

# 1. 데이터 준비
target = ['medv']
x = data.drop(target, axis=1)
y = data.loc[:, target]
print(x_train.shape, y_train.shape)
<출력>
(506, 13) (506, 1)
---------------------------------------------------------
# 2. 모델 준비
x_train = tf.keras.layers.Input(shape=[13])
y_train = tf.keras.layers.Dense(1)(x_train)
model = tf.keras.Model(x,y)
model.compile(loss='mse')
---------------------------------------------------------
# 3. 데이터를 이용한 모델 학습
model.fit(x_train, y_train, epchs=500, verbose=0)
---------------------------------------------------------
# 4. 데이터 예측
model.predict(x[:5])
<출력>
array([[28.015047],                   
       [24.721672],
       [28.998194],
       [28.731518],
       [27.936375]], dtype=float32)
      
y[:5]
medv
0	24.0
1	21.6
2	34.7
3	33.4
4	36.2
==> 오차는 2정도 됨을 알 수 있다.
---------------------------------------------------------
# 5. 회귀선
w, b =model.get_weights()        # (w : 가중치), (b : 편향)

# 방법 1.
variables = ['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax', 'ptratio', 'b', 'lstat']
weights = [f"{e[0]} * {v}" for e, v in zip(w, variables)]
print("y =", "\n  + ".join(weights), f"\n  + {b[0]}")

# 방법 2.
weights = [f'{e[0]} * x{i}' for i, e in enumerate(w)]
print('y =', '\n    '.join(weights), f'+\n   {b[0]}')

<출력>
y = -0.0763624757528305 * x0
    0.08369160443544388 * x1
    -0.031242644414305687 * x2
    3.136476516723633 * x3
    1.007555365562439 * x4
    2.3621747493743896 * x5
    0.06257478892803192 * x6
    -0.3087534010410309 * x7
    0.12276262044906616 * x8
    -0.007904508151113987 * x9
    0.25756800174713135 * x10
    0.019396038725972176 * x11
    -0.7171409130096436 * x12 +
   1.8400682210922241

실습 3(꽃)(분류)

# 1. 데이터 준비
target = ['품종']
x = data.drop(target, axis=1)
y = data.loc[:, target]

y = pd.get_dummies(y, columns = target)
print(x.shape, y.shape)
<출력>
(150, 4) (150, 3)
---------------------------------------------------------
# 2. 모델 학습
x_train = tf.keras.layers.Input(shape=[4])
y_train = tf.keras.layers.Dense(3, activation='softmax)(x_train)
# 분류 모델이기 때문에, activation을 입력 해준다.
# 종속변수가 1개일 때 - > 'sigmoid'
# 종속변수가 2개 이상일 때 -> 'softmax' 사용한다.

model = tf.keras.Model(x, y)
model.compile(loss = 'categorical_crossentropy', metrics='accuracy')
# 분류 모델이기 때문에, loss와 metrics를 입력해준다. 
# 종속변수가 1개일 때 -> loss = 'binary_crossentropy'
# 종속변수가 2개이상일 때 -> loss = 'categorical_crossentropy' 사용한다.
---------------------------------------------------------
# 3. 모델 학습.
model.fit(x, y, epochs=500, verbose=0)
방법동일
---------------------------------------------------------
# 5. 파일 저장 & 로딩
model.save('my_model.keras')                              # 파일 저장
mymodel = tf.keras.models.load_model('my_model.keras')    # 파일 로딩
---------------------------------------------------------

로지스틱회귀와 크로스엔트로피

profile
큐브가 필요하다...!!!

0개의 댓글