선형회귀, 다중선형회귀 학습모델(파이썬, 텐서플로)

ahncheer·2025년 2월 19일

python

목록 보기
21/25

0. 구글 드라이브 -> Google Colab 사용

1. 선형회귀 학습모델 - 파이썬 코딩

1-1. 코드 작성

# 선형 회귀 모델 학습

import numpy as np
import matplotlib.pyplot as plt

# 공부시간 x와 성적 y의 넘파이 배열을 만듭니다.
x = np.array([2, 4, 6, 8])
y = np.array([81, 93, 91, 97])

# 데이터의 분포를 그래프로 나타냅니다.
plt.scatter(x, y)
plt.show()

# 기울기 a의 값과 절편 b의 값을 초기화 합니다.
a = 0
b = 0

# 학습률을 정합니다.
lr = 0.03

# 몇 번 반복할건지 설정합니다
epochs = 2001

# x값이 총 몇 개인지 셉니다.
n = len(x)

# 경사 하강법을 시작합니다.
for i in range(epochs):
    y_pred = a * x + b
    error = y - y_pred

    a_diff = (2/n) * sum(-x * error)
    b_diff = (2/n) * sum(-(error))

    a = a - lr * a_diff
    b = b - lr * b_diff

    if i % 100 == 0:
        print("epoch=%.f, 기울기=%0.04f, 절편=%.01f" %(i, a, b))

y_pred = a * x + b

plt.scatter(x, y)
plt.plot(x, y_pred, 'r')
plt.show()

1-2. 결과 확인

2. 다중선형회귀 학습모델 - 파이썬 코딩

2-1. 코드 작성


import numpy as np
import matplotlib.pyplot as plt

# 공부시간 x1, 과외시간 x2, 성적 y의 넘파이배열
x1 = np.array([2, 4, 6, 8])
x2 = np.array([0, 4, 2, 3])
y = np.array([81, 93, 91, 97])

# 데이터 분포를 그래프로 나타냅니다.
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter3D(x1, x2, y);
plt.show()

# 기울기 a의 값과 절편 b의 값을 초기화 합니다.
a1 = 0
a2 = 0
b = 0

# 학습률을 정합니다
lr = 0.01

#  몇 번 반복할지 정합니다.
epochs = 2001

# x의 값이 총 몇개인지 셉니다. x1와 x2의 값이 같으므로 x1만 셉니다.
n = len(x1)

# 경사 하강법을 시작합니다
for i in range(epochs):
    y_pred = a1 * x1 + a2 * x2 + b
    error = y - y_pred

    a1_diff = (2/n) * sum(-x1 * (error))
    a2_diff = (2/n) * sum(-x2 * (error))
    b_diff = (2/n) * sum(-(error))

    a1 = a1 - lr * a1_diff
    a2 = a2 - lr * a2_diff
    b = b - lr * b_diff

    if i % 100 == 0:
        print("epoch = %.f, 기울기1=%.04f, 기울기2=%.04f, 절편=%.04f" %(i, a1, a2, b))

#  실제 점수와 예측된 점수를 출력합니다
print("실제 점수 : ", y)
print("예측 점수 : ", y_pred)

2-2. 결과 확인

3. 선형회귀 학습모델 - 텐서플로

3-1. 코드 작성

import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf



# 텐서플로의 케라스 API에서 필요한 함수들을 불러옵니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

#
x = np.array([2, 4, 6, 8])
y = np.array([81, 93, 91, 97])

model = Sequential()

#  출력값, 입력 변수, 분석 방법에 맞게끔 모델을 설정합니다.
# model.add : keras 모델에 층을 추가하는 함수
# Dense : 밀집층(Dense Layer)을 추가하는 함수.
# 1 : 출력 뉴런의 개수. 선형 회귀에서는 종속 변수값이 하나이므로, 출력을 하나의 값으로 설정
# input_dim=1 : 입력 데이터의 특성(피쳐)의 개수
# activetion="linear" : 활성화 함수로 선형함수를 사용함.
#   ㄴ 만약 비선형 모델링인 경우 relu, sigmoid등을 사용하게 됨
model.add(Dense(1, input_dim=1, activation="linear"))

# model.compile : 모델을 학습할 준비를 하는 과정으로 최적화 방법과 손실함수를 설정함.
# optimizer='sgd' : 모델의 가중치를 업데이트 하는 방법을 설정하는 부분
#   ㄴ 'sgd'는 경사 하강법을 기반으로 한 최적화 알고리즘
# loss='mse' : 모델을 학습하는 과정에서 손실 함수를 정의
#   ㄴ Mean Squared Error의 줄임말. 평균제곱오차를 의미.
#       ㄴ 수식으로는 MSE = (1/n) * Σ(y_true - y_pred)^2
model.compile(optimizer='sgd', loss='mse')

# model.fit : ahepfdmf gkrtmqtlzlsms gkatn
# x : 입력 데이터/ y : 타겟 데이터/ epochs = 숫자 : 숫자만큼 전체 훈련데이터를 합습
model.fit(x, y, epochs = 2000)

plt.scatter(x, y)
plt.plot(x, model.predict(x), 'r')
plt.show()

# 임의의 시간을 집어넣어 점수를 예측하는 그래프를 테스트해보기
hour = 7
input_data = tf.constant([[hour]])
prediction = model.predict(input_data)[0][0]
print("%f시간을 공부할 경우 예상 점수는 %.02f점입니다." %(hour, prediction))

3-2. 결과 확인

위처럼 계속 학습이 진행되고, 아래와 같은 결과가 나옴

4. 다중선형회귀 학습모델 - 텐서플로

4-1. 코드 작성

import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf


from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

x=  np.array([[2, 0],[4, 4], [6, 2], [8, 3]])
y = np.array([81, 93, 91, 97])

model = Sequential()

# 입력 변수가 두 개
model.add(Dense(1, input_dim=2, activation='linear'))
model.compile(optimizer='sgd', loss='mse')

model.fit(x, y, epochs=2000)

# 임의의 학습 시간과 과외시간을 집어넣어 점수를 예측하는 모델
hour = 7
private_class = 4
input_data = tf.constant([[hour, private_class]])
prediction = model.predict(input_data)[0][0]

print("%.f시간을 공부하고 %.f시간의 과외를 받을 경우, 예상 점수는 %.02f점 입니다." %(hour, private_class, prediction))


4-2. 결과 확인

참고 : 모두의 딥러닝 (56/303 ~ 64/303)
https://github.com/taehojo/deeplearning
5장 부분

profile
개인 공부 기록용.

0개의 댓글