随机森林简单例子

来源:互联网 发布:现场网络直播的含义 编辑:程序博客网 时间:2024/05/03 23:15

# -*- coding: utf-8 -*-


import os

import pandas as pd

import numpy as np

os.chdir('E:/MYPROJECT/PythonProject')


## 训练集

traindata=pd.read_csv("traindata.csv")

traindata_colname=list(traindata.columns) #修改列名,注意该技巧

traindata_colname[0]='hotelid'

traindata.columns=traindata_colname



## 测试集

#列名一个名称为乱码

testdata=pd.read_csv("0720.csv",sep=',') #检查数据,看分割符是否正确

testdata_colname=list(testdata.columns) #修改列名,注意该技巧

testdata_colname[0]='hotelid'

testdata.columns=testdata_colname


## 第一天预测

colnames=['notcancelcii', 'week_constant', 'working_day_constant', 'cii_ahead_sameoneweek_constant',

'cii_ahead_sametwoweeks_avg_constant', 'cii_ahead_samethreeweeks_avg_constant', 'cii_ahead_samefourweeks_avg_constant',

'simple_estimate_constant','cii_ahead_1day_1', 'cii_ahead_3days_avg_1', 'cii_ahead_7days_avg_1',

'order_ahead_lt_1days_1', 'order_ahead_lt_2days_1', 'order_ahead_lt_3days_1', 'order_ahead_lt_7days_1',

'order_ahead_lt_14days_1', 'order_alldays_1']

train_set=traindata.loc[:,colnames[1:]] #训练集选取

train_target=traindata.loc[:,colnames[0:1]] #训练集选取


testset=testdata.loc[:,colnames[1:]] #测试集选取



## 模型训练:rf


#trainset.describe() #查看数据的描述统计

#trainset.dtypes #查看各行的数据格式


from sklearn.ensemble import RandomForestRegressor

rf=RandomForestRegressor()#这里使用了默认的参数设置


#rf.fit(np.array(train_set),np.array(train_target).ravel())#进行模型的训练,形式ok


rf.fit(train_set, np.array(train_target).ravel())#进行模型的训练,形式ok


pred=rf.predict(testset)

acvalue=testdata.loc[:,colnames[0:1]]



#acvalue.to_csv('myfirst.csv')

#np.array(pred)-np.array(acvalue).ravel() #这样数据就可以作差了

#acvalue.to_csv("myfirst.csv") #这样就可以存储了


## 如何存储结果至csv

## 如何构建数据框



#酒店ID 占比/重要性 真实值 预测值(非线性)


acvalue.columns=["真实值"]

result=acvalue

result['预测值(非线性)']=pd.DataFrame(pred) #转换为矩阵框

result['占比/重要新']=testdata['rate']

result['绝对误差']=abs(result['预测值(非线性)']-result['真实值'])

result['相对误差']=abs(result['预测值(非线性)']-result['真实值'])/result['真实值']

result=result.sort('占比/重要新',ascending=0)


MAE100=np.average(result['绝对误差'][0:100])

MAE500=np.average(result['绝对误差'][0:500])

MAE1w=np.average(result['绝对误差'][0:10000])


MRE100=np.average(result['相对误差'][0:100])

MRE500=np.average(result['相对误差'][0:500])


print 'output'

print 'MAE@100', MAE100

print 'MAE@500', MAE500

print 'MAE@1w', MAE1w

print 'MRE@100', MRE100

print 'MRE@500', MRE500

result.to_csv('result0720.csv')

#case

#x=pd.DataFrame({'a':[1,5,4,2],'b':[100,101,102,103]})

#x.sort('a',ascending=0)


0 0