【问题标题】:Classification by minimum distance按最小距离分类
【发布时间】:2018-07-23 00:16:59
【问题描述】:

我想按已知中心之间的最小距离对我的数据进行分类。 如何使用 R 实现?

中心数据

> centers
   X
1   -0.78998176
2    2.40331380
3    0.77320007
4   -1.64054294
5   -0.05343331
6   -1.14982180
7    1.67658736
8   -0.44575567
9    0.36314671
10   1.18697840

要分类的数据

> Y
[1] -0.7071068  0.7071068 -0.3011463 -0.9128686 -0.5713978   NA

我预期的结果:

1. find the closest distance (minimum absolute difference value) between each 
   items in Y and centers.
2. Assigns sequence number of classes to each items in Y

预期结果:

> Y
    [1] 1 3 8 1 8  NA


Y <- c(-0.707106781186548, 0.707106781186548, -0.301146296962689, 
-0.912868615826101, -0.571397763410073, NA)

centers <- structure(c(-0.789981758587318, 2.40331380121291, 0.773200070034431, 
-1.64054294268215, -0.0534333085941505, -1.14982180092619, 1.67658736336158, 
-0.445755672120908, 0.363146708827924, 1.18697840480949), .Dim = c(10L, 
1L), .Dimnames = list(c("1", "2", "3", "4", "5", "6", "7", "8", 
"9", "10"), "X"))

【问题讨论】:

  • centers 的顺序从减到增有关系吗?
  • 是的,中心的数量必须与值对应,谢谢

标签: r dataframe dplyr data.table classification


【解决方案1】:
sapply(Y, function(y) {r=which.min(abs(y-centers)); ifelse(is.na(y), NA, r)})

本质上,您将which.min 应用于Y 的每个元素,并确定哪个中心的绝对距离最小。平局转到列表中较早的元素。 NA 值需要单独处理,这就是为什么我在那里有第二条带有ifelse 的语句。

【讨论】:

  • 您可以稍微简化一下,并用sapply(Y, function(y) ifelse(is.na(y), NA, which.min(abs(y - centers)))) 丢失unlist
  • 是的,在我添加到 ifelse 函数之前,这是一个人工制品。如果有 NA 输入,which.min 返回 integer(0)
【解决方案2】:

这不是聚类。

但最近邻分类

参见knn 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 2016-01-10
    相关资源
    最近更新 更多