본문 바로가기

AI/Kaggle

Bike Sharing Demand (2) 성능 개선 2회차

반응형

0.38 300등 안으로 진입.

성능 개선  1) 필요한 데이터 찾기. 연관성을 그림이나 groupby를 사용하여 시각화 시켜 확인.

               2) 앙상블 기법 = 두가지의 feature로 result가 될 수 있는 값을 만드는 방법.

               3) 새로운 머신러닝 모델 사용하기. ->과제

# This Python 3 environment comes with many helpful analytics libraries installed
# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python
# For example, here's several helpful packages to load in 

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)

# Input data files are available in the "../input/" directory.
# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory

import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

# Any results you write to the current directory are saved as output.

train = pd.read_csv("/kaggle/input/bike-sharing-demand/train.csv")
train.head()

train["datetime"] = train["datetime"].astype("datetime64")
train.dtypes
train.head(5000)

train["hour"] = train["datetime"].dt.hour 
train["year"] = train["datetime"].dt.year
train["dayofweek"] = train["datetime"].dt.dayofweek

y_casual = train["casual"]
y_registered = train["registered"]
y = train["count"]

 

train = train.drop(["casual","registered","count","datetime"], 1)  
train.head()

train.groupby("year")["count"].mean()  #count의 mean(평균)을 year 칼럼의 기준으로 묶어서 보여줌.

import seaborn as sns  #그림을 그림.
import matplotlib.pyplot as plt  #그림을 그릴 판을 만듬

_,banana = plt.subplots(1,2,figsize =(20,12))  #변수 두개가 필요한데 하나는 안써도 되므로, _이렇게 사용해도됨. 

                                                               #매개변수로 들어가는건 1,2 = 1열 2행, figuresize
sns.distplot(train["count"],ax = banana[0])     #아까 쓴 변수(그림판)에 count에 관하여 그림을 그림.
sns.distplot(np.log(train["count"]),ax = banana[1])  #로그를 사용해서 그림 ->정규분포도로 표현
#plt.xticks(rotation = 60)  #x축에 데이터가 많을때 겹쳐질 수 있으니 각도 조절
#boxplot #distplot대신 boxplot사용하면 막대그래프 

 

test = pd.read_csv("/kaggle/input/bike-sharing-demand/test.csv")
test["datetime"] = test["datetime"].astype("datetime64")
test["hour"] = test["datetime"].dt.hour
test["year"] = test["datetime"].dt.year
test["dayofweek"] = test["datetime"].dt.dayofweek


test = test.drop(["datetime"], 1)



test.head()









sub = pd.read_csv("/kaggle/input/bike-sharing-demand/sampleSubmission.csv")
sub.head()

train.head()





from sklearn.ensemble import RandomForestRegressor

rf = RandomForestRegressor(n_estimators = 100) #n_estimators는 RandomForest의 하이퍼파라미터.
rx = RandomForestRegressor(n_estimators = 100) #나무 1개가 한번의 학습 100이면 백번, 학습이란 질문을 통해 

                                                                      #데이터를 분류하는 과정
rf.fit(train,np.log1p(y_casual)) #1p = 1더해줌  0보다작은 값의 log방지.
rx.fit(train,np.log1p(y_registered))   # 앙상블 방법 두개의 칼럼을 각각 학습시킴. log로 하는 이유는 overliar를 제거

         #overliar가 있으면 예외적인 상황까지 학습하므로 최대한 정규 분포적으로 데이터를 위치시켜야함.

p = rf.predict(test)
x = rx.predict(test)
sub["count"] = np.expm1(p) + np.expm1(x) #m1 = 1빼줌 아까더해준 1 빼줌. 

sub.head()




test.head()


 

<과제>

LGBM으로 코드 짜기.

 

0.37210 점수 향상됨 하이퍼파라미터 설정한것도, 아무것도 안해줬는데도 LGBM을 사용한것 만으로 향상됨.

 

from lightgbm import LGBMRegressor

lga = LGBMRegressor()
lgb = LGBMRegressor()
lga.fit(train,np.log1p(y_casual))
lgb.fit(train,np.log1p(y_registered))


p = lga.predict(test)
x = lgb.predict(test)

sub["count"] = np.expm1(p)+np.expm1(x)


sub.to_csv("imu.csv",index = False)
sub.head()



 

 

 

반응형

'AI > Kaggle' 카테고리의 다른 글

kaggle 그림으로 데이터 분석  (0) 2019.09.10
Store Item Demand Forecasting Challenge 2회차  (0) 2019.09.10
Store Item Demand Forecasting Challenge  (0) 2019.08.29
Bike Sharing Demand  (0) 2019.08.27
Kaggle 데이터셋 학습법  (0) 2019.08.27