본문 바로가기

HealRo Project

RandomForest Regressor 성능 분석

반응형

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())
    
   
반응형