Datumbox 机器学习框架 0.8.0 版发布 PlatoBlockchain 数据智能。垂直搜索。人工智能。

Datumbox机器学习框架0.8.0版已发布

Datumbox Framework v0.8.0现已发布,并包含一些强大的功能! 此版本带来了新的预处理,功能选择和模型选择算法,新的功能强大的存储引擎,可以更好地控制如何保存/加载模型和数据帧,几个经过预先训练的机器学习模型,以及大量的内存和速度改进。 立即从下载 Github上 or Maven中央存储库.

0.8.0版的主要目标之一是改善框架的存储机制,并使所有支持的算法都可以使用基于磁盘的培训。 新的存储引擎可以更好地控制模型的保存方式和时间。 一个重要的变化是,在fit()方法完成后不会自动存储模型,而是需要显式调用提供模型名称的save()方法。 这使我们不仅可以不经过序列化阶段就丢弃更简单的临时算法,还可以保存/加载数据帧:

Configuration configuration = Configuration.getConfiguration();
Dataframe data = ...; //load a dataframe here

MaximumEntropy.TrainingParameters params = new MaximumEntropy.TrainingParameters();
MaximumEntropy model = MLBuilder.create(params, getConfiguration());
model.fit(data);
model.save("MyModel"); //save the model using the specific name
model.close();

data.save("MyData"); //save the data using a specific name
data.close();

data = Dataframe.Builder.load("MyData", configuration); //load the data
model = MLBuilder.load(MaximumEntropy.class, "MyModel", configuration); //load the model
model.predict(data);
model.delete(); //delete the model

当前,我们支持两个存储引擎:InMemory引擎(它可以将所有内容加载到内存中)非常快,而MapDB引擎则较慢,但可以进行基于磁盘的训练。 您可以通过更改datumbox.configuration.properties来控制使用哪个引擎,也可以以编程方式修改配置对象。 每个引擎都有自己的配置文件,但是您仍然可以编程方式修改所有内容:

Configuration configuration = Configuration.getConfiguration(); //conf from properties file

configuration.setStorageConfiguration(new InMemoryConfiguration()); //use In-Memory engine
//configuration.setStorageConfiguration(new MapDBConfiguration()); //use MapDB engine

请注意,两个引擎都有一个目录设置,用于控制模型的存储位置(在MemoryConfiguration.目录中mapDBConfiguration.目录 配置文件中的属性)。 确保更改它们,否则模型将被写入系统的临时文件夹中。 有关如何构造配置文件的更多信息,请参见 代码示例 项目。

有了新的存储机制,现在可以公开共享 预训练模型 涵盖了情感分析,垃圾邮件检测,语言检测,主题分类以及通过Datumbox API可用的所有其他模型的区域。 您现在可以 下载 并在您的项目中使用所有经过预训练的模型,而无需调用API,并且不受日常调用次数的限制。 当前,已发布的模型使用InMemory存储引擎进行了培训,并且仅支持英语。 在将来的版本中,我计划为更多语言提供支持。

在新框架中,许多类的公共方法都有一些更改(因此它不向后兼容)。 最显着的区别在于模型的初始化方式。 正如我们在前面的代码示例中看到的那样,不是直接实例化模型,而是使用MLBuilder类来创建或加载模型。 训练参数直接提供给构建器,不能使用设置器进行更改。

另一个改进是我们执行模型选择的方式。 v0.8.0引入了新的模型选择包,其中提供了用于验证和衡量模型性能的所有必要工具。 在指标子包中,我们提供了用于分类,聚类,回归和推荐的最重要的验证指标。 请注意,ValidationMetrics已从每个单独的算法中删除,并且不再与模型一起存储。 该框架提供了新的splitters子软件包,该子软件包允许使用不同的方案拆分原始数据集。 当前,使用KFoldSplitter类执行K倍拆分,同时将数据集划分为训练集,并可以使用ShuffleSplitter实现测试集。 最后,为了快速验证模型,框架提供了Validator类。 这是可以在几行代码中执行K折交叉验证的方法:

ClassificationMetrics vm = new Validator<>(ClassificationMetrics.class, configuration)
    .validate(new KFoldSplitter(k).split(data), new MaximumEntropy.TrainingParameters());

新的预处理程序包替代了旧的数据转换器,并在机器学习算法之前更好地控制了我们如何缩放和编码数据。 支持以下算法来缩放数字变量:MinMaxScaler,StandardScaler,MaxAbsScaler和BinaryScaler。 要将分类变量编码为布尔值,可以使用以下方法:OneHotEncoder和CornerConstraintsEncoder。 这是使用新算法的方法:

StandardScaler numericalScaler = MLBuilder.create(
    new StandardScaler.TrainingParameters(), 
    configuration
);
numericalScaler.fit_transform(trainingData);

CornerConstraintsEncoder categoricalEncoder = MLBuilder.create(
    new CornerConstraintsEncoder.TrainingParameters(), 
    configuration
);
categoricalEncoder.fit_transform(trainingData);

另一个重要的更新是功能选择包被重写的事实。 当前,所有特征选择算法都专注于特定的数据类型,从而可以将不同的方法链接在一起。 结果,TextClassifier和Modeler类接收到一系列功能选择器参数,而不仅仅是一个。

如前所述,所有算法现在都支持基于磁盘的训练,包括使用矩阵的训练(唯一的例外是支持向量机)。 新的存储引擎机制甚至可以配置一些算法或数据帧以存储在内存中,而其他算法或数据帧则存储在磁盘上。 主要由于新的存储引擎机制,还由于对诸如DPMM系列中的单个算法进行了调整,引入了一些速度改进。

最后但并非最不重要的一点是,新版本将所有依赖项更新为最新版本,并删除其中的一些依赖项,例如commons-lang和lp_solve。 用于HTML解析的commons-lang替换为更快的自定义HTMLParser实现。 lp_solve替换为纯Java单形求解器,这意味着Datumbox不再需要在操作系统上安装特定的系统库。 而且lp_solve必须走,因为它使用的LGPLv2与Apache 2.0许可证不兼容。

0.8.0版为框架带来了更多新功能和改进。 有关更改的详细视图,请检查 更新日志.

不要忘了克隆 数据框框架 v0.8.0 从Github,查看 代码示例 并从中下载经过预训练的机器学习模型 Datumbox动物园。 我期待着您的意见和建议。

时间戳记:

更多来自 基准框