Я использую библиотеку mclust для R (http://www.stat.washington.edu/mclust), чтобы провести экспериментальную кластеризацию GMM на основе EM.Пакет отличный, и, похоже, он обычно находит очень хорошие кластеры для моих данных.
Проблема в том, что я совсем не знаю R, и хотя мне удалось запутаться в процессе кластеризации на основеСодержимое help () и обширный файл readme, я не могу понять, как записать фактические результаты кластера в файл.Я использую следующий нелепо простой сценарий для выполнения кластеризации:
myData <- read.csv("data.csv", sep=",", header=FALSE)
attach(myData)
myBIC <- mclustBIC(myData)
mySummary <- summary( myBIC, data=myData )
, и в этот момент у меня есть результаты кластеризации и сводка.Данные в data.csv - это просто список многомерных точек, по одной на строку.Таким образом, каждая строка выглядит как 'x, y, z' (в случае 3 измерений).
Если я использую 2d точки (например, только значения x и y), я могу затем использовать внутреннюю функцию сюжета дляполучить очень симпатичный график, который отображает исходные точки и цветовые коды каждой точки на основе кластера, которому она была назначена.Поэтому я знаю, что вся информация находится где-то в «myBIC», но документы и справка, похоже, не дают никакого представления о том, как распечатать эти данные!
Я хочу распечатать новый файл на основерезультаты, которые я считаю, закодированы в myBIC.Что-то вроде
CLUST x, y, z
1 1.2, 3.4, 5.2
1 1.2, 3.3, 5.2
2 5.5, 1.3, 1.3
3 7.1, 1.2, -1.0
3 7.2, 1.2, -1.1
, а затем - мы надеемся - также распечатать параметры / центроиды отдельных гауссианов / кластеров, которые обнаружил процесс кластеризации.
Конечно, это нелепо легкоделай, а я просто не осведомлен о R, чтобы понять это ...
РЕДАКТИРОВАТЬ: Кажется, я продвинулся немного дальше.При выполнении следующего распечатывается несколько загадочная матрица,
> mySummary$classification
[1] 1 1 2 1 3
[6] 1 1 1 3 1
[12] 1 2 1 3 1
[18] 1 3
, которая, после размышления, которую я понял, на самом деле представляет собой список образцов и их классификаций.Я думаю, что невозможно написать это напрямую с помощью команды записи, но немного больше экспериментов в консоли R привело меня к пониманию, что я могу сделать это:
> newData <- mySummary$classification
> write( newData, file="class.csv" )
и что результат на самом деле выглядит довольноприятно!
$ head class.csv
"","x"
"1",1
"2",2
"3",2
, где первый столбец явно совпадает с индексом для входных данных, а второй столбец описывает присвоенный идентификатор класса.
Объект 'mySummary $ parameters' выглядит какхотя вложенный, и имеет множество подобъектов, соответствующих отдельным гауссианам и их параметрам и т. д. Функция «write» завершается ошибкой, когда я пытаюсь просто записать ее, но индивидуальное выписывание каждого имени подобъекта немного утомительно.Что приводит меня к новому вопросу: как перебрать вложенный объект в R и вывести элементы последовательно в файловый дескриптор?
У меня есть этот объект 'mySummary $ parameters'.Он состоит из нескольких подобъектов, таких как «mySummary $ parameters $ variance $ sigma» и т. Д. Я хотел бы просто перебрать все и распечатать все в файл так же, как это делается для CLI автоматически ...