지난 시간에 이어 코드를 분석해보고자 한다.
1. 필요한 라이브러리들을 사용하겠다고 미리 알려주는 부분이다. 똑같이 따라써주자.
아래 라이브러리들을 살펴보면
pandas: 통계 관련된 라이브러리이다.
numpy: 숫자 관련된 라이브러리이다.
matplotlib: 그래프를 그릴 수 있게 해준다.
seaborn: 좀 알록달록한 그래프를 그릴 수 있게 해준다.
%matplotlib inline: 실행한 화면에서 바로 그래프를 볼 수 있게 해준다.
warnings.filterwarnings('ignore'): warning 메세지를 무시하게 해준다.
1 2 3 4 5 6 7 8 9 10 11 | import pandas as pd import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline import warnings warnings.filterwarnings('ignore') | cs |
2. 캐글에서 데이터를 불러오는 부분이다.
캐글 내 input 폴더에 있는 train.csv 와 test.csv 파일을 읽어와서, dates 는 "datetime" 열을 가져와 읽는다.
1 2 | train = pd.read_csv("../input/train.csv", parse_dates=["datetime"]) test = pd.read_csv("../input/test.csv", parse_dates=["datetime"]) | cs |
3. 가져온 datetime 을 가지고 연, 월, 일, 시, 분, 초, 요일로 나눈다.
Train 데이터와 Test 데이터 모두 나눠준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | train["year"] = train["datetime"].dt.year train["month"] = train["datetime"].dt.month train["day"] = train["datetime"].dt.day train["hour"] = train["datetime"].dt.hour train["minute"] = train["datetime"].dt.minute train["second"] = train["datetime"].dt.second train["dayofweek"] = train["datetime"].dt.dayofweek test["year"] = test["datetime"].dt.year test["month"] = test["datetime"].dt.month test["day"] = test["datetime"].dt.day test["hour"] = test["datetime"].dt.hour test["minute"] = test["datetime"].dt.minute test["second"] = test["datetime"].dt.second test["dayofweek"] = test["datetime"].dt.dayofweek | cs |
4. 머신러닝 알고리즘을 실행할 수 있는 함수에 넣기 전, 함수가 이해할 수 있는 형태로 데이터를 살짝 바꿔주는 부분이다.
4-1) categorical_feature_names 에 들어가 있는 계절, 날씨, 년, 월, 일 등은 모두 카테고리로 나눌 수 있는 값들이다.
(시간이나 온도 등과 달리, 몇 가지 주어진 값 중 고를 수 있다는 뜻이다: 봄, 여름, 가을, 겨울 중 하나처럼)
이 변수들의 자료형을 pandas 에서 제공하는 category 형으로 바꿔준 다음에, feature_names 변수에 넣어준다.
1 2 3 4 5 6 7 8 | categorical_feature_names = ["season","holiday","workingday","weather", "dayofweek","month","year","hour"] for var in categorical_feature_names: train[var] = train[var].astype("category") test[var] = test[var].astype("category") feature_names = ["season", "weather", "temp", "atemp", "humidity", "windspeed", "year", "hour", "dayofweek", "holiday", "workingday"] |
4-2) 문제를 풀 때, 대략적인 로직은 X_train 변화에 따른 Y_train 값이 나오는 이유를 분석하여, X_test 를 넣었을 때,
Y_test 값이 어떻게 나올지를 예측하는 것이다.
(즉, X_train 과 X_test 는 변수, Y_train 과 Y_test 는 결과값이 되는 것이다.)
X_train 에는 train 데이터의 feature_names 들을, X_test 에는 test 데이터의 feature_names 들을 넣어준다.
Y_train 에는 train 데이터의 count 를 넣는다. (count 행은 자전거 대여수량이다.)
1 2 3 4 5 6 7 | X_train = train[feature_names] X_test = test[feature_names] label_name = "count" y_train = train[label_name] | cs |
5. RandomForest 알고리즘을 적용하여 예측을 하고자 한다.
Random Forest 알고리즘이 무엇인지는 다음에 다시 설명하기로 하고, 이번 포스팅에서는 어떻게 구현하는지만 다룰 예정이다.
Random Forest 알고리즘을 적용하기 위한 RandomForestRegressor 를 import 하고, RandomForestRegressor 를 이용하여 모델을 세팅한다.
n_estimators 는 트리의 수
n_jobs 는 fit 과 predict 시에 병행처리하는 작업의 수(The number of jobs to run in parallel for both fit and predict.)
(-1일 경우, 작업의 숫자는 코어의 숫자와 같다고 한다.)
random_state 는 random 숫자를 만드는 seed 이다. 아래 코드처럼 0일 경우, numpy 라이브러리에서 생성하는 임의의 숫자로 random 숫자를 생성한다.
model.fit 에 X 값과 Y 값을 넣어 모델을 피팅해주고, 피팅된 모델에 X_test 를 대입하여 예측값을 구한다.
1 2 3 4 5 6 7 8 9 10 11 | from sklearn.ensemble import RandomForestRegressor max_depth_list = [] model = RandomForestRegressor(n_estimators=100, n_jobs=-1, random_state=0) model.fit(X_train, y_train) predictions = model.predict(X_test) | cs |
6. 위에서 나온 예측값을 submission.csv 파일에 업데이트하여 제출하면 끝.
1 2 3 4 | submission = pd.read_csv("../input/sampleSubmission.csv") submission["count"] = predictions submission.to_csv("submission.csv", index=False) | cs |