Это может быть странный запрос, поэтому сначала объясните некоторое объяснение. Недавно я внезапно столкнулся с hd и потерял файл данных, который я использовал для создания файлов модели с помощью libSVM. У меня есть модель SVM и файл масштабирования, который я создал из этого файла данных, и мне было интересно, есть ли способ генерировать файл данных из векторов поддержки в файле модели, что-то вроде model_sv_to_instances(model, &instances)
, поскольку процесс для получения экземпляров очень дорогостоящий. (Я знаю, что это будет не так, как оригинал, но все же это лучше, чем ничего). Я использую вероятностный SVM с ядром RBF.LIBSVM: Получить векторы поддержки из файла модели
ответ
Если открыть данный файл модели в любом текстовом редакторе, вы найдете что-то вроде этого:
svm_type c_svc
kernel_type sigmoid
gamma 0.5
coef0 0
nr_class 2
total_sv 4
rho 0
label 0 1
nr_sv 2 2
SV
1 1:0 2:0
1 1:1 2:1
-1 1:1 2:0
-1 1:0 2:1
Где самое интересное для вас после того, как линии с SV.
1 1:0 2:0
1 1:1 2:1
-1 1:1 2:0
-1 1:0 2:1
Это точки данных, которые были выбраны в качестве векторов поддержки, поэтому вам просто нужно проанализировать файл. Формат выглядит следующим образом: [label] [index1]: [value1] [index2]: [value2] ... [indexn] [оценка]
Например, из моего примера вы можете сделать вывод, что мой учебный набор был:
x y desired val
0 0 -1
0 1 1
1 0 1
1 1 -1
Несколько соображений и предупреждений. Соотношение между количеством SV и точками данных зависит от используемых вами параметров. В некоторых случаях это соотношение большое, и у вас будет очень мало SV по сравнению с вашими данными.
Еще одна вещь, о которой следует помнить, состоит в том, что это сокращение, скорее всего, изменит проблему, и если вы снова тренируетесь только с помощью SV в качестве точек данных, вы, вероятно, получите совершенно другую модель с полным набором параметров.
Удачи вам!
Насколько мне известно, модели SVM в целом и модели libSVM, в частности, состоят только из векторов поддержки. Эти векторы представляют границу между классами; скорее всего, они не представляют подавляющее большинство ваших данных. Поэтому, к сожалению, я не думаю, что есть способ восстановить данные из модели.
Сказав это, я могу представить себе эзотерический случай, где может быть какая-то ценность модели: в таких случаях существуют компании, специализирующиеся на восстановлении данных (например, от разбитых HD-дисков). Однако восстановленные данные иногда имеют пробелы; в некоторых случаях модель может быть обратно спроектирована для заполнения некоторых недостающих пятен. Однако это очень теоретично.
EDIT: как утверждают другие ответы, доля точек данных, представленных векторами поддержки, может варьироваться в зависимости от конкретной проблемы и параметров. Однако, как указано выше, в большинстве распространенных случаев вы сможете восстановить только небольшую часть вашего исходного набора данных.
«Эти векторы представляют границу между классами, а не напрямую ссылаются на какую-либо конкретную точку данных». Вы правы, за исключением того, что векторы поддержки непосредственно связаны с набором тренировок, поскольку они являются точками данных, которые определяют гиперплоскость, которая разделяет классы. – Pedrom
Вы правы, конечно. Отредактировано ... – etov
«К счастью» модель довольно большая, поэтому даже с этим предостережением я смогу восстановить справедливую долю данных. – vseguip
В случае с RBF
вам повезло. Согласно libsvm FAQ вы можете извлечь векторы поддержки из файла модели:
В файле модель, после параметров и другой информации, таких как этикетки, каждая строка представляет собой вектор поддержки.
Но помните, что это только векторы поддержки, которые составляют лишь небольшую часть ваших исходных входных данных.
Большое спасибо за ваш ответ. Я думаю, что SV масштабируется, поэтому мне придется «обмануть» его, чтобы снова получить реальную точку? – vseguip
@vseguip Если вы его предварительно замаскировали ... да, вам нужно будет их раскрыть. Однако библиотека не масштабирует их автоматически, поэтому это будет зависеть от того, как вы построили модель. – Pedrom
Также вы должны обратить внимание на это небольшое оговорку: http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f430 (строка 'label' в файле модели действительно, действительно важный). С другой стороны, вы всегда должны иметь резервную копию для таких мелочей. Dropbox отлично работает, например. –