본문 바로가기
머신러닝

Kaggle 풀어보기 - Bike Sharing Demand - 3

by 스클루지 2018. 3. 26.
반응형

지난 시간에 이어 코드를 분석해보고자 한다.


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"]

cs


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 를 이용하여 모델을 세팅한다.

model = RandomForestRegressor(n_estimators=100, n_jobs=-1, random_state=0)

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



반응형