본문 바로가기
DeepLearning Framework & Coding/Microsoft AzureML

[Microsoft AzureML - 5] 학습 모델 구현 및 검증

by 노마드공학자 2021. 6. 21.

※ 이전글

[Microsoft AzureML - 0] Intro https://limitsinx.tistory.com/113

[Microsoft AzureML - 1] 개발 환경 세팅 https://limitsinx.tistory.com/114

[Microsoft AzureML - 2] 학습할 데이터 불러오기 https://limitsinx.tistory.com/115

[Microsoft AzureML - 3] 데이터 전처리(Data pre-processing) - I https://limitsinx.tistory.com/116

[Microsoft AzureML - 4] 데이터 전처리(Data pre-processing) - II https://limitsinx.tistory.com/117

 


이전글까지 학습에 필요한 데이터들을 아름답게(?) 전처리하는 방법에 대해 알아보았습니다!

 

이제부터 본격적으로 학습을 위한 모델설계하는 방법에 대해 진행해볼텐데요

 

전처리한 데이터들에 앞서, Training Data와 Test Data를 나누어주는 작업이 필요합니다.

 

이것을 우리는

 

 

Data Split

이라고 부릅니다.

 

즉, 100개의 데이터가 있다면 100개 모두학습시키면 테스트는 뭘로할까요??

 

학습시킨 데이터로한다면, 마치 초등학생에게 시험문제와 답을 모두 알려주고 난후, 답만가리고 다시 시험을 치는것과 다름없는 이상한 상황인거죠!

 

따라서, 데이터를 학습하기전 일정비율로 Training(학습)용, Test용으로 나누어주는데요

 

보통은 7:3정도로하는게 보편적입니다.

 

[Data Trasformation] -> [Sample and Split] -> [Split data]블록을 상기와 같이 옮겨주고 클릭하면, 우측에 블록 특성이 나오는데요

 

한개씩 차례대로보면,

 

Splitting mode : 행 혹은 열중 어떤것 기준으로 데이터를 정렬하는가

Fraction of rows in the ~ : 원본데이터중 몇 퍼센트를 학습에 사용할것인가 ? 0.5를 넣으면 50%는 학습, 50%는 검증에 쓰는것입니다.

Randomized Split : 데이터를 랜덤하게 50%를 뽑는것, 체크를 안할시 원래데이터 순서대로 절반을 사용합니다.

Random seed : 랜덤함의 정도차이, 1에 가까울수록 랜덤의 정도가 높습니다.

 

저는, Fraction of rows는 0.7(70%), Randomized split은 ON한체로 학습을 진행해보겠습니다.

 

여기까지 끝나면 이제 머신러닝 모델 블록을 세팅하면 되는데요 :)

 

가장 간단한 모델링 방법중 하나인, "Linear Regression(선형회귀)" 방식으로 차량의 가격을 예측해보겠습니다!

 

[Machine Learning] -> [Train] -> [Train Model]을 드래그하여 전처리가 완료된 데이터 아래에 블록을 붙여줍니다.

 

그다음, [Machine Learning] -> [Initialize Model] -> [Regression] -> [Linear Regression] 블록을 옮겨 위의 이미지와 같이 이어주는데요,

 

[Train model]블록의 왼쪽 노드는 "학습할 모델 방식"이고, 오른쪽 노드는 "학습할 데이터" 입니다.

 

[Train model] 블록에 빨간느낌표가 아직 떠있는데요

 

이건 뭔가가 아직 해결되지 않았다는 뜻이죠!

 

블록을 클릭하고 [Launch column selector]를 클릭해줍니다.

 

학습을 하기위한 데이터들은 Engine size /horse power/ city-mpg /price로 주어졌는데

 

여기까지만 보면 어떤것을 Output으로 하고싶은지 블록코드에는 표현한적이 없죠??

 

그것을 표현해주지 않아 생긴 오류였습니다.

 

Price를 Selected Columns로 옮기고 우측하단 체크표시를 눌러줍니다.

 

그다음 [RUN]을 해주시면 이제 모든블록에 초록색체크표시가 생겼네요:) 문제없다는 뜻입니다!

 

[Machine Learning] -> [Score] -> [Score Model] 블록을 끌어와주는데요

 

학습은 끝났는데 이게 제대로 됬는지, 오차는 어느정도인지 확인을 해야겠죠??

 

그런 'Score'들을 표현하는 블록으로, 왼쪽노드는 Train model 블록, 오른쪽은 Split data에서 사용하지 않았던 오른쪽 노드를 연결해줍니다.

 

Split node의 오른쪽 노드는 검증을 위한 나머지 30%거든요.

 

즉, Score model은 "Test Set"을 통해 학습한 모델로 검증을 하기위한 과정입니다!

 

이렇게 모든 노드를 이어주고 [RUN] -> [Score Model] -> [Visualize]를 해주면 다음과 같은 머신러닝 결과가 나오게됩니다.

 

60개의 데이터로 검증을 해본결과, Price는 실제 가격 , [Scored Labels]는 머신러닝으로 예측한 가격입니다.

 

200여개의 데이터 남짓이라 부족한데이터임에도 불구하고 경향성은 잘 따라가는것을 확인할 수 있습니다.

 

이걸론 뭔가 하나하나의 값들에 대한 예측값은 볼 수 있지만, 직관적인 결과값은 알기어려운데요

 

[Machine Learning] -> [Evaluate] -> [Evaluate Model] 블록을 연결해서 [RUN]후 [Visualize] 해줍니다.

 

그러면 이런 결과값이 나오게 되는데요!

 

해석해보자면

 

머신러닝으로 추정해본결과 MAE는 2276, RMSE는 3156, Coefficient of Determination(결정계수)는 0.86이다는 의미입니다.

 

각각은 통계적인 용어로, 대략적으로 말씀드리면

 

MAE는 2276으로 돈의 단위가 "dollar"였죠?

 

실제값과 추정값이 평균 약 227.6달러정도 차이가 난다라고 이해해주시면 될것 같습니다.

 

RMSE가 MAE보다 1.5배가까이 크다는것은, 학습데이터중에 Outlier에 가까울정도로 편차가 심한 데이터가 있었다는것을 의미하는데요, 통계적수식으로도 유도할 수 있지만 그냥 이정도 지표로 사용해주시면 될것같습니다.

 

"RMSE와 MAE가 비슷할수록 전체적으로 비슷한 오차의 데이터들이 있었다. 몇개가 유독 튀는 오차가있으면 RMSE가 MAE보다 크게 나타난다"

 

Coefficient of Determination은 "결정계수" 로써, 1에 가까울수록 정확도가 높다 정도로만 이해해주셔도 충분합니다 :)

 

이렇게해서 Linear Regression을통한 간단한 머신러닝모델을 구현해보았는데요

 

이다음글은, 2가지 학습모델 방법을 비교해보고 더 나은 모델을 찾는방법에 대해 정리해보겠습니다.

 

댓글