ml.net是微软机器学习的东西,如果你的需求是需要一个固定的模型来进行操作的话那就按着官网的教程来就可以,但是大部分的模型可能不满足现有的需求,那么我们需要对模型进行重新训练。
重新训练模型有限制条件,你重新训练模型的数据分类必须是原有模型已有的分类,如果想增加分类的话只能重新训练一个新的模型来进行操作。
模型重新训练的话在第一次模型生成时候需要保存另外一个模型文件,如图:
modle的生成是通过定义的ogdEstimator算法进行生成的,而ogdEstimator里的算法需要和上面你生成模型的管道的算法一致。算法所需要的参数labelColumnName和featureColumnName也需要一一对应。
第一次建模型阶段准备工作已完成,需要保存的两个zip尽量保存到项目中去。
后续训练已有的模型开始的话是这样的:
首先加载你所保存的两个模型文件,originalModelParameters所转换的参数类型需要跟你模型的算法参数类型匹配,不然会提示无法转换成功。
然后加载你导入的新数据,转为IDataview。
这部分是主要是重新训练模型的算法,LbfgsMaximumEntropy里面的参数要相对应,这个就不用说了,当然你的算法要是其他的也差不太多。
Fit所传入的两个变量,第一个是你的新数据,第二个是你的老数据,新的训练模型将以老数据为起点进行训练。
所生成的retrainedModel模型数据直接保存到modelZip就可以。
接下来在进行使用这个模型的时候需要进行一些改变。
如果你不需要重新训练模型的话,进行预测是这样的:
直接拿第一次生成的模型进行预测。然后返回给你预测的结果。
但是当我们重新训练过模型的时候需要对预测方法进行一些改变:
需要加载初始的模型和训练后的模型。
重新训练模型的正常流程大概就是这样的了。正常生成模型以及进行预测的方法官方的demo里就可以找到。
注:保存模型之后的Weights会获取不到,提示非公开成员。然后我这边需要进行这样一个操作:
先定义然后通过GetWeights获取Weights的数据。