HealRo Project
RandomForest Regressor 성능 분석
이무쿤
2020. 1. 24. 20:14
반응형
RandomForest
의사 결정 트리
어떤 값을 결정하는 여러 요소가 있을 때 각 요소 별로 트리를 만듬
암 발병 확률에 대한 요소가 키, 몸무게 , 혈액형 , 흡연 여부 등등이 있다면
키 , 몸무게 암 확률에 대한 트리 1개 , 다른 요소와의 결합으로 트리 1개 ....
이런식으로 트리들이 모여서 forest를 이루고, 각 트리에서 질문을 던짐.
흡연을 할 때 , 몸무게가 x이상이라면 암에 걸릴 확률은? ...
그리고 그 질문들을 종합하여 결론을 내림. -> ensemble (앙상블)이라고 함
어떤 요소가 결과 값에 가장 영향을 많이 주는지를 포함한 경향성을 파악
RandomForestRegressor 모델 성능을 예측하는 방법은 train set에서 학습시킨 모델에게 새로운 데이터와 값을 score함수의 인자로 전달.
그러면 새 데이터를 바탕으로 값을 도출하는데 그 값이 새 값과의 일치율을 바탕으로 성능이 나오는 것임.
from functools import wraps
import json
from flask import Flask
from flask_jsonpify import jsonpify
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from flask_restful import reqparse
import pandas as pd
import numpy as np
app = Flask(__name__)
@app.route('/', methods=['GET'])
def test():
train = pd.read_csv("./train.csv")
train["datetime"] = train["datetime"].astype("datetime64")
train["hour"] = train["datetime"].dt.hour
train["year"] = train["datetime"].dt.year
y = train["count"]
train = train.drop(["casual","registered","count","datetime","holiday","season"], 1)
x_train,x_valid,y_train,y_valid = train_test_split(train,y,test_size = 0.33,random_state = 42)
"""
parser = reqparse.RequestParser()
parser.add_argument('year', type=str)
parser.add_argument('hour', type=str)
parser.add_argument('windspeed', type=str)
parser.add_argument('humidity', type=str)
parser.add_argument('atemp', type=str)
parser.add_argument('temp', type=str)
parser.add_argument('weather', type=str)
parser.add_argument('workingday', type=str)
parser.add_argument('holiday', type=str)
parser.add_argument('season', type=str)
args = parser.parse_args()
test = pd.DataFrame({'year': [args['year']], 'hour': [args['hour']], 'windspeed' :[args['windspeed']], 'humidity' : [args['humidity']],
'atemp' : [args['atemp']],'temp' : [args['temp']],'weather' : [args['weather']],'workingday' : [args['workingday']]
})
"""
sub = pd.read_csv("./sampleSubmission.csv")
rf = RandomForestRegressor()
rf.fit(x_train,y_train)
p = rf.predict(x_valid)
print("Accuracy is: ", rf.score (x_valid,y_valid))
return jsonpify(test.head(1).to_json())
반응형