import sklearn
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import DecisionTreeRegressor
train = pd.read_csv(r'C:\Users\ygh12\OneDrive\바탕 화면\DB\train.csv', encoding = "UTF-8")
test = pd.read_csv(r'C:\Users\ygh12\OneDrive\바탕 화면\DB\test.csv', encoding = "UTF-8")
# 결측치 제거
test = test.dropna()
train = train.dropna()
# X, Y 설정 axis = 0 : 행 / axis = 1 : 열
X_train = train.drop(['count'], axis = 1)
Y_train = train['count']
#모델 훈련
model = DecisionTreeRegressor()
model.fit(X_train, Y_train)
#테스트 예측
pred = model.predict(test)
print(pred[:5])
#csv파일로 저장
submission = pd.read_csv('data/submission.csv')
submission['count'] = pred
submission.to_csv('submission.csv',index=False)
먼저 어떤 방식으로 데이터를 예측하는지 알아보도록 하자. 데이터를 예측하기 위해서는 train과 test, 두가지 데이터 셋이 필요하다. 하나의 데이터 셋을 두 종류로 분할하여 사용할 수도 있다. train과 test라는 이름이 아주 직관적인데, train 데이터 셋으로 예측 모델을 훈련하고, test 데이터 셋을 이용하여 훈련된 모델을 실제로 테스트한다.
이제 코드를 따라 진행해보자.
결측치가 있으면 당연히 데이터를 예측하거나 모델을 구성하는 과정에서 문제가 생길 수 있으므로, dropna를 통해 결측치가 있는 행을 제거하였다.
데이터는 hour_bef_ozone, hour_bef_humidity, hour_bef_pm10, hour_bef_pm2.5 등 날씨와 관련된 데이터와 함께 count(대여 횟수)가 주어진다. 최종적으로 날씨 데이터를 이용해 count를 예측하는 것이 우리의 목표이다.
X_train은 데이터 예측에 이용되는 변수이고, Y_train은 예측할 데이터라고 할 수 있다. 예측할 값은 count이므로, drop을 이용해 count 열을 X_train에서는 제외해주고, Y_train에 할당해준다.
이어서 model이라는 이름의 의사결정회귀나무를 만들고, model.fit(X_train, Y_train)를 사용해 통해 모델을 훈련시킨다.
마지막으로는 훈련시킨 모델을 통해 test 데이터 셋을 예측하고, 가장 앞의 5개 행을 확인한다.
이제 모델링 과정이 끝났다. 그러나 결과를 데이터로 남겨야 의미가 있는 법이다. 이제 데이터를 csv파일로 남겨야 한다.
먼저 미리 생성된 submission.csv파일을 pandas의 read_csv를 통해 submission이라는 data frame으로 불러온다. 그리고 예측한 count 값이 pred에 저장되어 있으므로, 두 값을 match 시켜주고, to_csv를 통해 submission을 다시 csv 파일로 변환한다. index = False는 df의 index(행의 이름)을 csv 파일로 옮기지 않겠다는 의미이다. index = True라면 반대로 index를 csv 파일로 옮기겠다는 의미이고.
Q. 예측하는 변수 count는 이산형인데 왜 regressor를 사용하는걸까?
'Python > 데이터분석' 카테고리의 다른 글
의사결정나무 (0) | 2022.06.23 |
---|---|
[DACON] 의사결정회귀나무로 따릉이 데이터 예측하기 - 기본 + 전처리 (0) | 2022.06.23 |