실제 데이터 표본과 예측데이터의 차이를 표현해 성능을 검토하기 위한 지표들이다.
풀어서 말하자면 Training 데이터로 학습한 회귀모델에 Test 또는 다른 새로운 데이터를 input했을 때, 모델이 예측한 값과 실제 표본 값을 바탕으로 다양한 방법으로 오차를 구해 성능을 평가하는 방법들이다.
# 공부시간에 따른 시험점수 자료 사용
df = pd.DataFrame({'studytime':[3,4,5,8,10,5,8,6,3,6,10,9,7,0,1,2],
'score':[76,74,74,89,92,75,84,82,73,81,89,88,83,40,70,68]})
모듈을 활용하여 학습과 테스트 세트 분리
https://teddylee777.github.io/scikit-learn/train-test-split/
학습된 모델의 성능을 확인하기 위해 dataset을 분리 작업
(train(학습데이터) / test(검정데이터))
from sklearn.model_selection import train_test_split
train, test = train_test_split(df,test_size=0.4,random_state=12) #train 6 / test 4
print(df.shape)
print(train.shape,test.shape) #(16, 2) => (9, 2) (7, 2)
x_train = train[['studytime']]
y_train = train[['score']]
x_test = test[['studytime']]
y_test = test[['score']]
model = LinearRegression().fit(x_train,y_train)
y_pred = model.predict(x_test) # 모델 검정은 test 사용
print('실제값 : ',y_test.values)
print('예측값 : ',y_pred)
r2_score(y_test, y_pred)
: 결정계수explained_variance_score(y_true, y_pred)
: 설명분산점수mean_squared_error
: RMSE - 평균제곱근오차결정계수와 설명분산점수가 다르다면 에러에 편향이 있다는 것.
이는 모델학습이 잘못되었다는 뜻이다.
from sklearn.linear_model import LinearRegression #summary() 지원 X
from sklearn.metrics import r2_score, explained_variance_score, mean_squared_error
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler
MinMaxScaler()
scaler = MinMaxScaler()
x_scaled = scaler.fit_transform(x.reshape(-1,1))
print(x_scaled[:5])
print('r : ',np.corrcoef(x,y))
print('r : ',np.corrcoef(x_scaled.flatten(),y)) #결과는 같음
정규화된 x_scaled로 분석해도 결과가 같다.
Ridge, Lasso, ElasticNet
reference : https://cafe.daum.net/flowlife/SBU0/27