오늘도 학원에서
학습한 내용을
꾸준히 블로그 글로 정리해서 올리려고 합니다
이번 포스트에서 정리해볼 내용은
"결정계수"입니다.
1. 결정계수(R2)가 뭐죠
결정계수는 바로 이것이라고 합니다.
R2.
그럼 SSE는 뭐고 SSR은 뭐고 SST는 무엇일까요?
아래 포스팅을 보고 학습해보겠습니다
https://m.blog.naver.com/tlrror9496/222055889079
[R] 결정계수(R-Squared)의 의미와 계산 방법
#통계학 #회귀분석 #결정계수 결정계수(R-Squared)에 대해서 알아보겠습니다. 흔히 R 제곱이라고 불리는...
blog.naver.com
결정계수를 알기위해서는
회귀분석, 회귀선, SST, SSE, SSR 이라는 개념을 먼저 알아야겠네요.
용어는 어렵지만 천천히 살펴보겠습니다!
1) 회귀 분석
회귀식을 활용해서 무엇인가 예측하는 분석입니다.
그럼 회귀식은 무엇인가여..
2)회귀식
저번 포스팅에서 그래프를 하나 그렸었죠?
10. 모델 훈련 결과 시각화 하기 (feat. matplolib)
이번 포스팅은 모델 훈련 결과를 시각화 해보겠습니다. 데이터를 그래프로 나타낼건데요, matplotlib라는 패키지의 도움을 받아보겠습니다~ 먼저 이 패키지가 무엇인지 알아야 사용을 할 수 있을
aigaeddo.tistory.com
이걸 보고 설명하자면
빨간 선이 회귀선입니다.
저희의 시선에서 보면
모델이 훈련한 예측그래프가 되겠네요.
파란점은 평가 비교할 테스트 입출력값(x,y)들을 찍어준 점입니다.
1) SSE(Explained Sum of Squares)
그래프를 보고 또 설명할게요.
회귀선과 모든 점들의 y값의 평균 과의 차이입니다.
기호가 있는데
머리가 아프시죠??
화살촉같이 생긴건 시그마라는 기호입니다.
오른쪽에 있는 i에 1부터 n까지 넣어 모든걸 더한다는 의미입니다.
오른쪽에 있는 y어쩌고 제곱기호 보이시죠?
이건 그래프의 회귀선과 모든 점들의 y값 평균과의 차이를 제곱해준겁니다.
그럼 정리해보면
회귀선과 모든 y값의 평균과의 차이의 제곱의 합이 되겠네요.
2) SSR (Residual Sum of Squere)
위 그래프를 보면
이번엔 회귀선 위 점과 회귀선의 차이를
똑같이 계산해준거에요.
SSR은 회귀선과 모든 y의 평균값과
회귀선과의 거리의 제곱의 합이었잖아요?
이건
회귀선 위의 y와
회귀선과의 차이의 제곱의 합입니다!
3) SST(Total Sum of Squeres)
SSE + SSR입니다!
그림으로 보자면 이렇게 되는것이죠.
저는 결정계수를 공부하려고 했는데
뭘 공부한거죠??ㅜㅜ
이제 결정계수를 알수 있습니다.
이게 결정계수에요!
SSE/SST 혹은 1- SSR/SST
결정계수를 구하는 방법을 알아보았고
왜 이걸 공부 하는걸까요??
2. 결정계수(R2)를 알아야하는 이유
결정계수(R2)는 저희가 만드는
딥러닝, 머신러닝이
잘 동작하는지
확인하는 평가지표가 됩니다.
저번 포스팅에서 언급했듯이
주지표는 로스값이 되고
신뢰의 지표는 훈련데이터의 로스값과
평가데이터의 로스값의 차이가 되었죠.
결정계수는 이런 주지표를 보조하는 평가지표로 간주합니다.
결정계수가 0에 가까우면
회귀선이 쓸모가 없을 가능성이 크고,
0.65 보다 크면 x값(독립변수)와 y값(종속변수)의
상관관계가 높으며, 1에 가까우면
쓸모 있는 회귀식으로 본다고 합니다.
3. 결정계수를 구하는 방법
직접 저걸 다 계산해서
모델을 판단하는 건 너무나 힘든일입니다.
그래서 이번에도 God Scikit Learn 선생님께서
도와주실겁니다!
Scikit learn 의 metrics 모듈에
r2_score함수를 사용해서 결정계수를 구해보도록 하겠습니다.
도큐먼트를 살펴보면
여러 입력 파라미터가 있네요.
1. y_true : 필수값. 실제 데이터가 되겠네요.
2. y_pred : 필수값. 예측 데이터가 됩니다.
3. Sample_weight : 기본값은 None입니다. 샘플가중치 .
4. multioutput : 기본값은 uniform_average이고 variance_weight, raw_value라는
3가지 출력 점수 집계 방식을 설정하는 것 같습니다.
5. force_finite : 기본값은 True입니다.
True로 설정하면 예측이 완벽한 경우 기준으로 1,0 ~ 0,0이 반환되는 것 같습니다.
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.r2_score.html
sklearn.metrics.r2_score
Examples using sklearn.metrics.r2_score: L1-based models for Sparse Signals Linear Regression Example Non-negative least squares Failure of Machine Learning to infer causal effects Effect of transf...
scikit-learn.org
코드에서 보겠습니다.
먼저 scikit learn 의 metrics 모듈의 r2_score 함수를 import시킵니다.
모델이 훈련을 마쳤고 입력값 중 평가데이터로 자른
X_test 값을 훈련된 모델에 집어넣어
예측값 y_predict를 뽑아냅니다.
평가 데이터로 잘랐던 y_test를
r2_score 함수의 파라미터 중 y_true에 집어넣습니다.
y_predict 예측값을 r2_score의 y_pred 파라미터에 집어넣습니다.
나머지는 디폴트값으로 넣어주지 않습니다.
이렇게 해주면 결정계수 R2를 뽑아낼 수 있습니다.
model.fit(x_train, y_train, epochs=1000, batch_size=20) #모델 훈련
# 예측, 평가
y_predict = model.predict(x_test) #x_test : 입력값 평가데이터
#평가지표
from sklearn.metrics import r2_score
r2 = r2_score(y_test,y_predict) #y의 테스트용 실제값과 x를 모델에 돌려 나온 예측값 y_predict를 비교함
print("R2 스코어 : ",r2)
전체 코드 첨부합니다.
틀린점 있으면 말씀 부탁드립니다!
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
# 1. 데이터
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
y = np.array([1, 2, 4, 3, 5, 7, 9, 3, 8, 12, 13, 8, 14, 15, 9, 6, 17, 23, 21, 20])
x_train, x_test, y_train, y_test = train_test_split(
x, y, train_size=0.7, random_state=92111113
)
# 2.모델 구성
model = Sequential()
model.add(Dense(64, input_dim=1))
model.add(Dense(64))
model.add(Dense(1))
# 3. 컴파일, 훈련
model.compile(loss="mse", optimizer="adam")
model.fit(x_train, y_train, epochs=1000, batch_size=20)
# 4. 예측, 평가
loss = model.evaluate(x_test, y_test) #y_test값과 x_test를 모델에 넣어서 나온 출력값을 비교한 것. (실제데이터, 예측데이터)
print("로스값: ", loss)
y_predict = model.predict(x_test)
result = model.predict(x)
#평가지표
from sklearn.metrics import r2_score
r2 = r2_score(y_test,y_predict) #y의 테스트용 실제값과 x를 모델에 돌려 나온 예측값 y_predict를 비교함
print("R2 스코어 : ",r2)
'인공지능 개발하기 > Machine Learning' 카테고리의 다른 글
[Tensorflow] 13. csv 파일 데이터 다루기(pandas 패키지) (0) | 2024.01.08 |
---|---|
[Tensorflow] 12. 연습용 데이터 사용해보기 Scikit Learn datasets (1) | 2024.01.07 |
[Tensorflow] 10. 모델 훈련 결과 시각화 하기 (feat. matplolib) (0) | 2024.01.04 |
[Tensorflow] 9. Scikit-Learn "train_test_split" 사용해서 데이터 쪼개기 (0) | 2024.01.04 |
[Tensorflow] 8. 과적합(Overfitting)이란 무엇인가? (1) | 2024.01.03 |