楼主: 诗殆韵
6720 1

怎么利用随机森林模型进行预测 [推广有奖]

  • 0关注
  • 0粉丝

VIP1

小学生

28%

还不是VIP/贵宾

-

威望
0
论坛币
1842 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
130 点
帖子
1
精华
0
在线时间
10 小时
注册时间
2018-5-28
最后登录
2019-12-19

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
已经确定使用随机森林模型进行预测,大概问题是有一些自定义设置的利率及天数,想要输入想设置的利率范围或天数输出该产品售空天数Y,写的程序如下,但是自己设置的变量只可以输入两个,并且最后输出的售空时间结果都是相同的,请各位大神指导。
import pandas as pd
data = pd.read_csv('C:\\Users\\huachen.mu\\Desktop\\fea.csv')

import numpy as np
import pandas as pd
para_name = ['INC_RATE','CMSC_RATE']###只能两个变量???
para_range = [ '0.05:0.08','0.02:0.08']
pre_scale_list = ['PRD_TERM', 'BAS_DAYS', 'PFST_AMT', 'OFST_AMT', 'DUE_INC_RAT', 'EST_AMT', 'INC_RATE', 'CMSC_RATE',
                  'CTD_RATE','AGIO_FEE','CTD_RATE','DFT_INC_RAT','CTD_RAT']
one_hot_feature = ['PRD_TYP', 'CUS_CLS', 'CCY', 'INC_TYP', 'CAN_FLG', 'PRD_ATTR', 'RSK_LVL', 'ST_FLG', 'BGT_CLS',
                       'TX_CNL', 'DEP_TYP', 'HX_PRD_CD','EST_FLG']
para_df = pd.DataFrame(para_range).T
para_df.columns = para_name
for i in para_name:
    if i in pre_scale_list:
        for j in para_df[i]:
                a = j.split(':')
                a = list(map(float, a))
                if len(a) > 1:
                    start = a[0]
                    end = a[1]
                    b= np.arange(start, end, 0.01)
                    b= ','.join('%s'% i for i in b)
                    para_df[i] =b
                else:
                    para_df[i] = a
    if i in one_hot_feature:
        for j in para_df[i]:
            a = j.split(':')
            a= ','.join(a)
            para_df[i] = a

for i in para_name:
    para_a = para_df[i].str.split(',', expand=True).stack().reset_index(level=1,drop=True).rename(i)
    para_b = para_df.drop(i,axis=1)
    para_c = para_b.join(para_a)
    para_df = para_c

data_DUE_INC_RAT = []
for i in data['DUE_INC_RAT']:
    a = str(i).split('-', 1)
    if len(a) == 1:
        data_DUE_INC_RAT.append(a[0])
    else:
        data_DUE_INC_RAT.append(a[1])
data['DUE_INC_RAT'] = data_DUE_INC_RAT
data['DUE_INC_RAT'] = data['DUE_INC_RAT'].astype('float64')
print('收益率处理完成')
data['DEP_TYP'].fillna(-1, inplace=True)
data['HX_PRD_CD'].fillna(-1, inplace=True)
data['INC_TYP'] = np.where(data['INC_TYP'].isnull(), data['RSK_LVL'], data['INC_TYP'])
print('缺失值处理完毕')

# pre_scale_list = ['PRD_TERM', 'BAS_DAYS', 'PFST_AMT', 'OFST_AMT', 'DUE_INC_RAT', 'EST_AMT', 'INC_RATE', 'CMSC_RATE',
#                   'CTD_RATE','AGIO_FEE','CTD_RATE','DFT_INC_RAT','CTD_RAT']
# one_hot_feature = ['PRD_TYP', 'CUS_CLS', 'CCY', 'INC_TYP', 'CAN_FLG', 'PRD_ATTR', 'RSK_LVL', 'ST_FLG', 'BGT_CLS',
#                        'TX_CNL', 'DEP_TYP', 'HX_PRD_CD','EST_FLG']
for i in one_hot_feature:
    if i not in para_name:
        para_df[i] = max(list(data[i]),key = list(data[i]).count)
for i in pre_scale_list:
    if i not in para_name:
        para_df[i] = np.median(list(data[i]))

# print(para_df.columns)



para_df['brand'] = 'test'
data['brand']= 'train'

# print(para_df)


data_new = pd. concat([data,para_df],axis =0)
data_new.isnull().any()


from sklearn.preprocessing import OneHotEncoder,LabelEncoder
def read_feature(data):
    for i in one_hot_feature:
        print(i)
        try:
            data[i] = LabelEncoder().fit_transform(data[i].apply(int))
        except:
            data[i] = LabelEncoder().fit_transform(data[i].apply(str))
        print(i+'finish')
    return data


data = read_feature(data_new)


data_list = data.columns.to_list()


data_list.remove('PRD_CD')
data_list.remove('TIMES_DIFF')
data_list.remove('brand')
del_list=[]


for i in data_list:
    data[i] =data[i].astype('float')
    Dx = np.std(data[i])
    # print(Dx)
    if Dx ==0:
        del_list.append(i)
        data.pop(i)
data_list = data.columns.to_list()
data_list.remove('PRD_CD')
data_list.remove('TIMES_DIFF')
# print(del_list)
for i in del_list:
    if i in one_hot_feature:
        one_hot_feature.remove(i)
for i in del_list:
    if i in pre_scale_list:
        pre_scale_list.remove(i)

# print(data)


from sklearn import preprocessing

max_scaleer = preprocessing.MinMaxScaler()

data_sca = data[pre_scale_list]
data_sca = max_scaleer.fit_transform(data_sca)
data_sca=pd.DataFrame(data_sca)
data_sca.columns=pre_scale_list
data[pre_scale_list] =data_sca


data_percentile95 = np.percentile(data['TIMES_DIFF'],95)
data_zhouqi = (data['PRD_TERM'])* 24 *60 *60
data[data['TIMES_DIFF']>data_percentile95 ] = -1
data[data['TIMES_DIFF']> data_zhouqi ] =-1

train = data[data['brand'] == 'train']
test = data[data['brand'] == 'test']
train_label = train.pop('TIMES_DIFF')
test_label = test.pop('TIMES_DIFF')
train_x=train[one_hot_feature]
test_x=test[one_hot_feature]
# print( one_hot_feature)
from scipy import sparse
enc = OneHotEncoder(categories='auto')
for i in one_hot_feature:
    enc.fit(data[i].values.reshape(-1, 1))
    train_a=enc.transform(train[i].values.reshape(-1, 1))
    test_a = enc.transform(test[i].values.reshape(-1, 1))
    train_x= sparse.hstack((train_x, train_a))
    test_x = sparse.hstack((test_x, test_a))
    # print(i+' finish')



from sklearn.ensemble import RandomForestRegressor,GradientBoostingRegressor
import xgboost
rfr = RandomForestRegressor(n_estimators=20)
rfr.fit(train_x,train_label)
rfr_predict = rfr.predict(test_x)
print(rfr_predict)
para_df['TIMES_DIFF'] = list(rfr_predict)
min_times = para_df['TIMES_DIFF'].min()
print(min_times)

para_df = para_df[para_df['TIMES_DIFF']!= -1]

# fast_celve = para_df[para_df['TIMES_DIFF']==para_df['TIMES_DIFF'].min()]



# print(para_df['TIMES_DIFF'])
# print(fast_celve)
print(para_df)

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:随机森林 林模型 randomForest Processing percentile

捕获.PNG (10.52 KB)

捕获.PNG

已有 1 人评分经验 论坛币 收起 理由
yunnandlg + 100 + 20 精彩帖子

总评分: 经验 + 100  论坛币 + 20   查看全部评分

沙发
yunnandlg 在职认证  学生认证  发表于 2019-7-3 11:33:32 |只看作者 |坛友微信交流群
建议将数据也上传论坛,方便讨论交流
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
玩于股涨之中 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-3 09:04