안녕하세요. SQLER의 코난 김대우입니다. 

이번 강좌에서는, Python 머신러닝 강좌 - 13. 모델의 정확도 평가(accuracy evaluating)를 진행토록 하겠습니다.

예제 노트북 파일 : 13. 모델의 정확도 평가(accuracy evaluating)

 

SQLER에서 진행되는 전체 Python / 머신러닝 강좌 목록

 

코드를 실행하기 위해서는, vscode에서 새로운 파일을 만들고 강좌 내용을 단계별로 copy&paste해서 실행하시면 됩니다. 또는, Jupyter notebook을 실행하고 단계별로 실행하셔도 됩니다.

예를 들어, 13_model_eval.ipynb를 생성하고 vscode에서 실행하면, Jupyter notebook이 실행됩니다.(vscode에서 실행도 가능하며, 웹브라우저에서도 실행 가능합니다.)

또는, github 리포지토리를 clone 하신 후, vscode나 Jupyter notebook에서, 위의 노트북 파일을 열면 됩니다. 
 

상세한 환경 구성이 필요 하시다면, 개발자 커뮤니티 SQLER.com - Python 초급 강좌 목차 - 1. Python 개발 환경 구성 문서를 참조해 WSL, vscode, conda, jupyter notebook 설정을 모두 먼저 완료 하시길 권장해 드립니다.

 

Python 머신러닝 강좌 - 13. 모델의 정확도 평가(accuracy evaluating)

모델을 트레이닝 한 후에는 모델의 accuracy를 파악해야합니다. 모델의 accuracy는, 모델에 의한 예측을 얼마나 확신(confidence) 할 수 있는지에 대한 정보를 제공합니다. 

scitkit-learn 및 numpy 라이브러리는 책한권 나올 정도로 많이 쓰이고 중요한 pydata의 패키지 라이브러리입니다. 또한, 이번 강좌에서 진행될 모델 accuracy 측정에도 유용합니다. 

 

지금까지 트레이닝 된 linear regression 모델을 다시 생성합니다.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# CSV 파일에서 데이터를 로드
delays_df = pd.read_csv('Lots_of_flight_data.csv') 

# null값을 제거 - null값이 있으면 트레이닝 과정에서 문제를 유발할 수 있습니다.
delays_df.dropna(inplace=True)

# Feature column들을 X DataFrame으로 이동
X = delays_df.loc[:,['DISTANCE', 'CRS_ELAPSED_TIME']]

# Labe column을 y DataFrame으로 이동
y = delays_df.loc[:,['ARR_DELAY']] 

# 데이터를 트레이닝 데이터셋과 테스트 데이터셋으로 분리 
X_train, X_test, y_train, y_test = train_test_split(
                                                    X, 
                                                    y, 
                                                    test_size=0.3, 
                                                    random_state=42
                                                   )

regressor = LinearRegression()     # scikit learn LinearRegression 개체 생성
regressor.fit(X_train, y_train)    # fit 메서드를 사용해 모델 트레이닝 실행

y_pred = regressor.predict(X_test)

이렇게 model을 통해 predict된 결과를 y_pred로 얻었습니다.

 

Accuracy 측정

트레이닝 된 모델이 있으므로 모델의 accuracy를 확인하는데 사용할 수 있는, 여러 메트릭(metric)이 있습니다.

이 메트릭 항목은 모두 수학적 계산을 수행합니다. 여기서 중요한 점은 모든 것을 우리가 직접 계산할 필요가 없다는 것입니다. Scikit-learn과 numpy는 대부분의 작업을 대신 수행합니다.

 

 

Mean Squared Error(평균 제곱 오차 - MSE)

MSE는 결과를 예측할 때 모델이 수행 한 Mean Squared Error입니다. MSE가 낮을수록 좋은 모델입니다.

MSE는 실제 label 값과 모델에서 predict 한 값 간의 Mean Squared 차이 입니다.

 

MSE = mean((label값-예측값)^2)

 

이 계산을 수행하기 위해 label 값과 precit 값을 반복 비교하는 코드를 작성할 수 있지만, 전혀 그럴 필요는 없습니다! scikit-learn 라이브러리에서 mean_squared_error를 사용하면 됩니다.

from sklearn import metrics
print('Mean Squared Error:', metrics.mean_squared_error(y_test, y_pred))

=== 실행결과 ===

Mean Squared Error: 2250.4445141530855

 

Root Mean Squared Error(평균 제곱근 오차 - RMSE)

RMSE는 결과를 예측할 때 모델에서 수행 한 average error 입니다. RMSE가 낮을수록 좋은 모델입니다.

수학적으로 RMSE는 Root Mean Squared 차이 입니다.

 

RMSE = sqrt(MSE)

 

Skikit learn에는 RMSE에 대한 함수가 없지만 MSE의 제곱근(square root)이기 때문에, 많은 수학적 함수가 포함 된 numpy 라이브러리를 사용하여 MSE의 제곱근을 쉽게 계산할 수 있습니다.

import numpy as np
print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))

 

Mean Absolute Error(평균 절대 오차 - MAE)

MAE는 예측 오류(predict error)를 측정합니다. MAE가 낮을수록 좋은 모델입니다.

Label 값과 예측 된 결과의 average absolute 차이입니다.

 

MAE = mean(abs(label값-예측값))

 

MAE는 RMSE에 비해 특이값(outliers)에 덜 민감합니다. scikit-learn 라이브러리에서 mean_absolute_error를 사용하여 RMSE를 계산합니다.

print('Mean absolute error: ',metrics.mean_absolute_error(y_test, y_pred))

 

R^2 또는 R-Squared(제곱)

R Squared는 predict variable로 설명되는 결과의 변동 비율(proportion of variation)입니다. 모델에 전달 된 값이 예측 값에 얼마나 영향을 미치는지를 나타냅니다.

R-Squared가 높을수록 모델이 더 좋습니다. scikit-learn 라이브러리에서 r2_score를 사용하여 R-Squared를 계산합니다.

print('R^2: ',metrics.r2_score(y_test, y_pred))

 

모델마다 accuracy를 측정하는 방법이 다릅니다. scikit-learn 및 numpy는 정확도 측정에 도움이되는 다양한 기능을 제공합니다.

 

수고하셨습니다. 다음 강좌에서는 Numpy에 대해서 조금 더 알아보는 시간을 가지도록 하겠습니다.

 

참고자료

개발자 커뮤니티 SQLER.com - Python 무료 강좌 - 기초, 중급, 머신러닝

c9-python-getting-started/even-more-python-for-beginners-data-tools/13 - Evaluating accuracy of a model using calculations at master · CloudBreadPaPa/c9-python-getting-started (github.com)

 

No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 1249
32 Azure Databricks - MLflow를 이용한 머신러닝(3) - Project file 코난(김대우) 2021.10.08 181
31 Azure Databricks - MLflow를 이용한 머신러닝(2) - Tracking file 코난(김대우) 2021.10.08 214
30 Azure Databricks - MLflow를 이용한 머신러닝(1) file 코난(김대우) 2021.10.08 243
29 Azure Databricks - Spark에서 머신러닝 분산 처리 file 코난(김대우) 2021.10.07 110
28 PySpark cheat sheet 자료 - RDD, 데이터 처리 file 코난(김대우) 2021.10.01 98
27 PySpark을 이용한 머신러닝 튜토리얼 예제 코난(김대우) 2021.10.01 679
26 Form Recognizer로 문서에서 표 데이터 추출 file 코난(김대우) 2021.01.21 303
25 MLaaS - (1) 12가지의 머신러닝을 먼저 도입한 기업들의 고민 file 코난(김대우) 2021.01.15 606
24 Python 머신러닝 강좌 - 15. Matplotlib으로 데이터 시각화(visualization) file 코난(김대우) 2021.01.09 532
23 Python 머신러닝 강좌 - 14. NumPy와 Pandas 코난(김대우) 2021.01.09 482
» Python 머신러닝 강좌 - 13. 모델의 정확도 평가(accuracy evaluating) 코난(김대우) 2021.01.09 935
21 Python 머신러닝 강좌 - 12. 머신러닝 모델 테스트 코난(김대우) 2021.01.09 627
20 Python 머신러닝 강좌 - 11. scikit-learn으로 선형회기(linear regression) 모델 머신러닝 트레이닝 수행 코난(김대우) 2021.01.08 263
19 Python 머신러닝 강좌 - 10. 머신러닝을 위해 scikit-learn으로 트레이닝 데이터와 테스트 데이터 분할 코난(김대우) 2021.01.08 361
18 Python 머신러닝 강좌 - 9. 중복데이터와 결측값(missing value) 처리 코난(김대우) 2021.01.08 182
17 Python 머신러닝 강좌 - 8. Pandas DataFrame 컬럼(column) 분할(split)과 삭제(remove) 코난(김대우) 2021.01.08 268
16 Python 머신러닝 강좌 - 7. Pandas DataFrame으로 CSV 파일 읽고 쓰기 코난(김대우) 2021.01.08 217
15 Python 머신러닝 강좌 - 6. CSV 파일과 주피터 노트북 file 코난(김대우) 2021.01.08 288
14 Python 머신러닝 강좌 - 5. Pandas DataFrame에 질의(Query) 코난(김대우) 2021.01.07 201
13 Python 머신러닝 강좌 - 4. Pandas DataFrame file 코난(김대우) 2021.01.07 142





XE Login