如何在新数据集上评分

Posted

技术标签:

【中文标题】如何在新数据集上评分【英文标题】:How to Score on a new Data Set 【发布时间】:2015-07-13 10:06:49 【问题描述】:

我们已经在 R 中构建了用于聚类的模型。我们现在希望为我们想要集群的新客户部署模型方程。在 SAS 中,集群节点用于提供集群 SAS 代码,我们只需插入新的输入变量。 有没有办法在 R 中做到这一点?我们如何导出聚类方程?

下面是一个使用标准鸢尾花数据集的例子。

irisnew <- iris
library("cluster", lib.loc="~/R/win-library/3.2")
(kc <- kmeans(irisnew, 3)) 

K-means clustering with 3 clusters of sizes 62, 38, 50

Cluster means:
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1     5.901613    2.748387     4.393548    1.433871
2     6.850000    3.073684     5.742105    2.071053
3     5.006000    3.428000     1.462000    0.246000

Clustering vector:
  [1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
 [39] 3 3 3 3 3 3 3 3 3 3 3 3 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [77] 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 2 2 2 1 2 2 2 2 2 2 1
[115] 1 2 2 2 2 1 2 1 2 1 2 2 1 1 2 2 2 2 2 1 2 2 2 2 1 2 2 2 1 2 2 2 1 2 2 1

Within cluster sum of squares by cluster:
[1] 39.82097 23.87947 15.15100
 (between_SS / total_SS =  88.4 %)

现在定义了集群,我有一个新的花瓣数据集,我需要根据上述聚类规则对其进行分类。我的问题是我如何导出规则来做到这一点?通常,规则定义为

x = a1 * Sepal.Length + a2 * Sepal.Width +a3 * Petal.Length + a4 * Petal.Width + b
Then if x between z1 and z2 then Cluster1
else if x between z3 and z4 then Cluster2
else if x between z5 and z6 then Cluster3
else Cluster4

谢谢, 马尼什

【问题讨论】:

你在 R 中使用了哪些函数来聚类数据? reproducible example 会很好。 您的更新示例不起作用。您定义了irisnew,然后在newiris 上运行kmeans。我假设您打算过滤掉分类变量。另外,为了重现性,指定lib.loc= 也无济于事,因为这可能因操作系统和 R 版本而异。假设您可以使示例正常工作,我确实投票重新开放(但重新开放确实需要更多的投票)。 更正了irisnewnewiris 的错字。我从基础数据中制作了几个数据集。我的问题很简单——我说过 X 组花是根据一些算法聚集在一起的。我想对一朵新花应用相同的聚类规则。(在现实生活中,他们是现有客户和新客户)。我可以使用上面描述的 SAS 中的聚类代码和系数来实现这一点,如果然后,我只是想在 R 中做到这一点。在 SAS 中,“评分”意味着我们在新的原始数据上应用构建模型。我想在 R 中获取并执行 Score 代码 该示例真的适合您吗?我收到一个错误:“do_one(nmeth) 中的错误:外部函数调用中的 NA/NaN/Inf (arg 1)”。如果你在做kmeans聚类,你只需要提取聚类中心(kc$centers),然后比较每个新点到每个中心的距离,选择最近的聚类中心。 评分部分.. x = a1 * Sepal.Length...... 在 SAS 中工作。无论是聚类、回归、逻辑回归等。这就是我们让现有模型在新数据集上运行并获取集群名称/回归概率等的方式。 【参考方案1】:

用于通用模型 - predict.glm(glm.model, newdata = newdf))

用于集群使用 - Simple approach to assigning clusters for new data after k-means clustering

【讨论】:

以上是关于如何在新数据集上评分的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中的新数据集上使用已经创建的 kmeans kluster 模型

Keras:在新实验中重用训练过的权重

如何评估不同模型在一个数据集上的性能?

模型评估:模型状态评估

使用xgboost训练模型时,为什么把max_depth调越高f1_score评分越高?

如何在 spark 数据集上使用 group by