일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- MYSQL
- Spring JPA
- python
- 회원가입
- 파이썬
- Baekjoon
- spotify
- java
- CS
- 백준
- spring boot
- SECS
- Computer Science
- 회귀
- SW Expert Academy
- Spring
- 스포티파이
- SECS/GEM
- 프로그래머스
- Gem
- C++
- modern c++
- c
- programmers
- SECS-II
- Spotify Api
- regression
- 비트겟
- 자바
- SWEA
Archives
- Today
- Total
비버놀로지
[회귀분석] Scikit-learn을 이용한 회귀분석 본문
728x90
Scikit-learn을 이용한 회귀분석
기계학습 라이브러리 scikit-learn 을 사용하면 Loss Function을 최소값으로 만드는 β0\beta_0, β1\beta_1 을 쉽게 구할 수 있습니다.
주어진 데이터와 다음 선형 모델을 이용하여 최적의 β0\beta_0, β1\beta_1 값을 구해보겠습니다.
실습
- loss() 함수를 완성하세요. 앞서 구현한 함수를 그대로 사용할 수 있습니다.
- np.array(X).reshape(-1, 1) 명령어를 이용해 길이 10인 1차원 리스트 X 를 10 x 형태의 np.array로 변경하세요.
- 종속변수 Y는 독립변수 X에 대한 값이므로 reshape(-1, 1)을 할 필요가 없습니다. 리스트 Y를 np.array 형식으로 변경하세요.
- 모델을 학습합니다.
lrmodel = LinearRegression()
lrmodel.fit(train_X, train_Y)
5. 모델을 이용해 얻은 최적의 beta_0, beta_1 값과 Loss를 확인합니다.
Tips!
sklearn에서는 벡터와 행렬을 나타내는 방법으로 numpy 배열을 표준으로 사용하고 있습니다. 따라서 X와 Y를 각각 np.array로 변환해야 합니다.
하나의 속성(feature)에 여러가지 값(sample)을 가지는 경우, reshape(-1, 1)을 적용하여 열벡터로 만들어야 합니다. X는 하나의 종속변수 Y에 대한 여러 값을 가지므로 reshape(-1, 1)을 적용합니다.
reshape(-1, 1)은 reshape(10, 1)과 같은 기능을 합니다. 마치 ‘a[-1]은 a라는 리스트의 마지막 원소다’와 비슷한 맥락입니다.
import matplotlib as mpl
mpl.use("Agg")
import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import LinearRegression
import elice_utils
eu = elice_utils.EliceUtils()
def loss(x, y, beta_0, beta_1):
N = len(x)
'''
이전 실습에서 구현한 loss function을 여기에 붙여넣습니다.
'''
x= np.array(x)
y=np.array(y)
total_loss = np.sum((y - (beta_0 * x + beta_1)) ** 2)
return total_loss
X = [8.70153760, 3.90825773, 1.89362433, 3.28730045, 7.39333004, 2.98984649, 2.25757240, 9.84450732, 9.94589513, 5.48321616]
Y = [5.64413093, 3.75876583, 3.87233310, 4.40990425, 6.43845020, 4.02827829, 2.26105955, 7.15768995, 6.29097441, 5.19692852]
train_X = np.array(X).reshape(-1,1)
train_Y = np.array(Y)
'''
여기에서 모델을 트레이닝합니다.
'''
lrmodel = LinearRegression()
lrmodel.fit(train_X, train_Y)
'''
loss가 최소가 되는 직선의 기울기와 절편을 계산함
'''
beta_0 = lrmodel.coef_[0] # lrmodel로 구한 직선의 기울기
beta_1 = lrmodel.intercept_ # lrmodel로 구한 직선의 y절편
print("beta_0: %f" % beta_0)
print("beta_1: %f" % beta_1)
print("Loss: %f" % loss(X, Y, beta_0, beta_1))
plt.scatter(X, Y) # (x, y) 점을 그립니다.
plt.plot([0, 10], [beta_1, 10 * beta_0 + beta_1], c='r') # y = beta_0 * x + beta_1 에 해당하는 선을 그립니다.
plt.xlim(0, 10) # 그래프의 X축을 설정합니다.
plt.ylim(0, 10) # 그래프의 Y축을 설정합니다.
plt.savefig("test.png") # 저장 후 엘리스에 이미지를 표시합니다.
eu.send_image("test.png")
728x90
'인공지능 머신러닝' 카테고리의 다른 글
[회귀분석] 다항식 회귀 분석 (0) | 2022.11.03 |
---|---|
[회귀분석] 다중 회귀 분석 (0) | 2022.11.03 |
[회귀분석] Loss Function (0) | 2022.11.03 |
[회귀분석] 기울기와 절편 (0) | 2022.11.03 |
[선형대수학 Numpy] 벡터 연산으로 그림 그리기 (0) | 2022.11.03 |
Comments