python + GBDT 수치 예측 실현

2849 단어 데이터 발굴
GBDT 에 대한 이론 적 소개 와 실제 생활 사례 는 아래 링크 를 볼 수 있다.
http://www.360doc.com/content/14/0911/22/14875906_408775170.shtml
https://blog.csdn.net/zhangbaoanhadoop/article/details/81840669 http://www.cnblogs.com/LeftNotEasy/archive/2011/03/07/random-forest-and-gbdt.html
GBDT 에 대해 모델 훈련 을 하고 데 이 터 를 예측 하 는 방법 (분류 가 아 닌) 을 보 여 주 며 반환 값 을 처리 하고 모델 의 좋 고 나 쁨 을 평가 하 는 방법 을 보 여 준다.
배경 은 천지 의 IJICAI 대회 입 니 다. 데 이 터 는 이미 처리 되 었 습 니 다. 여기 서 직접 사용 합 니 다.
코드 는 다음 과 같다.
 
#$encoding=utf-8
'''
   ubuntu+IDEA+python35
     :  GBDT         
  :   IJICAI,      
PS:feature_data.csv         
'''
import numpy as np
import pandas as pd
from sklearn import ensemble, cross_validation

#             
def rmspe(zip_list,count):
    # w = ToWeight(y)
    # rmspe = np.sqrt(np.mean((y - yhat) ** 2))
    sum_value=0.0
    # count=len(zip_list)
    for real,predict in zip_list:
        v1=(real-predict)**2
        sum_value += v1
    v2=sum_value / count
    v3=np.sqrt(v2)
    return v3

#        
def get_features_target(data):
    data_array=pd.np.array(data)#  dataframe,    ,   array
    features_list=[]
    target_list=[]
    for line in data_array:
        temp_list=[]
        for i in range(0,384):#   384   
            if i == 360 :#index=360      flow
                target_temp=int(line[i])
            else:
                temp_list.append(int(line[i]))
        features_list.append(temp_list)
        target_list.append(target_temp)
    return features_list, target_list
    # return pd.DataFrame(features_list),pd.DataFrame(target_list)

def run_demo():

    feature_save_path = "/home/wangtuntun/IJCAI/Data/feature_data.csv"  #              
    data = pd.read_csv(feature_save_path)
    data_other,data=cross_validation.train_test_split(data,test_size=0.001,random_state=10)#          ,    
    train_and_valid, test = cross_validation.train_test_split(data, test_size=0.2, random_state=10)
    train, valid = cross_validation.train_test_split(train_and_valid, test_size=0.01, random_state=10)
    train_feature, train_target = get_features_target(train)
    test_feature, test_target = get_features_target(test)
    valid_feature, valid_target = get_features_target(valid)

    params = {'n_estimators': 500, 'max_depth': 4, 'min_samples_split': 2,
              'learning_rate': 0.01, 'loss': 'ls'}
    clf = ensemble.GradientBoostingRegressor(**params)

    clf.fit(train_feature, train_target) #  
    # mse = mean_squared_error(test_target, clf.predict(test_feature)) #      MSE
    # print(mse)
    pre=clf.predict(test_feature)
    pre_list=list(pre)
    real_pre_zip=zip(test_target,pre_list)

    count=len(pre_list)
    error=rmspe(real_pre_zip,count)
    print(error)

run_demo()

 
 
 
 

좋은 웹페이지 즐겨찾기