Я хочу использовать expand.grid
R для всестороннего перечисления и исследования вариантов иерархического кластерного анализа. У меня есть последняя функция acc
, которая возьмет матрицу и проанализирует ее на предмет показателей производительности, таких как точность, точность, F1 и т. Д. c., Возвращая именованный список (с точностью, F1, и т. Д. c.): Окончательный результат, который я ищу, представляет собой таблицу, в которой перечислены все комбинации гиперпараметров, а в столбцах рядом с ними указаны различные показатели производительности (точность, F1, ...).
Таблица комбинаций может быть настроить, например, с помощью
hyperparams = expand.grid(meths=c("ward.D","ward.D2","single","complete","average","mcquitty","median","centroid"), dists=c("euclidean", "maximum", "manhattan", "canberra", "binary","minkowski"))
Затем мы сравним с известными метками и получим точность, заключив в него ряд функций, которые я попытался опустить для краткости (например, cutree
):
t1 = table(df$Group, hclust(dist(df[-1],method="euclidean"), method="complete"))
Res1 = acc(t1)
Цель состоит в том, чтобы изменить аргумент method
для dist
среди тех, что перечислены в моем dists
, и аргумент method
для hclust
среди тех, которые перечислены в моем meths
. Напомним, что в последней строке я написал acc
, который будет принимать матрицу и выводить именованный список точности, точности, F1, ... каждый из которых я бы хотел в столбце итоговой таблицы, чьи Строки - это комбинации гиперпараметров в hyperparams
.
Итак, моя первая проблема заключается в том, что я не уверен, как использовать unlist
таким образом, чтобы охватить все параметры, указанные выше. Я почти уверен, что это правильная функция, но просто не знаю, как это сделать. И я также хочу создать таблицу без a for-l oop, то есть с помощью apply или чего-то в этом роде (я думаю, применяя по строкам hyperparams
? ...), так как я знаю такие решения обычно лучше в R.
Как было предложено, окончательный желаемый результат будет, по сути, hyperparams
, но в виде кадра данных с дополнительными столбцами, третий столбец содержит точность, четвертый - точность и т. д. c (меры, перечисленные в моей функции acc
). Может ли кто-нибудь сообщить мне, как туда добраться?
Если вы хотите что-то поиграть для acc
, мы могли бы использовать
first = sum(x)
second = sum(x^2)
return(list(First=first,Second=second))
, и окончательная таблица вывода будет двумя столбцами гиперпараметров за которым следует столбец для First
(сумма элементов в окончательной матрице путаницы для комбинации гиперпараметров, соответствующей этой строке) и Second
(сумма элементов ^ 2 в окончательной матрице путаницы). Просто гипотетический пример на случай, если вам нравится работать с заданными функциями.
Я бы предпочел решения на базе R! (Или dplyr, если это абсолютно необходимо)
Изменить: Хорошо, многие люди просят df
. Давайте использовать iris
, но, конечно, если нам нужен вывод, мы не можем избежать некоторых промежуточных функций, таких как cutree
.
Теперь с iris
вы можете запустить
contingtab1 = table(iris$Species, cutree(hclust(dist(iris[,1:4],method="euclidean"),method="complete"),3))
Это дает таблицу непредвиденных обстоятельств. Передача этого в acc
даст одну строку желаемого вывода (строка, соответствующая euclidean
и complete
. Тогда желаемый результат будет выглядеть как hyperparams
с каждым из двух текущих столбцов, за которым следуют (скажем) два больше столбцов, по одному для каждого из двух моих показателей производительности в acc
.