机器学习模型保存为PMML格式

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: PMML模型文件可以实现跨平台迁移,python和java都可以生成PMML文件,python和java都可以读取PMML文件

一. 在PMML(Predictive Model Markup Language)中,K均值聚类模型(K-means Clustering Model)可以用于表示K均值聚类算法的相关参数和内容。以下是PMML中K均值聚类模型的一些常见参数和内容:

1. modelName:指定模型的名称。

2. modelType:指定模型的类型,对于K均值聚类模型,通常为"clustering"。

3. numberOfClusters:指定聚类的个数(K值)。

4. distanceMethod:指定计算距离的方法,常见的方法包括欧氏距离(Euclidean)、曼哈顿距离(Manhattan)、切比雪夫距离(Chebyshev)等。

5. clusterCentroids:指定每个簇的质心坐标,即各个聚类的中心点。

6. clusterPopulation:指定每个簇的成员数量,表示属于每个簇的数据点数量。

7. clusterId:为每个数据点标识其所属的簇。

8. withinClusterSS:表示每个簇内的平方和(Sum of Squares),即质点到簇内数据点的距离的平方和。

9. betweenClusterSS:表示簇之间的平方和,即簇质心之间的距离的平方和。

这些参数和内容会在PMML文件中以XML的形式进行表示。通过使用这些参数和内容,PMML可以完整地描述K均值聚类模型,以便在不同的平台和工具之间共享和部署。

请注意,PMML是一种通用的预测模型描述语言,除了K均值聚类模型,还可以用于描述其他机器学习模型和算法。因此,在PMML文件中,可以包含其他类型的模型和相关参数。因此,在具体情况下,可能还会有其他更具体的参数和内容描述K均值聚类模型。


二.Jmml,给出的内容涉及到K均值聚类算法的一些指标和结果,以下是对这些内容的解释:

1. K均值聚类(K-means Clustering):K均值聚类是一种常用的无监督学习算法,用于将数据集划分为K个互不重叠的簇。它通过迭代优化来找到簇的质心,使得质心与簇内数据点的距离最小化。

2. inertia_(惯性):inertia_是K均值聚类算法的属性之一,表示所有样本点与各自簇质心之间的总距离的绝对值和。它实际上是质心到簇内数据点距离的平方和,用于衡量聚类的紧密度。较小的inertia_值通常表示较好的聚类效果。

3. score:score 是K均值聚类算法的评分指标之一,表示质心到各点的实际距离的平方和。它通常用于衡量各点对于质心的紧密度,较小的score值表示较好的聚类效果。

4. pmml:pmml是Predictive Model Markup Language的简称,它是一种用于表示和交换预测模型的标准化XML格式。在这个上下文中,pmml指的是从K均值聚类算法得到的模型的结果的一部分。它包含聚类结果,其中距离与原模型的score值一致,即它们都是没有开平方根的值。

需要注意的是,质点到质心的距离没有开根号的原因可能是为了避免计算过程中的复杂性,因为在聚类算法中,目标通常是最小化距离的平方和,而具体的距离值并不是最重要的,所以在计算过程中不必进行开根运算。这样可以减少计算量并加快算法的执行速度。


三.用python生成pmml文件

要在Python中生成PMML文件,可以使用第三方库如`pyPMML`或`nyoka`。这些库提供了将机器学习模型转换为PMML格式的功能。以下是一种使用`nyoka`库生成PMML文件的示例:

首先,确保已经安装了`nyoka`库。可以使用以下命令进行安装:

pipinstallnyoka

接下来,使用以下代码生成PMML文件:

```pythonfromsklearnimportdatasetsfromsklearn.clusterimportKMeansfromnyokaimportKMeansPMML# 加载示例数据集iris=datasets.load_iris()
X=iris.data# 创建K均值聚类模型kmeans=KMeans(n_clusters=3)
kmeans.fit(X)
# 将K均值聚类模型转换为PMML并生成PMML文件pmml_exporter=KMeansPMML(kmeans, feature_names=iris.feature_names)
pmml_exporter.export(open("kmeans_model.pmml", "w"), 0)
```

在上述示例中,我们使用`sklearn`库中的`KMeans`进行K均值聚类,然后使用`nyoka`库中的`KMeansPMML`将K均值聚类模型转换为PMML格式。`feature_names`参数用于指定特征的名称。

这将在当前目录下生成名为"kmeans_model.pmml"的PMML文件,其中包含K均值聚类模型的相关信息和参数。

请注意,PMML支持多种模型和算法,具体生成PMML文件的步骤可能因使用的库和模型类型而有所不同。因此,可以根据具体的模型和需求选择合适的库和方法。


四.用Java生成pmml文件

要在Java中生成PMML文件,可以使用第三方库如`JPMML-Model`或`PMML4S`。以下是使用`JPMML-Model`库生成PMML文件的一个简单示例:

首先,确保已经将`jpmml-model`库添加到项目的依赖中。可以在Maven项目中的`pom.xml`文件中添加以下依赖项:

```xml
<dependency><groupId>org.jpmml</groupId><artifactId>jpmml-model</artifactId><version>1.6.5</version></dependency>```

接下来,使用以下代码生成PMML文件:

```javaimportorg.dmg.pmml.PMML;
importorg.jpmml.evaluator.ModelEvaluator;
importorg.jpmml.evaluator.ModelEvaluatorFactory;
importorg.jpmml.evaluator.clustering.ProbabilityDensityFunctionEvaluator;
importorg.jpmml.model.PMMLUtil;
importorg.jpmml.model.SerializationUtil;
importjavax.xml.bind.JAXBException;
importjava.io.IOException;
importjava.io.InputStream;
importjava.nio.file.Files;
importjava.nio.file.Paths;
publicclassPMMLGenerationExample {
publicstaticvoidmain(String[] args) {
try {
// 加载预定义的PMML模型InputStreampmmlStream=PMMLGenerationExample.class.getResourceAsStream("kmeans_model.pmml");
PMMLpmml=PMMLUtil.unmarshal(pmmlStream);
// 创建模型评估器ModelEvaluator<?>modelEvaluator=ModelEvaluatorFactory.newInstance().newModelEvaluator(pmml);
// 输出PMML模型byte[] pmmlBytes=SerializationUtil.serializePMML(pmml);
Files.write(Paths.get("kmeans_model_generated.pmml"), pmmlBytes);
        } catch (JAXBException|IOExceptione) {
e.printStackTrace();
        }
    }
}
```

在上述示例中,我们从预定义的PMML模型文件"kmeans_model.pmml"中加载PMML模型,然后利用`ModelEvaluatorFactory`创建模型评估器。最后,使用`SerializationUtil.serializePMML`方法将PMML模型序列化为字节数组,并将其写入到文件"kmeans_model_generated.pmml"中。

请注意,这只是一个简单的示例,实际上生成PMML文件可能涉及更复杂的模型和数据转换过程。根据具体情况,你可能需要调整代码以适应不同类型的模型和数据。


五.python读取pmml文件

要在Python中读取和解析PMML文件,可以使用第三方库如`nyoka`或`pypmml`。以下是使用`nyoka`库读取PMML文件的示例:

首先,确保已经安装了`nyoka`库。可以使用以下命令进行安装:

```
pipinstallnyoka```

接下来,使用以下代码读取PMML文件:

```pythonfromnyokaimportPMMLParser# 加载PMML文件pmml_parser=PMMLParser("kmeans_model.pmml")
# 获取聚类模型clustering_model=pmml_parser.models[0]  # 假设只有一个模型# 打印聚类模型的一些信息print("模型名称:", clustering_model.modelName)
print("模型类型:", clustering_model.modelType)
# 获取模型的其他属性和内容# 例如,获取聚类个数k=clustering_model.NumberOfClustersprint("聚类个数:", k)
# 获取每个簇的质心坐标cluster_centroids=clustering_model.ClusteredInstances[0].clusterCentroidsfori, centroidinenumerate(cluster_centroids):
print("簇 {} 的质心坐标:".format(i+1), centroid.coordinates)
# 获取每个数据点的簇标识cluster_labels=clustering_model.ClusteredInstances[0].instanceFields[0].clustersfori, labelinenumerate(cluster_labels):
print("数据点 {} 的簇标识:".format(i+1), label)
# 获取簇内的平方和within_cluster_ss=clustering_model.withinClusterSSprint("簇内平方和:", within_cluster_ss)
```

在上述示例中,我们使用`nyoka`库中的`PMMLParser`读取PMML文件,并通过访问不同的属性和内容来获取相关信息。可以根据具体的需求访问不同的属性和内容。

请注意,PMML文件可以包含多个模型,因此可以根据需要访问不同的模型和相关内容。在示例中,我们假设只有一个模型,并简单地获取了一些常见的模型属性和内容。

使用`pypmml`库也可以实现PMML文件的读取解析,使用方法类似,具体可以参考相关文档和示例。


六.java读取pmml文件

要在Java中读取和解析PMML文件,可以使用第三方库如`JPMML-Model`或`PMML4S`。以下是使用`JPMML-Model`库读取PMML文件的示例:

首先,确保已经将`jpmml-model`库添加到项目的依赖中。可以在Maven项目中的`pom.xml`文件中添加以下依赖项:

```xml
<dependency><groupId>org.jpmml</groupId><artifactId>jpmml-model</artifactId><version>1.6.5</version></dependency>```

接下来,使用以下代码读取PMML文件:

```javaimportorg.dmg.pmml.PMML;
importorg.jpmml.model.PMMLUtil;
importjavax.xml.bind.JAXBException;
importjava.io.InputStream;
publicclassPMMLReadingExample {
publicstaticvoidmain(String[] args) {
try {
// 加载PMML文件InputStreampmmlStream=PMMLReadingExample.class.getResourceAsStream("kmeans_model.pmml");
PMMLpmml=PMMLUtil.unmarshal(pmmlStream);
// 获取聚类模型ObjectclusteringModel=pmml.getModels().get(0);  // 假设只有一个模型// 打印聚类模型的一些信息System.out.println("模型名称: "+pmml.getHeader().getDescription());
System.out.println("模型类型: "+pmml.getHeader().getModels().get(0).getModelName());
// 获取模型的其他属性和内容// 例如,获取聚类个数intk= ((org.dmg.pmml.clustering.ClusteringModel) clusteringModel).getNumberOfClusters();
System.out.println("聚类个数: "+k);
// 获取每个簇的质心坐标List<org.dmg.pmml.clustering.Cluster>clusterList= ((org.dmg.pmml.clustering.ClusteringModel) clusteringModel).getClusters();
for (inti=0; i<clusterList.size(); i++) {
double[] centroidCoordinates=clusterList.get(i).getVectorFields().get(0).getArray().getDouble();
System.out.println("簇 "+ (i+1) +" 的质心坐标: "+Arrays.toString(centroidCoordinates));
            }
// 获取每个数据点的簇标识List<org.dmg.pmml.clustering.ClusteringField>clusteringFieds= ((org.dmg.pmml.clustering.ClusteringModel) clusteringModel).getClusteringFields();
List<Integer>clusterLabels=clusteringFieds.get(0).getArray().getValues();
for (inti=0; i<clusterLabels.size(); i++) {
System.out.println("数据点 "+ (i+1) +" 的簇标识: "+clusterLabels.get(i));
            }
// 获取簇内的平方和doublewithinClusterSS= ((org.dmg.pmml.clustering.ClusteringModel) clusteringModel).getClusterIntraSumOfSquares();
System.out.println("簇内平方和: "+withinClusterSS);
        } catch (JAXBExceptione) {
e.printStackTrace();
        }
    }
}
```

在上述示例中,我们使用`JPMML-Model`库中的`PMMLUtil.unmarshal`方法读取PMML文件,并通过访问不同的属性和内容来获取相关信息。可以根据具体的需求访问不同的属性和内容。

请注意,PMML文件可以包含多个模型,因此可以根据需要访问不同的模型和相关内容。在示例中,我们假设只有一个模型,并简单地获取了一些常见的模型属性和内容。

使用`PMML4S`库也可以实现PMML文件的读取解析,使用方法类似,具体可以参考相关文档和示例。


目录
相关文章
|
24天前
|
人工智能 JSON 算法
Qwen2.5-Coder 系列模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
阿里云的人工智能平台 PAI,作为一站式、 AI Native 的大模型与 AIGC 工程平台,为开发者和企业客户提供了 Qwen2.5-Coder 系列模型的全链路最佳实践。本文以Qwen2.5-Coder-32B为例,详细介绍在 PAI-QuickStart 完成 Qwen2.5-Coder 的训练、评测和快速部署。
Qwen2.5-Coder 系列模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
|
9天前
|
编解码 机器人 测试技术
技术实践 | 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型快速搭建专业领域知识问答机器人
Qwen2-VL是一款具备高级图像和视频理解能力的多模态模型,支持多种语言,适用于多模态应用开发。通过PAI和LLaMA Factory框架,用户可以轻松微调Qwen2-VL模型,快速构建文旅领域的知识问答机器人。本教程详细介绍了从模型部署、微调到对话测试的全过程,帮助开发者高效实现定制化多模态应用。
|
17天前
|
机器学习/深度学习 人工智能 算法
人工智能浪潮下的编程实践:构建你的第一个机器学习模型
在人工智能的巨浪中,每个人都有机会成为弄潮儿。本文将带你一探究竟,从零基础开始,用最易懂的语言和步骤,教你如何构建属于自己的第一个机器学习模型。不需要复杂的数学公式,也不必担心编程难题,只需跟随我们的步伐,一起探索这个充满魔力的AI世界。
36 12
|
24天前
|
机器学习/深度学习 Python
机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况
本文介绍了机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况,而ROC曲线则通过假正率和真正率评估二分类模型性能。文章还提供了Python中的具体实现示例,展示了如何计算和使用这两种工具来评估模型。
46 8
|
24天前
|
机器学习/深度学习 Python
机器学习中模型选择和优化的关键技术——交叉验证与网格搜索
本文深入探讨了机器学习中模型选择和优化的关键技术——交叉验证与网格搜索。介绍了K折交叉验证、留一交叉验证等方法,以及网格搜索的原理和步骤,展示了如何结合两者在Python中实现模型参数的优化,并强调了使用时需注意的计算成本、过拟合风险等问题。
46 6
|
27天前
|
机器学习/深度学习 数据采集 算法
从零到一:构建高效机器学习模型的旅程####
在探索技术深度与广度的征途中,我深刻体会到技术创新既在于理论的飞跃,更在于实践的积累。本文将通过一个具体案例,分享我在构建高效机器学习模型过程中的实战经验,包括数据预处理、特征工程、模型选择与优化等关键环节,旨在为读者提供一个从零开始构建并优化机器学习模型的实用指南。 ####
|
28天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的线性回归模型
本文深入探讨了机器学习中广泛使用的线性回归模型,从其基本概念和数学原理出发,逐步引导读者理解模型的构建、训练及评估过程。通过实例分析与代码演示,本文旨在为初学者提供一个清晰的学习路径,帮助他们在实践中更好地应用线性回归模型解决实际问题。
|
24天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
76 4
|
3天前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
19 2
|
21天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
39 1
下一篇
DataWorks