...чтоб оставшиеся строки были максимально ортогональны. Очевидный тупой алгоритм - найти пару самых похожих друг на друга строк и одну их них выбросить...
Совершенно верно! Строки с малым угловым расстоянием между друг другом (как и сильно разнящиеся по норме строки) "портят" число обусловленности матрицы. Однако, тут важно не минимальное угловое расстояние между строкой-кандидатом на удаление и каждой из всех остальных по отдельности, а угловое расстояние между строкой-кандидатом и
всеми остальными строками как единая совокупность. Линейная оболочка этой совокупности образует некое линейное подпространство, в котором можно найти строку-вектор, минимально удалённый по угловой мере от строки-кандидата. Получаемое угловое расстояние будет мерой близости строки-кандидата к совокупности остальных строк. Логично отбрасывать те, что имеют минимальную такую меру.
Это угловое расстояние вполне может оказаться равным нулю, даже тогда когда попарные углы все отличны от нуля и заметно велики. Это произойдёт, когда строка-кандидат лежит в линейной оболочке остальных строк, то есть линейно выражается через них. Если выявить, какие строки входят в линейную комбинацию, то выбрасывание любой из них не будет менять ранг матрицы, но от того, какая выбрасывается, будет зависеть число обусловленности результирующей матрицы. Теперь логично выбрасывать ту строку, у которой (в данном случае)
попарные угловые расстояния с остальными минимальны.
SergeyGubanov, спасибо за идею! Тут правда, остаётся вопрос: если имеется несколько линейных зависимостей, то есть, нужно выбросить несколько строк, будет ли жадный алгоритм давать наилучший результат (или близкий к нему), или же надо делать полный перебор для его достижения?
Вообще, сказанное выше наталкивает меня на такую мысль. Можно рассматривать строки матрицы
A как набор неких признаков, при этом каждая строка — это объект со своими признаками. А в целом строки-объекты образуют популяцию, занимающую некую область в пространстве признаков. Хотелось бы сокращать эту популяцию так, чтобы её описательная сила для этой области в пространстве признаков оставалась максимальной.
При таком взгляде на проблему величины в сингулярном разложении обретают смысл:

Матрица
V — это
ортонормированный базис в пространстве признаков. Каждый её столбец задаёт некий производный совокупный признак, характеризующий эту популяцию. И все они друг другу ортогональны. Но совокупные признаки
не эквивалентны, некоторые из них в популяции представлены сильнее, другие — слабее, третьи не представлены вообще, потому что количество объектов обычно значительно меньше количества признаков (в таком случае выгодно использовать экономное SVD).
Матрица Σ сингулярных значений задаёт
вес совокупного признака в популяции. Признаки, не представленные в популяции, получают нулевой вес по умолчанию. Если умножить матрицу популяции
A на матрицу о/н базиса
V, то в каждой строке результирующей матрицы
X будут стоять коэффициенты разложения исходных признаков объекта по базису совокупных признаков:

А в каждом выбранном столбце — веса вхождения выбранного совокупного признака в описание каждого из объектов совокупности. Если найти норму этих столбцов, то получатся как раз сингулярные числа:
![$$=\left[\sqrt{\operatorname{diag}\lBig(\Sigma^TU^TU\Sigma\rBig)}\right]_{(m)}=\left[\sqrt{\operatorname{diag}\lBig(\Sigma^T\Sigma\rBig)}\right]_{(m)}=\operatorname{diag}\lbig(\Sigma\rbig)$$ $$=\left[\sqrt{\operatorname{diag}\lBig(\Sigma^TU^TU\Sigma\rBig)}\right]_{(m)}=\left[\sqrt{\operatorname{diag}\lBig(\Sigma^T\Sigma\rBig)}\right]_{(m)}=\operatorname{diag}\lbig(\Sigma\rbig)$$](https://dxdy-03.korotkov.co.uk/f/a/c/5/ac5cea6bd9b2826580c62a7e07ef935d82.png)
Здесь квадратными скобками с индексом (
m)
![$$\lBig[\;\;\cdot\;\;\rBig]_{(m)}$$ $$\lBig[\;\;\cdot\;\;\rBig]_{(m)}$$](https://dxdy-03.korotkov.co.uk/f/6/f/e/6fe0312430bf05e85a59b42029e7617d82.png)
обозначено обрезание последних элементов строки, оставляющее только первые
m. Численный пример для наглядности:
>> a = randn (4, 10)
a =
0.8369 -0.0205 -1.7506 1.3101 -2.4490 -0.6547 -0.3304 -0.9573 -0.4977 -0.7562
-0.7223 0.2789 0.6973 0.3271 0.4733 -1.0807 -0.4999 1.2925 -1.1187 -0.0891
-0.7215 1.0583 0.8115 -0.6730 0.1169 -0.0477 -0.0360 0.4409 0.8076 -2.0089
-0.2012 0.6217 0.6363 -0.1493 -0.5911 0.3793 -0.1748 1.2809 0.0412 1.0839
>> [u s v] = svd (a)
u =
-0.8904 -0.2546 0.3533 0.1326
0.2711 -0.0156 0.8448 -0.4610
0.3011 -0.9275 0.0072 0.2215
0.2077 0.2733 0.4017 0.8490
s =
3.9784 0 0 0 0 0 0 0 0 0
0 2.6574 0 0 0 0 0 0 0 0
0 0 2.3630 0 0 0 0 0 0 0
0 0 0 1.7004 0 0 0 0 0 0
v =
-0.3016 0.1552 -0.1695 0.0666 0.7903 -0.0790 0.0098 0.3248 -0.1852 0.2847
0.1361 -0.3051 0.2055 0.3710 0.4257 0.2645 0.2286 -0.5827 0.2496 0.0569
0.5339 -0.0541 0.0982 0.0979 -0.1325 -0.0685 -0.0525 0.0094 -0.3801 0.7233
-0.3296 0.0921 0.2854 -0.1488 -0.1907 0.5288 0.0996 0.2447 0.4161 0.4694
0.5583 0.1303 -0.2971 -0.5991 0.2832 0.2390 -0.0075 0.0067 0.2891 -0.0552
0.0891 0.1248 -0.4199 0.4251 -0.1024 0.6837 -0.1310 0.1247 -0.2824 -0.1705
0.0280 0.0292 -0.2579 0.0178 -0.1391 -0.0701 0.9422 0.1153 -0.0779 0.0079
0.4025 0.0620 0.5381 0.2719 0.1380 -0.0048 0.0898 0.5730 0.1075 -0.3220
0.0984 -0.2234 -0.4649 0.3903 -0.0992 -0.2922 -0.1476 0.2381 0.6050 0.1792
0.0677 0.8856 0.0333 0.2447 -0.0374 -0.1567 0.0085 -0.2849 0.1968 0.0647
>> x = a * v
x =
-3.5423 -0.6766 0.8349 0.2254 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000
1.0784 -0.0415 1.9963 -0.7840 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000
1.1977 -2.4647 0.0169 0.3767 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000
0.8262 0.7262 0.9493 1.4437 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000
>> sqrt (diag (x' * x))'
ans =
3.9784 2.6574 2.3630 1.7004 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
>> diag (s)'
ans =
3.9784 2.6574 2.3630 1.7004
>>
Матрица
U — это ортонормированный базис, но уже в пространстве объектов. Каждая выбранная строка этой матрицы задаёт разложение признаков выбранного объекта по
масштабированным (сингулярными значениями) совокупным признакам. В каждом выбранном столбце матрицы
U стоят веса вхождения (масштабированных) совокупных признаков в описание каждого из объектов. Поскольку матрица
U — ортогональная, и, соответственно,
нормы её столбцов и строк равны 1, то близкий по модулю к 1 вес совокупного признака в выбранной строке означает, что веса остальных совокупных признаков в описании выбранного объекта будут малы. То есть, что выбранный объект описывается в основном только этим совокупным признаком. Если же вес совокупного признака близок к 1 при рассмотрении выбранного столбца матрицы
U, то это будет означать, что этот совокупный признак будет слабо входить в описание других объектов совокупности. То есть, что выбранный совокупный признак добавляется в совокупность в основном только одним этим объектом.
Из этих наблюдений следует такое
эвристическое правило. Если мы хотим избавиться от лишнего объекта с минимальными потерями для описательной способности всей их совокупности, то лучше удалить тот объект, который в большей мере описывается "слабейшим" совокупным признаком (то есть, соответствующим минимальному сингулярному значению), или, что тоже самое, вносит в совокупность только "слабейший" совокупный признак. Другими словами, берём последний столбец матрицы
U (как раз соответствующий этому минимальному сингулярному значению), находим в нём максимальный по модулю элемент и удаляем из матрицы
A строку, соответствующую этому элементу. Возможно, при выборе удаляемой строки необходимо учесть (с какими-то убывающими весами) и другие столбцы матрицы
U. Например, в таком духе: посчитать матрицу
Y со шляпкой и в выборе руководствоваться максимальностью нормы её строк:
![$$\widehat{Y}=U\left(\lBig[\Sigma\rBig]_{(m)}\right)^{-1}$$ $$\widehat{Y}=U\left(\lBig[\Sigma\rBig]_{(m)}\right)^{-1}$$](https://dxdy-01.korotkov.co.uk/f/4/b/b/4bb35e0edfbcf54f6cf1b95cf4549f3e82.png)
К этому же эвристическому правилу я пришёл ранее в теме из соображений
линейной зависимости строк. Правда, при этом некоторые сингулярные значения матрицы
A оказываются нулевыми, и при выборе удаляемой строки необходимо руководствоваться
исключительно столбцами матрицы U, соответствующими этим нулевым собственным значениям. По этой причине в формуле для
Y со шляпкой выше я Σ взял в обратной степени. Возможно, я не прав, и при выборе удаляемой строки или строк нужно пользоваться только последним или последними столбцами матрицы
U в количестве, равном числу удаляемых строк. В общем, как правильно действовать — это вопрос.
Свет на ситуацию пролила бы теорема, которая бы давала ограничения в виде неравенств на то, какими станут (как сильно изменятся) сингулярные значения у матрицы
A, если в ней занулить/вычеркнуть одну или несколько строк. Поэтому вопрос: кто-нибудь знает какую-нибудь теорему в этом духе?