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 |