нахождение матрицы путем оптимизации
-
21-09-2019 - |
Вопрос
Ищу алгоритм решения следующей задачи:
У меня есть два набора векторов, и я хочу найти матрицу, которая лучше всего аппроксимирует преобразование входных векторов в выходные векторы.
векторы имеют размер 3x1, поэтому матрица равна 3x3.
Это общая проблема.Моя конкретная проблема заключается в том, что у меня есть набор цветов RGB и другой набор, содержащий нужный цвет.Я пытаюсь найти преобразование RGB в RGB, которое дало бы мне цвета, более близкие к желаемым.
Между входным и выходным векторами существует соответствие, поэтому вычисление функции ошибок, которую следует минимизировать, является простой задачей.Но как я могу минимизировать эту функцию?
Решение
Вы не указываете язык, но вот как я бы подошел к проблеме в Matlab.
- v1 — это матрица 3xn, содержащая входные цвета в вертикальных векторах.
- v2 также является матрицей 3xn, содержащей выходные цвета.
Вы хотите решить систему
M*v1 = v2
M = v2*inv(v1)
Однако v1 не является обратимой напрямую, поскольку это не квадратная матрица.Matlab решит эту проблему автоматически с помощью операции mrdivide (M = v2/v1), где M — наилучшее подходящее решение.
eg:
>> v1 = rand(3,10);
>> M = rand(3,3);
>> v2 = M * v1;
>> v2/v1 - M
ans =
1.0e-15 *
0.4510 0.4441 -0.5551
0.2220 0.1388 -0.3331
0.4441 0.2220 -0.4441
>> (v2 + randn(size(v2))*0.1)/v1 - M
ans =
0.0598 -0.1961 0.0931
-0.1684 0.0509 0.1465
-0.0931 -0.0009 0.0213
Этот дает более независимое от языка решение проблемы.
Другие советы
Это классическая задача линейной алгебры, ключевая фраза для поиска — «множественная линейная регрессия».
На протяжении многих лет мне приходилось кодировать некоторые варианты этого много раз.Например, код для калибровки планшета или стилуса с сенсорным экраном использует ту же самую математику.
Вот математика:
Позволять п быть входным вектором и д соответствующий выходной вектор.
Требуемое преобразование — это матрица 3х3;назови это А.
Для одного входного и выходного вектора п и д, существует вектор ошибки е
е = д - А Икс п
Квадрат величины ошибки является скалярной величиной:
еТ х е = (д - А Икс п)Т х (д - А Икс п)
(где оператор T транспонирован).
Что вы действительно хотите минимизировать, так это сумму е значения по наборам:
Э = сумма (е)
Этот минимум удовлетворяет матричному уравнению Д = 0 где
Д(i,j) = частная производная Э относительно А(я, дж)
Предположим, у вас есть N входных и выходных векторов.
Ваш набор входных 3-векторов представляет собой матрицу 3xN;назовите эту матрицу п.i-й столбец п — i-й входной вектор.
То же самое относится и к набору выходных 3-векторов;назовите эту матрицу вопрос.
Когда вы разберетесь со всей алгеброй, решение будет таким:
А = вопрос Икс пТ х (п Икс пТ) ^-1
(где ^-1 — обратный оператор — извините, что нет надстрочных или нижних индексов)
Вот алгоритм:
Создайте матрицу 3xN п из набора входных векторов.
Создайте матрицу 3xN вопрос из набора выходных векторов.
Матричное умножение р = п х транспонировать (п)
Вычислить обратное р
Матричное умножение А = вопрос х транспонировать(п) x обратный (р)
используя процедуры умножения матриц и обращения матриц из выбранной вами библиотеки линейной алгебры.
Однако, матрица аффинного преобразования 3x3 способна масштабировать и вращать входные векторы, но нет делаю любой перевод!Это может быть недостаточно общим для вашей проблемы.Обычно рекомендуется добавить «1» в конце каждого из 3-х векторов, чтобы получился 4-вектор, и искать лучшую матрицу преобразования 3x4, которая минимизирует ошибку.Это не повредит;это может привести только к лучшему согласованию данных.
Некоторой линейной алгебры должно быть достаточно:
Запишите среднеквадратическую разницу между входными и выходными значениями (сумму квадратов каждой разницы между каждым входным и выходным значением).Я предполагаю, что это определение «наилучшего приближения».
Это квадратичная функция ваших 9 неизвестных матричных коэффициентов.
Чтобы минимизировать его, выведите его относительно каждого из них.
Вы получите линейную систему из 9 уравнений, которые вам нужно решить, чтобы получить решение (уникальное или пространственное разнообразие в зависимости от входного набора).
Если разностная функция не является квадратичной, вы можете сделать то же самое, но вам придется использовать итерационный метод для решения системы уравнений.