寻找线性可分但未标记数据点的分类 (?) 算法
数据挖掘
分类
支持向量机
无监督学习
2021-09-24 04:53:09
3个回答
我得到了一个部分解决方案,该解决方案可能适用于这种特殊情况,但它不容易概括:由于您的所有数据都收敛到同一点:(1400, 500),您可以在那里设置坐标中心,然后在角度空间中进行聚类。即使用转换和集群(小心!你可能会除以 0)
我已经在 R 中准备了这个合成示例并且它有效!但同样:这不容易概括
library(data.table)
library(ggplot2)
x <- c(1,2,3,4,5)
y1 <- x + 1
y2 <- -x + 11
y3 <- -3*x + 21
# creates a data.table with 3 lines converging at point (5,6)
dt <- data.table( x = rep(x, 3)
, y = c(y1,y2,y3)
)
data.table看起来像这样:
现在是时候改造它并制作集群了
dt_transform <- dt[, .(x, y, a = atan((y - 6) / (x - 6)) )] # avoid x - 5 == 0
km <- kmeans(dt_transform$a, 3)
dt_cluster <- cbind(dt_transform, cluster = as.factor(km$cluster))
集群data.table看起来像这样:
如果你走这条路,请与我分享结果。我很想知道它是否适用于真实数据
您是否尝试过使用 K-means 算法?我认为它可以产生良好的效果!
这里还有其他选项:https ://towardsdatascience.com/unsupervised-learning-and-data-clustering-eeecb78b422a
编辑:我的第一个想法是使用 PCA,我只是注意到它可以用于未标记的数据
红线
在我看来,红线纯粹是主观的,这意味着它的缺失同样是合理的,因此,我们不应该期望它会普遍存在。例如,它正在通过靠近交点的密集聚集集(橙色圆圈),并且还在直线上分离一些等距的点(紫色圆圈)。

一个通用的解决方案
但是,可以使用以下步骤找到绿线(以及清楚区分两组的类似线):
- 应用非凸聚类算法,例如 DBSCAN(调整其参数至关重要),
- 将检测到的簇标记为类,
- 使用具有线性决策边界的多类分类器(例如多类逻辑回归或多类线性 SVM)来找到类之间的分隔线。
重新审视红线
正如OP 评论的那样,如果假设是“正好两行”,我同意红线是一个非常好的候选者。我们可以通过调整 DBSCAN 的参数来强加这个假设,即领域知识,直到我们得到 3 个填充良好的集群。
其它你可能感兴趣的问题




