Arhn - архитектура программирования

Очень длинные числа после добавления символьных переменных?

Итак, я хочу определить значения alpha, beta и gamma моего классификатора SVM, я обучил свой классификатор SVM и определил альфа-векторы и векторы поддержки. Мои опорные векторы имеют 3 переменные в каждой строке, ниже всего десять строк из моего опорного вектора:

0.0904235536887480  -0.269325475875919  -0.678528701392414
-0.321039098061280  -0.507618180664821  -1.42365662798284
-0.0737761304021185 -0.269641311369441  -0.647521877863172
0.00105779420640393 -0.311226557946309  -0.667506146498475
0.0913098589312967  -0.289462325547514  -0.391261050348894
0.00622693949845773 -0.166248587146820  -0.149546793127464
-0.292302915842567  -0.564676268888150  -1.60153093563523
0.112997393643248   -0.310512134534035  -0.725281274142312
-0.135361511770186  -0.456321702624641  -1.26973221898260
-0.173160731078767  -0.434439033384469  -1.22687774941370

и точно так же ниже всего десять строк из моей альфы:

-1
-1
-1
-1
-1
-1
-1
-1
-1
-1

Итак, что я в основном делаю, так это определяю такие коэффициенты:

c = (-1)*[0.0904*x1 + (-0.2693)*x2 + (-0.6785)*x3] + (-1)*[(-0.321)*x1 + (-0.5076)*x2 + (-1.4236)*x3].....

и так до размеров моего alpha.

Итак, я закодировал следующее в Matlab

syms x1, syms x2, syms x3;

alpha = SVMStruct.Alpha;
svm_vec = SVMStruct.SupportVectors;

for i = 1:size(alpha,1)
    c(i) = alpha(i)*(svm_vec(i,1)*x1 + svm_vec(i,2)*x2 + svm_vec(i,3)*x3);
end

sum_it = sum(c);

Но это привело к очень странному выводу:

(107845064549358722206080751595348329973204613074833920445585562521882937008164658045489239834546021458299139*x1)/50534761550197893278639420198779799540396107395587434771118149413836407509953624874438129483687080755200 + (95720990302914087945142311872326568914380675701489099929103269189530321664249312169660240242394455632803627*x2)/134178504805697854567421908803656709124500009291732154392279224305703564767807900528680550698065697177600 + (90626366614084720573448362168042659133754200934323766866906741825007634289583081638045482944881264585156183*x3)/125521827076297992982426946945356276277758073208394596044390242092432367040852552107475353878835652198400

это ожидаемый результат? Почему я получаю дроби?

Глядя на результат, правильно ли я реализовал свое уравнение?


Ответы:


1

Ваши входные данные для ваших вычислений являются символьными переменными, поэтому любые вычисления с использованием этих переменных будут давать точное значение, которое также является символьной переменной. Если вам нужно приблизительное представление результата с плавающей запятой, вам нужно преобразовать сумму как double

double(sum_it)

Однако для этого вам необходимо указать фактические значения для x1, x2 и x3.

double(subs(sum(c), [x1, x2, x3], [1, 2, 3]))

При этом я думаю, что вы на самом деле хотите решить систему уравнений. Для этого можно использовать оператор \.

variables = svm_vec \ alpha;
14.02.2017
  • Спасибо за ответ, я не могу использовать double, так как я не знаю значения x1, x2 и x3, и меня интересуют только коэффициенты этих переменных. Я не знаю, чего \ достиг, я читал об этом и не совсем понял его цель здесь. Сказав это, моя реализация верна? Если так, я могу просто вручную разделить это число на x1, чтобы получить этот коэффициент, верно? 14.02.2017
  • @StuckInPhD: используйте vpa. Не уверен, зачем вам нужна математика с символьной или переменной точностью для этого приложения. 14.02.2017
  • @StuckInPhD Разве вы не пытаетесь найти x1, x2 и x3? 14.02.2017
  • @horchler vpa - это то, что я искал. Спасибо. Меня интересует только поиск коэффициентов этих переменных. 15.02.2017
  • @Suever Нет, меня интересует только выяснение коэффициентов этих переменных, в основном значений альфа, бета и гаммы, которые являются коэффициентами масштабирования этих опорных векторов. 15.02.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..