在分类/聚类任务中将文本值更改为 int
Posted
技术标签:
【中文标题】在分类/聚类任务中将文本值更改为 int【英文标题】:Change text values to int in classification/clustering task 【发布时间】:2020-05-06 21:44:22 【问题描述】:有一个任务是在 R 中使用包含分类文本值(如“蓝色”、“红色”)的数据集进行聚类。 k-means 算法虽然只接受数值,所以我需要将这些文本类别转换为 int 类别。是否有任何 1 线解决方案?或者其他?
Attribute1 Attribute2 Attribute1 Attribute2
Instance1 "blue" "red" => Instance1 1 2
Instance2 "green" "blue" Instance2 3 1
a[,1] <- sapply(a[,1],switch,"blue"=1,"red"=2,"green"=3)
完成任务,但对于“a”数据框的第一列
x_num <- as.numeric(x)
与众不同,但看起来很像。
【问题讨论】:
你不能那样做,如果你把 "blue", "red" 转换成 1,2 你是在暗示某种我猜不是这样的顺序? 你应该做one-hot编码,或者尝试高尔距离进行聚类,例如r-bloggers.com/clustering-mixed-data-types-in-r 是的,非常感谢。这就是我一直在寻找的 很高兴它有帮助:) 【参考方案1】:因此,当我们进行聚类分析时,我们希望使我们的聚类彼此尽可能远离。我想到的方法 太直接了,而且效果不好(如果实施)。好的解决方案是应用一些可以处理混合数据类型的距离度量。 cmets中提到的是gower,是通用的。二进制类别也存在 Jaccard 距离。 高尔解决方案(R)的例子:
library(cluster)
gower.dissimilarity.mtrx <- daisy(DataFrame, metric = c("gower"))
这里的函数是'daisy'
,虽然也有'dist'
,这使得一些东西相同,但使用欧几里得方法。
more on topic
【讨论】:
以上是关于在分类/聚类任务中将文本值更改为 int的主要内容,如果未能解决你的问题,请参考以下文章