首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >gcForest 集成学习方法的 Python 实现

gcForest 集成学习方法的 Python 实现

原创
作者头像
王相军
发布于 2018-01-15 08:58:04
发布于 2018-01-15 08:58:04
6.6K8
举报
文章被收录于专栏:王相军的专栏王相军的专栏

前言

看完 gcForest 这篇 paper 有一段时间了,但是一直没有去网上搜集相关的实现代码,去把它调试跑通,并将之应用到实际的项目中。这两天终于抽空做了实现,并和自己项目中常用的集成算法(TreeNet、XGBoost)做了简单对比。下面总结一下整个算法的 Python 实现过程,以及将它应用到自己的数据集上出现的问题和解决办法。

一、运行环境要求

Python 版本:3.6.0 以上;

numpy 版本:1.12.0 以上;

jupyter 版本:1.0.0 以上;

scikit-learn 版本:0.18.1 以上。

解决办法: 可以直接在 Anaconda 官网 去下载对应操作系统的 Python 3.6 version;然后在 pycharm 上去选择对应版本的 project Interpreter;之后可以在 Package 列表中查看上述包对应的版本,不符合要求的可以直接更新。这样,整个 gcForest 算法的 Python 运行环境就 OK 了。

二、gcForest 实现

gcForest 算法在 github 上已经有大神实现了,版本也有好几个,我自己把其中一个版本(地址:https://github.com/pylablanche/gcForest) clone 到本地,并做了调试实现。

1) gcForest 算法实现

gcForest 算法的实现代码相对较多,直接以附件的形式上传,名称:GCForest.py(可以直接将该附件导入工程就可以了)。

2)示例——验证算法能否跑通

为了验证算法的可行性,写一个小的 demo 去测试,至于 model 中的参数(详细说明见具体实现类,12 个参数,一点儿也不多)可以根据自己的要求去调试,代码如下:

代码语言:txt
AI代码解释
复制
# -*- coding:utf-8 -*-
__author__ = 'Administrator'

from python_dailyworking.GCForest import gcForest
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from python_dailyworking.Get_KS import get_ks
import pandas as pd

#loading the iris data
iris = load_iris()
X = iris.data
Y = iris.target

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.33)

gcf = gcForest(shape_1X=4, window = 2, tolerance=0.0)
gcf.fit(X_train, Y_train)

#predict 方法预测的是每一条样本的分类类别,结果 pred_X 是一个 [0,1,2...]的 array
pred_X = gcf.predict(X_test)
accuracy = accuracy_score(y_true=Y_test, y_pred=pred_X) #用 test 数据的真实类别和预测类别算准确率
print ('gcForest accuracy:{}'.format(accuracy))

#  predict_proba 方法预测的是每一条样本为 0,1,...类别的概率,结果是这样的:
# [[ 概率 1,概率 2,...],[ 概率 1,概率 2,...],...]的 DataFrame
# [:,1]表示取出序号为 1 的列,也就是预测类别为 1 的概率值,结果是一个数组
Y_predict_prod_test = gcf.predict_proba(X_test)[:, 1]
Y_predict_prod_train = gcf.predict_proba(X_train)[:, 1]
#下面是算 KS 值,不理解的可以置之不理
print ('model Y_test ks: ',get_ks(Y_test, Y_predict_prod_test))
print ('model Y_train ks: ',get_ks(Y_train, Y_predict_prod_train))

上面的代码中要导入我们已经实现了的 GCForest 类(第三行),后面的模型训练和预测分类结果,跟正常的 Python 调用 sklearn 中的方法一样,都是 fit(X,Y),predict(X_test) 等;代码最后两句是计算训练样本和测试样本的 KS 值,读者可以不用管,不影响程序的可运行性(运行的时候可以注释掉)。

3)用自己的数据集去跑模型

自己的数据:csv 文件,5000 个样本(有点少,但是不影响测试算法),77 个特征;

代码实现如下:

代码语言:txt
AI代码解释
复制
# -*- coding:utf-8 -*-
__author__ = 'Administrator'

import pandas as pd
import time
import numpy as np
from sklearn.model_selection import train_test_split
from python_dailyworking.GCForest import gcForest
from python_dailyworking.Get_KS import get_ks
from sklearn.metrics import accuracy_score

def train():
    input_path = 'D:\\working_temp_file\\final_combine_file_phone_xgb_77X.csv'
    input_data = pd.read_csv(input_path)
    drop_columns_all = 'bad'
    targetName = 'bad'
    X1 = input_data.drop(drop_columns_all, axis=1, inplace=False)
    X1 = X1.fillna(0)
    # 先将 X1 和 Y1(DataFrame)转化成 array
    X = np.array(X1)
    Y1 = input_data[targetName]
    Y1 = Y1.fillna(0)
    Y = np.array(Y1)

    X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.25)

    starttime = time.time()
    # gcForest Model
    # shape_1X 默认是 None,但是用到 Multi-Grain Scanning 时,需要用到,我理解的是特征的数量(对于序列数据)
    # window:滑动窗口的大小
    # stride:滑动步长,默认是 1
    # tolerance:提升的精度小于 tolerance 时,就停止整个过程。
    # n_mgsRFtree=30, cascade_test_size=0.2, n_cascadeRF=2,
    # n_cascadeRFtree=101, cascade_layer=np.inf,min_samples_mgs=0.1,
    # min_samples_cascade=0.05, tolerance=0.0, n_jobs=1
    gcf = gcForest(shape_1X=76, n_mgsRFtree=30, window=20,
                   stride=1, cascade_test_size=0.2, n_cascadeRF=2,
                   n_cascadeRFtree=50, cascade_layer=np.inf, min_samples_mgs=0.05,
                   min_samples_cascade=0.1, tolerance=0.0, n_jobs=1)
    gcf.fit(X_train, Y_train)

    pred_X = gcf.predict(X_test)
    print (pred_X)
    accuracy = accuracy_score(y_true=Y_test, y_pred=pred_X)
    print ('gcForest accuracy:{}'.format(accuracy))

    Y_predict_prod_test = gcf.predict_proba(X_test)[:, 1]
    Y_predict_prod_train = gcf.predict_proba(X_train)[:, 1]

    print ('model Y_test ks: ',get_ks(Y_test, Y_predict_prod_test))
    print ('model Y_train ks: ',get_ks(Y_train, Y_predict_prod_train))

    print ('整个模型的训练预测耗时为:',(time.time() - starttime))

if __name__ == '__main__':
    train()

用自己的数据集去跑 gcForest 算法的时候,还是会遇到很多问题,特别是数据格式方面,可以根据自己的数据格式去做一系列的调试和格式转换。

4)算法对比

自己通过调参,简单的和线上的算法(XGBoost)以及另外一个集成学习算法 TreeNet 做了对比,由于 gcForest 算法中要做多粒度平滑处理和训练级联森林,所以当参数中的森林数量和对应树的数量较多时,训练模型的时间比 XGBoost 和 TreeNet 都长;效果嘛,gcForest 也稍逊一点。

说明:其实本篇文章的重点是实现测试 gcForest 算法,并对其做一个简单的应用尝试,初衷也不是和其他算法在自己数据集上做性能对比,本身这个算法的优势是做序列数据和图像数据,对于一般的常规数据样本,效果不好也可以理解,加上自己用的样本数量也太少了点,可能或多或少影响了 model 的精度。

写的比较仓促,或许会存在一些问题,希望看到的伙伴能不吝赐教,或者是有兴趣的同事,我们可以一起探讨交流,谢谢!

附件:

archive.zip

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
8 条评论
热度
最新
王老师:您这篇文章里的第二篇代码“用自己的数据集去跑模型”,能不能也提供一下您使用的数据csv文件?本人自己的数据格式实在难以和您本文的代码相协调,到处出错,没有具体例子本人这个初学菜鸟是在是捉襟见肘、无从下手。万望大佬垂怜
王老师:您这篇文章里的第二篇代码“用自己的数据集去跑模型”,能不能也提供一下您使用的数据csv文件?本人自己的数据格式实在难以和您本文的代码相协调,到处出错,没有具体例子本人这个初学菜鸟是在是捉襟见肘、无从下手。万望大佬垂怜
回复回复点赞举报
还有,王老师,您这篇文章文末的那个附件里的内容似乎与“gcForest 集成学习方法的 Python 实现”没有关系呢。
还有,王老师,您这篇文章文末的那个附件里的内容似乎与“gcForest 集成学习方法的 Python 实现”没有关系呢。
回复回复点赞举报
王老师,本人拜读了您的《gcForest 集成学习方法的 Python 实现》这篇文章和代码,深表敬佩,觉得您写得深入浅出非常好,很适合像我这样的初学者,令本人获益匪浅。有一点,就是您代码中的计算KS值get_ks()函数的那个.py文件"python_dailyworking.Get_KS",我实在是很需要,调试代码时没有这个函数文件感觉总归是不完整的,少了一项有力的数据分析内容。王老师您能不能将这个文件作为附件、发到本人的邮箱568027560@qq.com?或者另发一篇文章作为对此的追加说明?非常感谢!
王老师,本人拜读了您的《gcForest 集成学习方法的 Python 实现》这篇文章和代码,深表敬佩,觉得您写得深入浅出非常好,很适合像我这样的初学者,令本人获益匪浅。有一点,就是您代码中的计算KS值get_ks()函数的那个.py文件"python_dailyworking.Get_KS",我实在是很需要,调试代码时没有这个函数文件感觉总归是不完整的,少了一项有力的数据分析内容。王老师您能不能将这个文件作为附件、发到本人的邮箱568027560@qq.com?或者另发一篇文章作为对此的追加说明?非常感谢!
33点赞举报
你好,我至今没有拿到。作者也是整整一年没消息、没发新文章了
你好,我至今没有拿到。作者也是整整一年没消息、没发新文章了
回复回复点赞举报
谢谢回复
谢谢回复
回复回复点赞举报
查看全部3条回复
感谢博主分享
感谢博主分享
回复回复点赞举报
您好,您能不能写一个基于GCforest进行图像分类的程序?就是将图片上的不同区域分类,非常感谢。
您好,您能不能写一个基于GCforest进行图像分类的程序?就是将图片上的不同区域分类,非常感谢。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
深入理解XGBoost:集成学习与堆叠模型
XGBoost是一种强大的集成学习算法,但在解决复杂问题时,单个模型可能无法达到最佳性能。集成学习和堆叠模型是两种有效的方法,可以进一步提高模型的性能。本教程将深入探讨如何在Python中应用集成学习和堆叠模型,使用代码示例详细说明这些概念。
Echo_Wish
2024/02/11
5460
机器学习第10天:集成学习
假如我们有一个分类任务,我们训练了多个模型:逻辑回归模型,SVM分类器,决策树分类器,然后我们看他们预测的结果,如果两个分类器预测为1,一个分类器预测为0,那么最后模型判断为1,采用的是一种少数服从多数的思想
Nowl
2024/01/18
1710
机器学习第10天:集成学习
机器学习:集成学习方法总结
机器学习是人工智能的一个分支领域,致力于构建自动学习和自适应的系统,它利用统计模型来可视化、分析和预测数据。一个通用的机器学习模型包括一个数据集(用于训练模型)和一个算法(从数据学习)。但是有些模型的准确性通常很低产生的结果也不太准确,克服这个问题的最简单的解决方案之一是在机器学习模型上使用集成学习。
皮大大
2025/01/22
2670
从深度学习到深度森林方法(Python)
目前深度神经网络(DNN)做得好的几乎都是涉及图像视频(CV)、自然语言处理(NLP)等的任务,都是典型的数值建模任务(在表格数据tabular data的表现也是稍弱的),而在其他涉及符号建模、离散建 模、混合建模的任务上,深度神经网络的性能并没有那么好。
算法进阶
2022/06/02
6590
从深度学习到深度森林方法(Python)
快速入门Python机器学习(36)
GridSearchCV实现了"fit"和" score"方法。它还实现了"得分样本" "预测" "预测概率" "决策函数" "变换"和"逆变换" ,如果它们在所使用的估计器中实现的话。应用这些方法的估计器的参数通过参数网格上的交叉验证网格搜索进行优化。
顾翔
2022/09/23
6640
快速入门Python机器学习(36)
机器学习中的逻辑回归
逻辑回归是机器学习领域中一种用于二分类问题的常用算法。尽管其名字中包含"回归"一词,但实际上,逻辑回归是一种分类算法,用于估计输入特征与某个事件发生的概率之间的关系。本文将深入讲解逻辑回归的原理、实际应用以及使用 Python 进行实现的代码。
GeekLiHua
2025/01/21
2820
1.6w字超全汇总!56个sklearn核心操作!!!
其中,X是特征数据,y是目标数据,test_size是测试集的比例(可以是0到1之间的值),random_state是随机种子,用于保证每次划分的结果一致。
Python编程爱好者
2024/05/13
5440
1.6w字超全汇总!56个sklearn核心操作!!!
Scikit-Learn Cheat Sheet:Python机器学习
一个方便的scikit-learn备忘录,用于使用Python进行机器学习,包括代码示例。
iOSDevLog
2018/07/25
1.5K0
Scikit-Learn Cheat Sheet:Python机器学习
机器学习集成学习与模型融合!
对比过kaggle比赛上面的top10的模型,除了深度学习以外的模型基本上都是集成学习的产物。集成学习可谓是上分大杀器,今天就跟大家分享在Kaggle或者阿里天池上面大杀四方的数据科学比赛利器---集成学习。
Datawhale
2020/08/20
1.1K0
机器学习集成学习与模型融合!
【机器学习】集成学习——提升模型准确度的秘密武器
集成学习(Ensemble Learning)是一种通过结合多个弱模型来提升整体预测准确性的技术。通过将多个模型的预测结果进行组合,集成学习在复杂任务中展现了极强的泛化能力。本文将探讨集成学习的主要方法,并通过代码示例演示如何应用这些方法来提升模型表现。
Qiuner
2024/10/04
4540
【机器学习】集成学习——提升模型准确度的秘密武器
【机器学习】机器学习重要方法—— 半监督学习:理论、算法与实践
半监督学习(Semi-Supervised Learning)是一类机器学习方法,通过结合少量有标签数据和大量无标签数据来进行学习。相比于纯监督学习,半监督学习在标签数据稀缺的情况下能更有效地利用无标签数据,提高模型的泛化能力和预测准确性。本文将深入探讨半监督学习的基本原理、核心算法及其在实际中的应用,并提供代码示例以帮助读者更好地理解和掌握这一技术。
E绵绵
2024/06/23
3.8K0
Scikit-learn 基础
Scikit-learn 是开源的 Python 库,通过统一的界面实现机器学习、预处理、交叉验证及可视化算法。
iOSDevLog
2019/05/29
9150
深度学习算法中的集成学习(Ensemble Learning)与深度学习的结合
深度学习在计算机视觉、自然语言处理等领域取得了巨大的成功,但在处理复杂任务和拥有少量标注数据的情况下,仍然存在一些挑战。为了进一步提高深度学习算法的性能和泛化能力,研究者们开始探索将集成学习与深度学习相结合的方法。本文将介绍集成学习的基本概念和深度学习的优势,然后讨论集成学习在深度学习中的应用,并总结结合集成学习的深度学习算法的优势和挑战。
大盘鸡拌面
2023/09/25
1.6K0
新手篇:机器学习测试的步骤和指南!
随着人工智能的蓬勃发展,机器学习已经成为当今科技领域的热门话题。作为人工智能的重要分支,机器学习通过训练模型来识别数据中的模式,从而实现预测和决策。而在机器学习项目的开发过程中,测试是不可或缺的一环。本文将为您介绍机器学习测试的相关工具、使用流程以及具体案例代码,帮助您从入门到实战,轻松掌握机器学习测试的核心知识。
测试开发技术
2024/07/31
2950
新手篇:机器学习测试的步骤和指南!
【独家】周志华教授gcForest(多粒度级联森林)算法预测股指期货涨跌
公众号特约编辑 / 一心想错 / 独家 gcForest Algorithm 对于周志华教授的文章,网上已经有人做出很详细的解释啦。我们对论文进行简单描述之后,然后直接从策略开始讲起。 gcForest(multi-Grained Cascade forest 多粒度级联森林)是周志华教授最新提出的新的决策树集成方法。这种方法生成一个深度树集成方法(deep forest ensemble method),使用级联结构让gcForest学习。gcForest模型把训练分成两个阶段:Multi-Grain
量化投资与机器学习微信公众号
2018/01/29
2.3K0
【独家】周志华教授gcForest(多粒度级联森林)算法预测股指期货涨跌
Scikit-Learn 高级教程——高级模型
在机器学习中,选择合适的模型是至关重要的。本篇博客将深入介绍 Scikit-Learn 中一些高级模型,包括集成学习方法、核方法、以及深度学习模型。我们将提供详细的代码示例,帮助你理解和应用这些高级模型。
Echo_Wish
2024/01/28
3390
【机器学习基础】Scikit-learn主要用法
Scikit-learn是基于NumPy、SciPy和Matplotlib的开源Python机器学习包,它封装了一系列数据预处理、机器学习算法、模型选择等工具,是数据分析师首选的机器学习工具包。   自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了,scikit-learn简称sklearn,支持包括分类,回归,降维和聚类四大机器学习算法。还包括了特征提取,数据处理和模型评估三大模块。
Francek Chen
2025/01/22
3190
【机器学习基础】Scikit-learn主要用法
one-vs-rest与one-vs-one以及sklearn的实现
sklearn:multiclass与multilabel,one-vs-rest与one-vs-one 针对多类问题的分类中,具体讲有两种,即multiclass classification和multilabel classification。multiclass是指分类任务中包含不止一个类别时,每条数据仅仅对应其中一个类别,不会对应多个类别。multilabel是指分类任务中不止一个分类时,每条数据可能对应不止一个类别标签,例如一条新闻,可以被划分到多个板块。 无论是multiclass,还是mul
用户1733462
2018/06/01
3.4K0
干货 | 基于Python实现五大常用分类算法(原理+代码)
K-Nearest Neighbors (KNN) 是一种懒惰学习算法和分类算法。此外,KNN是机器学习中最简单的方法。利用KNN进行分类,预测新点的分类。
CDA数据分析师
2021/08/05
20.8K2
干货 | 基于Python实现五大常用分类算法(原理+代码)
ML算法——KNN随笔【全国科技工作者日创作】【机器学习】
它是机器学习中唯一一个不需要训练过程的算法,它在训练阶段只是把数据保存下来,训练时间开销为 0,等收到测试样本后进行处理。
来杯Sherry
2023/05/31
4960
ML算法——KNN随笔【全国科技工作者日创作】【机器学习】
推荐阅读
相关推荐
深入理解XGBoost:集成学习与堆叠模型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档