【发布时间】:2017-11-16 18:41:03
【问题描述】:
我有一个由文本标记(单词、不同种类的识别号和一些其他类型)组成的数据集,我想使用一些无监督的分类算法对其进行分类。
鉴于我从文本中提取的某些类型的特征(字符数、数字数、alpha 数、一些正则表达式等)算法,例如 kmeans(仅作为示例,我不受 kmeans 的约束)工作正常,但我想添加更多细节,例如 Levenshtein-distance,我可以与 hclust 一起使用。
但是,我不太了解如何组合两种不同的数据类型(与两个观察值相关联的数据,例如距离度量,以及仅与一项观察,例如每个标记具有的字符数)。
我是否错过了一些简单的部分,是否有可能,或者我只是寻找错误的算法?
您可以在下面找到一个小型数据集的示例以及我目前采用的不同方法。
MWE 数据
# create some data
set.seed(123)
x <- sapply(1:20, function(i) {
paste(c(
sample(LETTERS, sample(1:10, 1), replace = T),
sample(1:9, sample(1:10, 1), replace = T),
sample(LETTERS[1:10], 2)
), collapse = "")
})
head(x)
#> [1] "UKW1595595761IC" "I9769675632JI" "UAMTFIG44DB" "GM814HB"
#> [5] "FDTXJR4CH" "VVULT7152464BC"
# apply the different algorithms
# 1. K-means
df <- data.frame(x)
df$nchars <- nchar(x)
df$n_nums <- nchar(gsub("[^[:digit:]]", "", x))
# etc.
kclust <- kmeans(df[, 2:3], centers = 2)
pairs(df, col=c(2:3)[kclust$cluster])
# 2. Levensthein distance and hclust
distance <- adist(x)
rownames(distance) <- x
hc <- hclust(as.dist(distance))
plot(hc)
# 3. Combination of adist(x) and the df-variables
# ???
【问题讨论】:
-
您的代码有一个小错误。
c(2:3)[kclust$cluster]产生 NA,因为簇的数量多于颜色的数量。 -
感谢您的评论,我更新了代码以在 kmeans 中包含“正确”的 2 个集群。
标签: r algorithm text machine-learning