머신러닝 & AI 개발자 Tip & 강좌 게시판

Data Scientist와 개발자를 위한 머신러닝, AI 등 개발 Tip과 강좌 게시판 입니다. 일반적인 머신러닝은 물론 딥러닝(Tensorflow, Keras, PyTorch 등), 인공지능 관련 업무를 진행하면서 얻은 Tip이나 강좌, 새로운 소식을 적어 주시면 다른 개발자 분들에게 큰 도움이 됩니다.

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

이번 강좌에서는, Python 머신러닝 강좌 - 10. 머신러닝을 위해 scikit-learn으로 트레이닝 데이터와 테스트 데이터 분할을 진행토록 하겠습니다.

예제 노트북 파일 : 머신러닝을 위해 scikit-learn으로 트레이닝 데이터와 테스트 데이터 분할

 

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

 

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

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

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

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

 

Python 머신러닝 강좌 - 10. 머신러닝을 위해 scikit-learn으로 트레이닝 데이터와 테스트 데이터 분할

학습(training) 및 테스트(test) 데이터 분할

머신러닝 모델을 트레이닝 할 때, 데이터를 학습 및 테스트 데이터셋으로 분할해야 할 수 있습니다.

이 작업을 수행하기 위해 보통 scikit-learn 라이브러리를 사용합니다.

scikit-learn은 데이터 전처리 및 머신러닝 모델 생성과 같은 Data Science를 위한 오픈 소스 - BSD 라이선스 라이브러리입니다.

학습 데이터셋과 테스트 데이터셋을 분할하려면 먼저 데이터를 준비해야합니다.

 

항공편 및 항공편 지연에 대한 정보가 포함된 csv 파일을 로드하고, shape를 사용하여 DataFrame에 있는 row와 column 수를 확인합니다. 아래 csv 파일은 이곳 github 리포지토리에서 보실 수 있습니다.

import pandas as pd

delays_df = pd.read_csv('Lots_of_flight_data.csv')
delays_df.shape

=== 결과 ===

 

(300000, 16)

 

데이터를 feature와 label로 분할

모델 트레이닝에 사용할 feature column만 포함하는 X라는 DataFrame을 생성합니다.

참고 숫자 값만 feature로 사용할 수 있습니다. 숫자가 아닌 값이 있는 경우에는, hot encoding과 같은 다른 기술을 적용하여 모델을 트레이닝하기 전에 숫자 값으로 변환해야합니다. 자세한 내용은 이후 진행될 강좌를 참고하세요.

X = delays_df.loc[:,['DISTANCE', 'CRS_ELAPSED_TIME']]
X.head()

=== 결과 ===

  DISTANCE CRS_ELAPSED_TIME
0 1670 225
1 1670 225
2 580 105
3 580 105
4 580 100

 

모델로 예측하려는 값만 포함된 y라는 DataFrame을 생성합니다.

우리는 비행기가 몇 분 늦게(또는 일찍) 도착할지를 예측하려합니다. 이 정보는 ARR_DELAY column에 있습니다.

y = delays_df.loc[:,['ARR_DELAY']]
y.head()

=== 결과 ===

  ARR_DELAY
0 -17.0
1 -25.0
2 -13.0
3 -12.0
4 -7.0

 

학습(training) 및 테스트(test) 데이터 분할

scikitlearn train_test_split을 사용해 row의 30%를 Test DataFrame으로 분할하고, 나머지 70 %의 row는 모델 트레이닝에 사용할 수 있는 training DataFrame으로 분할합니다.

참고 : random_state 값을 지정하여 코드를 다시 실행하면, 동일한 row가 DataFrame들로 분할되어 이동됩니다. 이 방법을 이용해 결과를 반복할 수 있습니다.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
                                                    X, 
                                                    y, 
                                                    test_size=0.3, 
                                                    random_state=42
                                                   )

 

전체 row들의 70%를 포함하는 X_train DataFrame이 있습니다. 

이 DataFrame을 사용하여 다음 강좌에서 모델을 트레이닝합니다.

X_train.shape

=== 결과 ===

(210000, 2)

 

DataFrame X_test에는 전체 row들의 나머지 30%가 포함되어 있습니다.

이 DataFrame을 사용하여 트레이닝 완료 된 모델을 테스트해 트레이닝 모델의 정확도(accuracy)를 확인할 수 있습니다.

X_test.shape

=== 결과 ===

 

(90000, 2)

 

X_train과 X_test에는 feature들이 포함되어 있습니다.

DISTANCE 및 CRS_ELAPSED_TIME 두개의 feature들은 항공편이 얼마나 늦게 도착할지 예측하는 데 도움이 될 것으로 예상되는 column들입니다.

X_train.head()

=== 결과 ===

  DISTANCE CRS_ELAPSED_TIME
186295 237 60
127847 411 111
274740 342 85
74908 1005 164
11630 484 100

 

DataFrame y_train에는 row들의 70 %가 포함되어 있습니다. 이 label DataFrame을 사용하여 모델을 학습합니다.

원본 DataFrame을 유지할 필요가 없다면, DataFrame을 새로 만드는 대신, 기존 DataFrame 내의 row를 삭제하면됩니다. inplace=True는 지정된 DataFrame에서 row를 삭제합니다.

y_train.shape

=== 결과 ===

(210000, 1)

 

DataFrame y_test에는 row들의 나머지 30 %가 포함됩니다. 이 DataFrame을 사용하여 트레이닝 된 모델을 테스트하면, 모델의 정확도(accuracy)를 확인할 수 있습니다.

y_test.shape

=== 결과 ===

(90000, 1)

 

y_train 및 y_test에는 라벨값(label)이 포함되어있습니다.

이 label feature(ARR_DELAY)로 학습 된 모델에 대해 예측을 실행합니다.

참고: ARR_DELAY 값이 음수이면 항공편이 일찍 도착했음을 나타냅니다.

y_train.head()

=== 결과 ===

  ARR_DELAY
186295 -7.0
127847 -16.0
274740 -10.0
74908 -19.0
11630 -13.0

 

수고하셨습니다. 다음 강좌에서는 실제 머신러닝 트레이닝 과정을 진행토록 하겠습니다.

 

참고자료

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

c9-python-getting-started/even-more-python-for-beginners-data-tools/10 - Splitting test and training data with scikit-learn at master · CloudBreadPaPa/c9-python-getting-started (github.com)

 

No. Subject Author Date Views
26 Form Recognizer로 문서에서 표 데이터 추출 file 코난(김대우) 2021.01.21 83
25 MLaaS - (1) 12가지의 머신러닝을 먼저 도입한 기업들의 고민 file 코난(김대우) 2021.01.15 222
24 Python 머신러닝 강좌 - 15. Matplotlib으로 데이터 시각화(visualization) file 코난(김대우) 2021.01.09 78
23 Python 머신러닝 강좌 - 14. NumPy와 Pandas 코난(김대우) 2021.01.09 71
22 Python 머신러닝 강좌 - 13. 모델의 정확도 평가(accuracy evaluating) 코난(김대우) 2021.01.09 50
21 Python 머신러닝 강좌 - 12. 머신러닝 모델 테스트 코난(김대우) 2021.01.09 49
20 Python 머신러닝 강좌 - 11. scikit-learn으로 선형회기(linear regression) 모델 머신러닝 트레이닝 수행 코난(김대우) 2021.01.08 58
» Python 머신러닝 강좌 - 10. 머신러닝을 위해 scikit-learn으로 트레이닝 데이터와 테스트 데이터 분할 코난(김대우) 2021.01.08 30
18 Python 머신러닝 강좌 - 9. 중복데이터와 결측값(missing value) 처리 코난(김대우) 2021.01.08 23
17 Python 머신러닝 강좌 - 8. Pandas DataFrame 컬럼(column) 분할(split)과 삭제(remove) 코난(김대우) 2021.01.08 22
16 Python 머신러닝 강좌 - 7. Pandas DataFrame으로 CSV 파일 읽고 쓰기 코난(김대우) 2021.01.08 14
15 Python 머신러닝 강좌 - 6. CSV 파일과 주피터 노트북 file 코난(김대우) 2021.01.08 22
14 Python 머신러닝 강좌 - 5. Pandas DataFrame에 질의(Query) 코난(김대우) 2021.01.07 22
13 Python 머신러닝 강좌 - 4. Pandas DataFrame file 코난(김대우) 2021.01.07 23
12 Python 머신러닝 강좌 - 3. Pandas 소개 file 코난(김대우) 2021.01.07 36
11 Python 머신러닝 강좌 - 2. Anaconda와 Conda 구성 file 코난(김대우) 2021.01.06 47
10 Jupyter notebook 단축키 등의 cheat sheet file 코난(김대우) 2021.01.06 36
9 Python 머신러닝 강좌 - 1. 주피터 노트북(Jupyter Notebook) 구성 file 코난(김대우) 2021.01.06 129
8 2021년 머신러닝과 인공지능(AI) 트렌드 - MLaaS (서비스로의 머신러닝) file 코난(김대우) 2020.12.29 149
7 머신러닝을 시작하는 개발자를 위한 - (4) 2021년의 ML Trend - MLaaS와 MLOps(Machine Learning + DevOps) 코난(김대우) 2020.12.28 96





XE Login