【机器学习】应用简例 随机森林-小白无脑乱用

发现随机森林的正确率在0.76-0.86左右,多次用随机森林找一个正确率大于0.84的模型输出答案

这次用到的参数:
rfc=RandomForestClassifier(n_estimators=100 #决策树的数量
,criterion=“entropy” #分类标准-信息熵or基尼系数
,max_depth=4 #决策树最大深度
,min_samples_split=10) #至少有10个数据,树才会继续分支

把训练集分为新训练集和新问题集,在这上面验证准确性
Xtrain, Xtest, Ytrain, Ytest = train_test_split(arr_t[:,:-1],arr_t[:,-1],test_size=0.3) #(数据集,答案集,如何划分)0.3表示训练集和问题集三七分

import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
#随机森林分类器
from sklearn.model_selection import train_test_split
#功能:将数据集分为训练集测试集 Xtrain,Xtest,Ytrain,Ytest

df_t=pd.read_excel(r'D:\EdgeDownloadPlace\3dd40612152202ee8440f82a3d277008\train.xlsx')
df_a=pd.read_excel(r'D:\EdgeDownloadPlace\3dd40612152202ee8440f82a3d277008\test.xlsx')

def get_data_array_float64(df,test=False):
    df = df.drop(columns='uid')
    #去列名对应的列
    if test == True:
        df=df.drop(columns ='target')
        #去列名对应的列
        
    col_mode_lst=[]
    for each_col in df.columns:#获得每一列的众数
        cnts = df[each_col].value_counts()
   		#得到每一列的所有值以及它们出现的次数 ,降序排列
        if '?' in cnts and cnts.index[0] == '?':
            idx=1
        else :
            idx=0
        col_mode_lst.append(cnts.index[idx])

    for i in range(len(df.columns)):
        df[df.columns[i]][df[df.columns[i]] == '?'] = col_mode_lst[i]
        #df[df.columns[i]]按照列名获得列
		#按照列名获得列,找到列中值为‘?’的元素,将其改成col_mode_lst[i]
		
    df_array = df.values.astype(np.float64)
    #df.values得到DataFrame对象的矩阵形式
    #,astype()方法为矩阵转化元素类型
    return df_array

arr_t=get_data_array_float64(df_t)
arr_a=get_data_array_float64(df_a,True)


Xtrain, Xtest, Ytrain, Ytest = train_test_split(arr_t[:,:-1],arr_t[:,-1],test_size=0.3)

while True:
    rfc=RandomForestClassifier(n_estimators=100
                                ,criterion="entropy"
                               ,max_depth=4
                               ,min_samples_split=10)
                           		#实例化随机森林
    rfc = rfc.fit(Xtrain,Ytrain)
    #训练模型
    score = rfc.score(Xtest,Ytest)
    #得到正确率
    if score>0.84:
        answer = rfc.predict(arr_a).astype(np.int8).tolist()
        break

answer_df=pd.DataFrame(answer)
answer_df.to_excel(r'D:\EdgeDownloadPlace\3dd40612152202ee8440f82a3d277008\20201028ans.xlsx')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值