반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


 

Untitled97
In [94]:
#라이브러리 불러오기 
import pandas as pd 
import os
import numpy as np

#랜덤포레스트 라이브러리
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.tree import export_graphviz
import warnings

import pydotplus
from IPython.display import Image
from sklearn import tree

import statsmodels.api as sm

import matplotlib.pyplot as plt

warnings.filterwarnings('ignore')
In [95]:
from matplotlib import font_manager, rc

#plot 한글 깨짐
plt.rc('font', family='Malgun Gothic')

#막대그래프 한글 깨짐
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)
In [96]:
최종데이터 = pd.read_csv('C:/Users/User/Desktop/AI data/최종데이터.csv', encoding='euc-kr')
In [97]:
최종데이터 = 최종데이터.drop(['철새도래지거리'], axis = 1)
In [98]:
최종데이터
Out[98]:
발생여부 발생연도 발생월 축종 평균기온 최저기온 최고기온 평균풍속 평균상대습도 일교차
0 1 충청남도 2018 3 5.6 -2.9 14.4 1.5 58.8 17.3
1 1 경기도 2018 3 5.5 -0.3 9.4 3.5 67.6 9.7
2 1 경기도 2018 3 4.8 -1.0 10.3 2.7 57.5 11.3
3 1 충청북도 2018 3 오리 12.2 7.8 14.8 0.8 90.8 7.0
4 1 충청남도 2018 2 -5.8 -14.6 3.2 0.8 55.3 17.8
... ... ... ... ... ... ... ... ... ... ... ...
5913 0 경기도 2008 4 10.3 7.5 16.3 2.8 68.3 8.8
5914 0 경기도 2005 12 -5.2 -13.1 1.2 1.2 73.0 14.3
5915 0 경기도 2008 4 8.1 3.4 14.5 1.2 80.6 11.1
5916 0 경기도 2008 11 5.2 0.9 10.5 0.9 70.4 9.6
5917 0 경기도 2011 2 -1.8 -6.7 5.6 0.5 80.8 12.3

5918 rows × 11 columns

In [99]:
variables = 최종데이터.columns[5:11].tolist() ## 설명 변수 리스트
 
y = 최종데이터['발생여부'] ## 반응 변수
selected_variables = variables ## 초기에는 모든 변수가 선택된 상태
sl_remove = 0.05
 
sv_per_step = [] ## 각 스텝별로 선택된 변수들
adjusted_r_squared = [] ## 각 스텝별 수정된 결정계수
steps = [] ## 스텝
step = 0
while len(variables) > 0:
    X = sm.add_constant(최종데이터[selected_variables])
    p_vals = sm.OLS(y,X).fit().pvalues[1:] ## 절편항의 p-value는 뺀다
    max_pval = p_vals.max() ## 최대 p-value
    if max_pval >= sl_remove: ## 최대 p-value값이 기준값보다 크거나 같으면 제외
        remove_variable = p_vals.idxmax()
        selected_variables.remove(remove_variable)
        
        step += 1
        steps.append(step)
        adj_r_squared = sm.OLS(y,sm.add_constant(최종데이터[selected_variables])).fit().rsquared_adj
        adjusted_r_squared.append(adj_r_squared)
        sv_per_step.append(selected_variables.copy())
    else:
        break
In [100]:
selected_variables
Out[100]:
['평균기온', '평균풍속', '평균상대습도', '일교차']
In [101]:
최종데이터_Target = 최종데이터['발생여부']
In [102]:
최종데이터_Data = 최종데이터[['평균기온','평균풍속','평균상대습도','일교차']]
In [103]:
Decision_Tree = DecisionTreeClassifier(random_state=200)
In [104]:
X_train, X_test, y_train, y_test = train_test_split(최종데이터_Data, 최종데이터_Target, test_size=0.2, random_state=10, shuffle = True)
In [105]:
Decision_Tree.fit(X_train, y_train)
Out[105]:
DecisionTreeClassifier(random_state=200)
In [106]:
np.where(np.isnan(y_train))
Out[106]:
(array([], dtype=int64),)
In [107]:
print("Train Set Score : {:.2f}".format(Decision_Tree.score(X_train, y_train)))
print("Test Set Score : {:.2f}".format(Decision_Tree.score(X_test, y_test)))
Train Set Score : 1.00
Test Set Score : 0.84
In [110]:
Decision_Tree_Prediction = Decision_Tree.predict(X_test)
In [122]:
a = list(y_test)
In [125]:
fig = plt.figure( figsize = (12, 4))
chart = fig.add_subplot(1,1,1)
chart.plot(a[:200], marker='o', color='blue', label='실제값')
chart.plot(Decision_Tree_Prediction[:200], marker='^', color='red', label='예측값')
chart.set_title('Decision Tree 예측 결과', size=30)
plt.xlabel('횟수', size=20)
plt.ylabel('발생여부', size=20)
plt.legend(loc = 'best')
Out[125]:
<matplotlib.legend.Legend at 0x21a088dd0d0>
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기