一个 python + 数据预处理+随机森林模型 (案列)

简介: 本文介绍了一个使用Python进行数据预处理和构建随机森林模型的实际案例。首先,作者通过删除不必要的列和特征编码对数据进行了预处理,然后应用随机森林算法进行模型训练,通过GridSearchCV优化参数,最后展示了模型的评估结果。

一个 python + 数据预处理+随机森林模型 (案列)

本次使用的是 样本可以去 boci_trial_0423.csv 下载

下载boci_trial_0423.csv


前言


这个是之前写的一个 python 的 + 随机森林模型例子,不适合初学者。


根据 百度百科的定义


随机森林指的是利用多棵树对样本进行训练并预测的一种分类器。该分类器最早由Leo Breiman和Adele Cutler提出,并被注册成了商标。


定义

在机器学习中,随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法。 而 “Random Forests” 是他们的商标。 这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。这个方法则是结合 Breimans 的 “Bootstrap aggregating” 想法和 Ho 的"random subspace method"以建造决策树的集合。

随机森林是一种包含很多决策树的分类器,既可以用于处理分类和回归问题,也适用于降维问题。其对异常值与噪音也有很好的容忍,相较于决策树有着更好的预测和分类性能。 [3]


学习算法


根据下列算法而建造每棵树 [1]:

1.用N来表示训练用例(样本)的个数,M表示特征数目。

2.输入特征数目m,用于确定决策树上一个节点的决策结果;其中m应远小于M。

3.从N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。

4.对于每一个节点,随机选择m个特征,决策树上每个节点的决定都是基于这些特征确定的。根据这m个特征,计算其最佳的分裂方式。

5.每棵树都会完整成长而不会剪枝,这有可能在建完一棵正常树状分类器后会被采用)。

准备

下载帮助文档

请先安装下面的库

pip install sklearn
pip install pandas
pip install joblib

一、python 代码

深度学习和强化学习都需要丰富的词汇来定义架构

import pandas as pd
import numpy as np
from sklearn import preprocessing

    ### 从Excel读
data_all=None
data_train=None
data_test=None
run_paint_or_ml=2


####################
# 1.2 数据预处理
####################
def run_preprocess(df,run_paint_or_ml):

    ###### 1) 舍弃不需要的列
    if run_paint_or_ml==1:
        ### 用于演示画图
        df=df.drop(['sysCustomerID'],axis=1)
        #df=df.drop(['sysCustomerID','sysContactID','ContactHrMi','Round','CampaignName','RemarkLength','Consider1','Consider9',],axis=1)
    else:
        ### 用于机器学习
        df=df.drop(['sysCustomerID','sysContactID','ContactDay','ContactHr','Team','Agent','ContactHrMi','Round','CampaignName','RemarkLength','Consider1','Consider9',],axis=1)

    ###### 2) 编码
    if run_paint_or_ml==1:
        ### 用于演示画图
        features = ['AgeGroup','Team','Agent',]
    else:
        ### 用于机器学习
        features = ['AgeGroup']

    for feature in features:
        le = preprocessing.LabelEncoder()
        le = le.fit(df[feature])
        df.is_copy =False
        df[feature] = le.transform(df[feature])

    print('\n==========> 预览预处理后的数据:==========')
    print(df.head())

    ###### 3) 分割数据集
    X=df.drop(['Result'],axis=1)
    y=df['Result']

    return df, X, y

# from sklearn.datasets import make_classification
from sklearn.metrics import make_scorer, accuracy_score, recall_score, precision_recall_fscore_support
from pprint import pprint

def scores(p,y):
    m = pd.DataFrame({'p':p,'y':y.values})
    tp = m[m.y+m.p>1].size/2
    pp = m[m.p>0].size/2
    ap = m[m.y>0].size/2
    print('true positive: {0}'.format(tp))
    print('predicted positive = true positive + false positive: {0}, tp/pp: {1}'.format(pp, tp/pp))
    print('actual positive = true positive + false negative: {0}, tp/ap: {1}'.format(ap, tp/ap))

    #print(m[m.y+m.p>0][0:m[m.y+m.p>0].size//2-1])
    '''
    i=0
    while i < m[m.y+m.p>0].size/2:
        print(m[m.y+m.p>0][i:min(i+50,int(m[m.y+m.p>0].size/2))])
        print('... ... ... ... ...')
        i+=50
    '''

####################
# 2.3 随机森林
####################
from sklearn.ensemble import RandomForestClassifier 
from sklearn.model_selection import GridSearchCV
import joblib
def run_RandomForest(X_train,y_train,X_test,y_test,threshold):
    print("-----------------随机森林----------------------------------")
    ###### 实例化模型
    clf=RandomForestClassifier()
    '''
    ###### 使用GridSearchCV调优参数
    ### 设置参数
    parameters={'n_estimators':[4,6,9],
                'criterion':['entropy','gini'],
                'max_features':['log2','sqrt','auto'],
                'max_depth':[2,3,5,10],
                'min_samples_leaf':[1,5,8],
                'min_samples_split':[2,3,5]
                }

    ### 测试参数
    acc_scorer=make_scorer(accuracy_score)
    gs=GridSearchCV(clf,parameters,scoring=acc_scorer,verbose=1)
    gs=gs.fit(X_train,y_train)

    ### 将最优参数赋给分类器
    print(gs.best_params_)
    clf=gs.best_estimator_
    '''
    ###### 直接使用调优得到的参数
    clf=RandomForestClassifier(criterion='entropy', max_depth=2, max_features='log2', min_samples_leaf=1, min_samples_split=2, n_estimators=4)

    ###### 加载模型
    #clf = joblib.load('rfc.pkl')

    ###### 训练数据
    clf.fit(X_train,y_train)

    ### 使用训练好的分类模型进行预测
    if threshold==1:
        predictions = clf.predict(X_test)
    else:
        # proba
        predictions = clf.predict_proba(X_test)[:,1]>threshold


    ###### 模型评估
    print('\n==========> 随机森林 --- precision:',accuracy_score(y_test, predictions))

  #这行代码使用了accuracy_score函数来计算随机森林模型的精确度。accuracy_score函数接受两个参数,
  #y_test表示测试集的真实标签,
  #predictions表示模型预测的标签。精确度是指模型预测为正例的样本中,真实为正例的比例。这行代码会输出随机森林模型的精确度。
  
    print('==========> 随机森林 --- recall:',recall_score(y_test, predictions))
  #这行代码使用了recall_score函数来计算随机森林模型的召回率。
  #recall_score函数也接受两个参数,
  #y_test表示测试集的真实标签,
  #predictions表示模型预测的标签。召回率是指真实为正例的样本中,模型预测为正例的比例。这行代码会输出随机森林模型的召回率**

  
    ### 打印出三个指标
    print(precision_recall_fscore_support(y_test, predictions,average='binary'))



    ###### 持久化
    ### 保存模型
    joblib.dump(clf, 'rfc.pkl')

    return predictions

def main():

    ### 从Excel读
    data_all=pd.read_csv('boci_trial_0423.csv')
    data_train=data_all.head(2000)
    data_test=data_all.tail(8000)
    #print('==========预览训练集:==========\n',data_all.head())

    ###### 1.2 数据预处理
    data_train, X_train, y_train = run_preprocess(data_train,run_paint_or_ml)
    data_test, X_test, y_test = run_preprocess(data_test,run_paint_or_ml)
    data_all, X_all, y_all = run_preprocess(data_all,run_paint_or_ml)
    ###### 2. 模型选择、训练、预测
    if run_paint_or_ml==2:

        #
        ###### 2.3 随机森林
        pred=run_RandomForest(X_train, y_train, X_test, y_test, 0.1)
        scores(pred,y_test)


if __name__=="__main__":
    main()



二,显示

py sk.py

因为是随机森林模型 所以每次 结果都不一样

总结

这个是 我 2020的时候写了,希望对大家有帮助



目录
相关文章
|
2天前
|
机器学习/深度学习 数据可视化 TensorFlow
使用Python实现深度学习模型的分布式训练
使用Python实现深度学习模型的分布式训练
106 73
|
5天前
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品消费需求分析的深度学习模型
使用Python实现智能食品消费需求分析的深度学习模型
41 21
|
7天前
|
机器学习/深度学习 数据采集 搜索推荐
使用Python实现智能食品消费偏好预测的深度学习模型
使用Python实现智能食品消费偏好预测的深度学习模型
42 23
|
8天前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费习惯预测的深度学习模型
使用Python实现智能食品消费习惯预测的深度学习模型
44 19
|
9天前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费趋势分析的深度学习模型
使用Python实现智能食品消费趋势分析的深度学习模型
57 18
|
9天前
|
机器学习/深度学习 数据采集 搜索推荐
使用Python实现深度学习模型:智能食品消费行为预测
使用Python实现深度学习模型:智能食品消费行为预测
43 8
|
6天前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费模式预测的深度学习模型
使用Python实现智能食品消费模式预测的深度学习模型
27 2
|
13天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
11天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
18天前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
131 59