본문 바로가기

세상 바라보는 시선 👁/Growth Hacking

[DS School] Level6 에서 기록으로 남겨 놓을 것 (Decision tree, Random Forest, DecisionTreeClassifier, DecisionTreeRegressor)


데이터 분석의 과정

전체적인 순서는 Load DataSet -> Preprocessing -> Explore(각 column 분석 및 예측과 차이점 발견, 그리고 이유에 대한 고찰)

datetime으로 된 데이터는 연월일시분초로 바꿔준다.

train["datetime-year"] = train["datetime"].dt.year

train["datetime-month"] = train["datetime"].dt.month

train["datetime-day"] = train["datetime"].dt.day

train["datetime-hour"] = train["datetime"].dt.hour

train["datetime-minute"] = train["datetime"].dt.minute

train["datetime-second"] = train["datetime"].dt.second

모든 train 데이터에서 바꿔주거나 만들어준 변수는 train 데이터도 빼먹지 않고 바꿔준다.

Seaborn을 시각화 하는 것은 아래와 같이 입력한다.

# matplotlib로 실행하는 모든 시각화를 자동으로 쥬피터 노트북에 띄웁니다.
# seaborn 도 결국에는 matplotlib를 기반으로 동작하기 때문에, seaborn으로 실행하는 모든 시각화도 마찬가지로 쥬피터 노트북에 자동적으로 띄워집니다.
%matplotlib inline

# 데이터 시각화 패키지 seaborn을 로딩합니다. 앞으로는 줄여서 sns라고 사용할 것입니다.
import seaborn as sns

# 데이터 시각화 패키지 matplotlib를 로딩합니다. 앞으로는 줄여서 plt라고 사용할 것입니다.
import matplotlib.pyplot as plt



PLOT 여러 개 배치

figur,((ax1,....)) =plt.subplots(nrows=2,ncols=3) 을 통해서 한 곳에 여러 plot을 배치한다.

# matplotlib의 subplots를 사용합니다. 이 함수는 여러 개의 시각화를 한 화면에 띄울 수 있도록 합니다.
# 이번에는 2x3으로 총 6개의 시각화를 한 화면에 띄웁니다. 시각화의 전체 사이즈는 18x8로 설정합니다.

figure, ((ax1, ax2, ax3), (ax4, ax5, ax6)) = plt.subplots(nrows=2, ncols=3)
figure.set_size_inches(18, 8)



# seaborn의 barplot으로 subplots의 각 구역에 연, 월, 일, 시, 분, 초 별 자전거 대여량을 출력합니다.

sns.barplot(data=train, x="datetime-year", y="count", ax=ax1)
sns.barplot(data=train, x="datetime-month", y="count", ax=ax2)
sns.barplot(data=train, x="datetime-day", y="count", ax=ax3)
sns.barplot(data=train, x="datetime-hour", y="count", ax=ax4)
sns.barplot(data=train, x="datetime-minute", y="count", ax=ax5)
sns.barplot(data=train, x="datetime-second", y="count", ax=ax6)

하나의 plot만 크기 변경하려면 다음과 같이 한다.

plt.figure(figsize = (18, 4))

카테고리컬 변수화에 필수인지? 대한 답변

  1. 범주형 변수의 경우에 무조건적으로 원핫인코딩을 진행하는 것이 점수의 상승을 보장하지는 않습니다! 많은 차이가 나는지도 그 데이터의 특성에 따라 달라지기때문에 이는 직접 진행하신 후 확인을 해보시는 것이 가장 좋다고 말씀을 드리고 싶구요, 원 핫 인코딩을 한 번씩은 진행하여 확인해보시는 것을 추천드립니다!

Decision tree(DecisionTreeClassifier, DecisionTreeRegressor), Random Forest

# Write your code here!

#scikit-learn ==sklearn

from sklearn.tree import DecisionTreeClassifier





model = DecisionTreeClassifier()



#Regressor으로

from sklearn.tree import DecisionTreeRegressor

newModel = DecisionTreeRegressor(random_state = 1 )



# Fit

model.fit(X_train, y_train)

newModel.fit(X_train, y_train)



#Predict

prediction_list = model.predict(X_test)

prediction_listRegressor = newModel.predict(X_test)



submit = pd.read_csv("../data/sampleSubmission.csv")

print(submit.shape)

#submit["count"] =  prediction_list

#submit.to_csv("../data/baseresult2.csv", index = False)

submit["count"] =  prediction_listRegressor

submit.to_csv("../data/newresult(Dayweek).csv", index = False)

Decision tree는 classfier와 Regressor가 있다.

Classfier는 생존자 vs 사망자 와 같이 classfication 하는데 더 효과가 좋다.

Regressor 는 음의 무한대에서 양의 무한대 까지 숫자를 예측하는데 효과가 좋다.

Random Forest

decision treee에 baggin, bottstrap aggregating 기법을 추가한 것

원본 데이터가 주어지면, 데이터를 복원 추출 하는 것.

Decision Tree보다 거의 언제나 좋은 성능을 보장한다.

from sklearn.ensemble import RandomForestRegressor

forestModel = RandomForestRegressor(random_state = 1)

# Fit

forestModel.fit(X_train, y_train)

# Predict

prediction_listForest = forestModel.predict(X_test)

# submit

submitForest = pd.read_csv("../data/sampleSubmission.csv")

submitForest["count"] =  prediction_listForest

submitForest.to_csv ("../data/forest1.csv", index = False)

 

 

♡를 눌러주시면 블로그를 작성하는데 큰 힘이 됩니다♪
로그인이 필요없어요.

이 블로그 인기글