您当前所在位置: > 网游 > 网游百科

模型转代码:XGBoost等模型也能快速转纯C或Java代码

时间:2019-06-23 06:26:19  来源:  作者:网络

原标题:模型转代码:XGBoost等模型也能快速转纯C或Java代码

机器之心编辑

参与:思源

你是否常训练炫酷的机器学习模型,用来分析数据或执行某些新奇的任务?你是否发现你的模型只能在一定开发环境上才能跑起来,很难部署也很难加入其它程序?今天我们将介绍一个炫酷的工具,它可以把构建在 scikit-learn 或 XGBoost 等库上的 ML 模型直接转化为不需要任何依赖项的 Java/Python/C 源代码。

  • 项目地址:https://github.com/BayesWitnesses/m2cgen/

那么转化为 Java/Python/C 源代码有什么用呢?想象一下如果我们使用 ML 框架(scikit-learnXGBoostLightGBM)训练了一个模型,现在我们希望把这个模型做成应用或嵌入到已有的模型中,那么我们肯定需要考虑这些问题:

  • 如果产品环境并没有 Python 运行时怎么办?
  • 如果产品不能通过云服务器进行计算,只能在本地进行怎么办?
  • ML 模型的推断速度太慢又怎么办?

这些问题都很难解决,也是开发者在做自己项目时常遇到的问题。如果我们能将用 Python 和 ML 库构建的模型转换一下,变成纯 Java 或 C 写的代码,且这些代码不会依赖各种库,那么部署或嵌入不就简单了么。在 m2cgen 这个项目中,它就可以将 ML 模型转化为不带有依赖项的纯代码。

m2cgen(Model 2 Code Generator)是一个轻量级的 Python 库,它能快速便捷地将已训练统计模型转化为 Python、C 和 Java 代码。目前 m2cgen 已经支持各种分类模型与回归模型,包括、、和梯度提升树等,注意这些都是统计机器学习模型,深度神经网络还是老老实实使用 DL 框架吧。

模型转换效果

我们可以通过几个简单案例了解 m2cgen 是如何转换为纯代码的,简单而言即把模型架构和权重显化了。如下所示如果我们简单地训练一个线性回归模型,当然代码看着简单是因为我们直接调用了 scikit-learn 库中的模型。

fromsklearn.datasets importload_boston

fromsklearn importlinear_model

importm2cgen asm2c

boston = load_boston()

X, y = boston.data, boston.target

estimator = linear_model.LinearRegression()

estimator.fit(X, y)

code = m2c.export_to_java(estimator)

上面最后一行将 scikit-learn 中的线性回归模型转化为 Java 代码,注意这个模型已经拟合了训练数据,或者说已经完成了训练。转化后的代码如下所示:

publicclassModel{

publicstaticdoublescore(double[] input){

return((((((((((((( 36.45948838508965) + ((input[ 0]) * (- 0.10801135783679647))) + ((input[ 1]) * ( 0.04642045836688297))) + ((input[ 2]) * ( 0.020558626367073608))) + ((input[ 3]) * ( 2.6867338193449406))) + ((input[ 4]) * (- 17.76661122830004))) + ((input[ 5]) * ( 3.8098652068092163))) + ((input[ 6]) * ( 0.0006922246403454562))) + ((input[ 7]) * (- 1.475566845600257))) + ((input[ 8]) * ( 0.30604947898516943))) + ((input[ 9]) * (- 0.012334593916574394))) + ((input[ 10]) * (- 0.9527472317072884))) + ((input[ 11]) * ( 0.009311683273794044))) + ((input[ 12]) * (- 0.5247583778554867));

}

}

如上 return 后面的语句,它就是一个线性回归的表达式,每一个 input[ * ] 都是一种特征,它后面的数值就是训练后的权重。所以整个线性模型有 13 个特征及对应权重,以及另外一个偏置项。

我们还可以找到更多的案例,如果我们用 XGBoost 训练一个简单的分类模型,我们可以看到转化的代码会大量使用 if-else 大法,不过我们本身也不用维护生成的代码,所以这种结构也没什么关系了。

importnumpy asnp

defscore(input):

if(input[ 2]) >= ( 2.5999999):

var0 = -0.0731707439

else:

var0 = 0.142857149

if(input[ 2]) >= ( 2.5999999):

var1 = -0.0705206916

else:

var1 = 0.12477719

var2 = np.exp((( 0.5) + (var0)) + (var1))

if(input[ 2]) >= ( 2.5999999):

if(input[ 2]) >= ( 4.85000038):

var3 = -0.0578680299

else:

var3 = 0.132596686

else:

var3 = -0.0714285821

if(input[ 2]) >= ( 2.5999999):

if(input[ 2]) >= ( 4.85000038):

var4 = -0.0552999191

else:

var4 = 0.116139404

else:

var4 = -0.0687687024

var5 = np.exp((( 0.5) + (var3)) + (var4))

if(input[ 2]) >= ( 4.85000038):

if(input[ 3]) >= ( 1.75):

var6 = 0.142011836

else:

var6 = 0.0405405387

else:

if(input[ 3]) >= ( 1.6500001):

var6 = 0.0428571403

else:

var6 = -0.0730659068

if(input[ 2]) >= ( 4.85000038):

if(input[ 3]) >= ( 1.75):

var7 = 0.124653712

else:

var7 = 0.035562478

else:

if(input[ 3]) >= ( 1.6500001):

var7 = 0.0425687581

else:

var7 = -0.0704230517

var8 = np.exp((( 0.5) + (var6)) + (var7))

var9 = ((var2) + (var5)) + (var8)

returnnp.asarray([(var2) / (var9), (var5) / (var9), (var8) / (var9)])

不过上面这种代码也非常合理,本身决策树就可以视为一种 if-else 的规则集合,不同输入特征 input[ * ] 满足不同的条件就能得到不同的值,这些值最后能联合计算分类结果。

项目细节

工具的安装很简单,直接用 pip 就行了:

pipinstall m2cgen

除了前面那样在代码中调用转换工具,我们还能通过命令行使用序列化的模型目标(pickle protocol)生成代码:

$ m2cgen <pickle_file>--language <language>[--indent <indent>]

[--class_name <class_name>] [--package_name <package_name>]

[--recursion-limit <recursion_limit>]

目前项目支持以下分类和回归模型的转换:

分类模型输出结果:

本文为机器之心编辑,转载请联系本公众号获得授权。

责任编辑:

相关下载

玩家评论

男人的浪漫就是穿高达!优衣库x高达模型40周年T恤

【导读】优衣库UT x 高达模型40周年合作T恤,3月下旬发售,售价为1500日元(约合人民币96元)。以各大高达机型为主题,其中独角兽、强袭自由高达、扎古等经典模型纷纷登场。--> 详情>>

阅读: 6
日期: 2020-02-10
实例解析:实体零售的单店模型和连锁模型_经营

原标题:实例解析:实体零售的单店模型和连锁模型 本文结合作者的从业经历,和近几年对新零售企业的观察和研究,详细拆解和分析了实体零售的单店模型和详情>>

阅读: 2
日期: 2020-01-01
实体零售的单店模型和连锁模型_经营

原标题:实体零售的单店模型和连锁模型 经营线下实体店和电商的最大不同,需要先算清楚“单店模型”,在这个基础上才能将人、财、物及管理模型匹配后测详情>>

阅读: 6
日期: 2020-01-01
宝可梦3D模型制作方Creatures被GameFreak除名

近期的Switch销量之王《宝可梦:剑/盾》证实了真香定律,一开始再怎么抵制,该买还是会买。但是这次的3D模型偷懒直接使用上一作3D模型这件事,似乎引起了开详情>>

阅读: 15
日期: 2019-12-10
万代PG机动战士高达SEED完美强袭高达模型开订!

【导读】强袭高达是在动漫《机动战士高达seed》 中登场的虚拟角色。作为一种作战兵器,本机是地球联合在中立国奥布所有的资源卫星赫利奥波利斯上极为机密开发的五架MS中的一详情>>

阅读: 13
日期: 2019-11-30
CSGO新人物模型遇冷:ECSS8将采用默认角色模型_地图

原标题:CSGO新人物模型遇冷:ECS S8将采用默认角色模型 导读:CSGO新人物模型遇冷。 尽管普通CSer对于CSGO新推出的人物模型爱不释手,不过已经有不少业详情>>

阅读: 12
日期: 2019-11-22
模玩资讯:万代BESTHITCHRONICLE游戏主机2/5比例组装模型_合作

原标题:模玩资讯:万代BEST HIT CHRONICLE 游戏主机 2/5比例组装模型 先前在2019年全日本模型 HOBBY SHOW,万代 BANDAI 旗下的 BANDAI SPIRITS 摊位就详情>>

阅读: 5
日期: 2019-11-14
模玩资讯:万代新模型发售信息_GaoGaiGar

原标题:模玩资讯:万代新模型发售信息 SDCS系列 勇者王GaoGaiGar 本月发售,卖1980日元 1/12 星球大战9 天行者崛起 暴风兵 本月发售,卖2970详情>>

阅读: 2
日期: 2019-11-14
游戏《宝可梦剑盾》炎上!网友质疑并未重新制作模型_进行

原标题:游戏《宝可梦 剑盾》炎上!网友质疑并未重新制作模型 根据VGC报道,预计于15日发售的《宝可梦》系列的最新作《宝可梦 剑盾》,在美国因模型疑似详情>>

阅读: 5
日期: 2019-11-14
网曝《宝可梦:剑/盾》众多模型未升级网友怒喷GF欺诈

  据外媒VG247报道,近日4Chan网友对《宝可梦:剑/盾》的数据挖掘结果又引发了新一轮推特网友的反GameFreak声浪。一起来了解一下。   VG247报道称,带有“#GameFreak欺诈详情>>

阅读: 20
日期: 2019-11-14
模玩秀:民用模型作品TAMIYA1/24GT-RR34_田宫

原标题:模玩秀:民用模型作品 TAMIYA 1/24 GT-R R34 作者: 囧面超人 文章转自小T 应该算田宫的老板子了~但是素质还是依然的高~ 一些进度~ 详情>>

阅读: 7
日期: 2019-11-02
PS与SS主机迷你模型公开介绍影像与细节 今天开始接受预约

由BANDAI推出的PS与SS主机2/5尺寸模型于今天开始接受预约,商品预定于2020年3月发售,价格各2750日元。该模型再现了当年PS和SS主机的内部结构,并可由用户自行组装。对于老玩家来详情>>

阅读: 12
日期: 2019-11-01
帝国时代2决定版单位模型都一样吗兵种高清模型对比一览

  帝国时代2决定版单位模型都一样吗?相信不少玩家对于这款游戏十分期待,今天我们带来了帝国时代2决定版兵种高清模型对比一览,感兴趣的玩家一起来看看吧。推荐阅读帝国时代2详情>>

阅读: 114
日期: 2019-10-28
《帝国时代2决定版》单位模型都一样吗 兵种高清模型对比一览

《帝国时代2决定版》单位模型都一样吗兵种高清模型对比一览 2019-10-2811:38:09 即时战略RTS 人气值:加载中...      帝国时代2决定版单位模型都一样吗?相信不详情>>

阅读: 156
日期: 2019-10-28
7Papers|2019安卓手机AI性能评测;谷歌T5预训练模型刷榜GLUE;自动驾驶论文综述

原标题:7 Papers | 2019安卓手机AI性能评测;谷歌T5预训练模型刷榜GLUE;自动驾驶论文综述 机器之心整理 参与:杜伟 在本周的论文中,读者可以了解到 20详情>>

阅读: 19
日期: 2019-10-27
千值练《风之谷》竹谷隆之究极王虫可动模型_官方

原标题:千值练《风之谷》竹谷隆之 究极王虫 可动模型 千值练推出宫崎骏经典动画片《风之谷》中的巨大生物“究极王虫”可动模型,由竹谷隆之进行可动详情>>

阅读: 19
日期: 2019-10-21
千值练《风之谷》竹谷隆之究极王虫可动模型

原标题:千值练《风之谷》竹谷隆之 究极王虫 可动模型 千值练推出宫崎骏经典动画片《风之谷》中的巨大生物“究极王虫”可动模型,由竹谷隆之进行可动详情>>

阅读: 6
日期: 2019-10-21
万代《机动战士高达SEED》1/60完美强袭高达模型赏!

【导读】《机动战士高达SEED》“PG 1/60 完美强袭高达”预计将于2020年2月发售,除了能组出完美强袭高达外,也能单独换装成各个型态。一起来看看吧! 详情>>

阅读: 7
日期: 2019-10-15
powerdesigner将概念模型和物理模型之间转换

今天小编教大家使用powerdesigner来将已经创建好的概念模型和物理模型之间进行转换。攻略对象电脑一台powerdesigner软件概念模型转物理模型1首先使用powerdesigner打开一个详情>>

阅读: 17
日期: 2019-06-28
《我的世界》3D模型资源包视频教程

《我的世界》是一款众多玩家非常喜欢的沙盒游戏,下面小编为大家介绍的是玩家“明月庄主”分享的3D模型资源包视频教程,一起来看看吧。 详情>>

阅读: 34
日期: 2019-06-10
迷你世界怎么修改生物模型 自定义生物模型玩法

大家好,我是风游,今天来教大家迷你世界怎么自定义生物模型,使用这个功能,用微缩模型替换原有的模型,让生物的样子更加丰富多样,一起来看看吧。功能介绍在版本0.35.0版本更新之前,我详情>>

阅读: 30
日期: 2019-06-08
求TERA模型查看器、、、有木有啊~有的传一个。谢谢...

Game234问答中心有网友提出了一个比较有代表性的问题【求TERA模型查看器、、、有木有啊~有的传一个。谢谢...】,【求TERA模型查看器、、、有木有啊~有的传一个。谢谢...】具体问题如下:~~详情>>

阅读: 11
日期: 2019-04-14
求魔兽世界WLK3.35版本模型修改器。注意:不是模型...

Game234问答中心有网友提出了一个比较有代表性的问题【求魔兽世界WLK3.35版本模型修改器。注意:不是模型...】,小编觉得可能对其他网友也有帮助,所以将此问答整理出来了,希望对您有帮助。小编为详情>>

阅读: 15
日期: 2019-04-13
DOTA2人物模型出问题了

Game234问答中心有网友提出了一个比较有代表性的问题【DOTA2人物模型出问题了】,【DOTA2人物模型出问题了】具体问题如下:这是人机,匹配还不清楚展开小编觉得可详情>>

阅读: 2
日期: 2019-04-13
自走棋公布角色模型第6弹 实机画面曝光

  《自走棋》手游官方公布了新的角色模型第六弹,各位棋王们还能认出他们分别是哪一位吗?可以看到,新发布的角色模型依然保持了可爱的画风,角色设计也比较符合各自的特点。近日也有玩家泄详情>>

阅读: 7
日期: 2019-04-10
《自走棋》手游公布角色模型,实机画面曝光

 下载>>>>小7手游APP,搜索想玩的游戏,充值折扣低至4折!今日折扣游戏:点击下载>>>>少年西游记<<<详情>>

阅读: 7
日期: 2019-04-10
LOL最丑皮肤模型 巨魔上榜 图4原画和模型差的太多

LOL有些皮肤现在真的不能看,有点太丑了!当然这些丑的皮肤有些是因为英雄太丑,再怎么设计都不好看。有些就是纯粹的模型师水平问题了。比如说巨魔他模型丑就是因为英雄太丑,谁来设计都不会设计的太好看。当然能详情>>

阅读: 8
日期: 2019-04-08
《星际争霸2》模型制作工具游戏辅助下载

中文名称:星际争霸2发布日期:2010-03-22更新日期:--文件大小:--游戏语言:英文英文名称:StarCraftII游戏制作:暴雪游戏发行:暴雪上市时间:2010-0详情>>

阅读: 9
日期: 2019-03-28
迷你世界微缩模型是什么 模型工作台怎么用

迷你世界模型工作台怎么用?模型工作台使用方法介绍。模型工作台是迷你世界新增加的一个道具,可以把一定范围内的建筑缩小到一个方块大小,真的可以称之为模型了~下面就来一起了解下模型工作台的用法吧~我们今天就详情>>

阅读: 9
日期: 2019-03-17
《鬼泣5》各角色模型与背景资料

  《鬼泣5》中除了三位可操控的战斗角色之外,还有不少其他我们所熟知的人物,比如蕾蒂、翠西等。请看下面的《鬼泣5》各角色模型与背景资料,一起来看看吧。尼禄详情>>

阅读: 24
日期: 2019-03-12
MENG模型将推出三款《流浪地球》各种载具拼装周边模型 10月上市

  最近MENG模型公布了三款《流浪地球》拼装模型,三款模型分别是,1/100运输车(450元)以及1/3000的“领航员”国际详情>>

阅读: 11
日期: 2019-03-04
模型般精致 蒸汽城堡机箱拆解/装机实测

“九州风神蒸汽城堡”机箱产品,外观看起来就犹如一个靓丽的工艺品,产品的外壳同样能够拆下,并且可拆的细节... 详情>>

阅读: 4
日期: 2019-02-05
王者荣耀猪八戒模型修改后欢乐视频

  王者荣耀猪八戒是这个游戏中即将上线的一个英雄,这个英雄在最近又进行了一次模型的修改,改变的非常有趣,很多小伙伴都想看看改成什么样子了,小编就为大家送上了王者荣耀猪八戒模型修改后详情>>

阅读: 4
日期: 2019-01-22
《迷你世界》模型工具台怎么制作

在迷你世界手游中模型工具台应该怎么制作呢?接下来就让小编来为大家讲解下迷你世界模型工具台制作方法一览介绍吧,感兴趣的小伙伴们速来围观吧~~迷你世界模型工具台制作方法:小编推荐:迷你世界先遣服0.3详情>>

阅读: 8
日期: 2019-01-05
《王者荣耀》孙尚香杀手不太冷模型曝光 杀手不太冷新模型欣赏

2>王者荣耀孙尚香杀手不太冷模型曝光,杀手不太冷模型优化一览。王者荣耀中有几款皮肤是许多玩家一致关注着的,大秦宣太后、海洋之心、杀手不太冷,而最近杀手不太冷的模型终于曝光了,一起来看看吧!详情>>

阅读: 9
日期: 2019-01-04
《刀塔传奇》为例分析手游升级节奏模型

在卡牌类手游,甚至很多类卡牌手游中,存在着战队等级的概念。通过战队等级,能够较好的控制游戏的节奏。对于游戏来说,升级节奏直接影响着整个经济线和成长线的设计。分析一些成熟大作的游戏节奏,能够为...详情>>

阅读: 11
日期: 2019-01-02
精彩推荐