我有一個數據集包含我想使用某種無監督分類算法進行分類的文本標記(字,不同種類的標識號和其他類型)。具有Levenshtein距離和附加特徵/變量的聚類算法
鑑於我從文本中提取的某些功能(字符數,數字位數,alpha數量,一些正則表達式等)算法(如kmeans
)(僅作爲示例,我不綁定到kmeans)工作很好,但我想添加一些更多的細節,如Levenshtein距離,我可以使用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,因爲聚類數量多於顏色數量。 – AkselA
感謝您的評論,我更新了代碼以在kmeans中擁有「正確的」2個羣集。 – David