Кластеризация на основе совместного использования
Я хотел бы кластеризовать данные на основе ключевого слова совместного использования, используя R. Я столкнулся с 2 трудностями по сравнению с другими постами.
- Слова имеют разные уровни иерархии
- Ключевые слова не обязательно отображаются в порядке или на уровне иерархии
пример
Keywords
Food;Fruit;Banana
Food;Fruit;Apple
Fruit;Food;Orange
Food;Bread;Toast
Food;Bread;Whole Grain
Bed;Bedroom;Furniture
Furniture;Bedroom;Bed
Furniture;Living Room;Chair
Furniture;Bedroom;Chair
Я хотел бы, чтобы результатом было то, что ключевые слова разветвляются на продукты и мебель на первом уровне. На втором и третьем есть дополнительные филиалы, например, Спальня, Гостиная. Если я использую иерархический кластерный анализ, как
hc <- hclust(dist(data))
plot(hc)
В итоге я бы назвал "Мебель" одной из категорий на низшем уровне, но в моем примере это "узловая точка".
Есть ли функция для решения этой проблемы?
Лучший Пит
2 ответа
Слишком долго для комментария, но, возможно, не то, что вы ищете:
df <- read.csv2(header=F, comment.char="#", text="
Food;Fruit;Banana
Food;Fruit;Apple
#Fruit;Food;Orange
Food;Bread;Toast
Food;Bread;Whole Grain
#Bed;Bedroom;Furniture
Furniture;Bedroom;Bed
#Furniture;Living Room;Chair
Furniture;Bedroom;Chair")
library(data.tree)
df$pathString <- with(df, paste("root", V1, V2, V3, sep="/"))
dt <- as.Node(df)
dt
# levelName
# 1 root
# 2 ¦--Food
# 3 ¦ ¦--Fruit
# 4 ¦ ¦ ¦--Banana
# 5 ¦ ¦ °--Apple
# 6 ¦ °--Bread
# 7 ¦ ¦--Toast
# 8 ¦ °--Whole Grain
# 9 °--Furniture
# 10 °--Bedroom
# 11 ¦--Bed
# 12 °--Chair
Посмотрите на data.tree
виньетка
То, что вы описываете, не похоже на кластерный анализ.
Сделайте следующее:
- Посчитайте частоту каждого термина.
- Сортировка каждой строки по частоте по убыванию.
- Вставьте каждый ряд в дерево.
Дерево будет разветвляться на наиболее часто встречающиеся термины, которые имеют более конкретные термины.
Никакого анализа здесь не происходит, за исключением подсчета + сортировки по частоте - так что ничего сложного или сложного, кроме простого.