1) если говорить о трёх вышеперечисленных способах то нет, это грубо говоря 3 алгоритма для решения одной и той же задачи.
Потеря алгоритма определяется скорее выбором k. Разве что в методе Ланцоша из-за его итеративной философии мы потеряем в качестве если остановимся слишком рано.
2) грубо говоря, да. философия у них крайне похожая. только вот в теоретическом методе у нас есть замечательное рекуррентное соотношение, которое нам позволяет не трогать все подряд, а работать с последними двумя векторами. И это ключевое отличие. А вот в переортогонализации (то что описано в конце статьи) уже используется именно модификация Грама Шмидта.
3) выбор k обычно такой:
Если используем PCA для визуализации берём k=2 или 3
А в общем случае обычно подбирают через кросс валидацию
Есть ещё вариант попробовать подобрать k так, чтобы получить как можно больше объясненной дисперсии (explained_variance_ratio_ в sklearn)
4) ни то, ни другое :) мы просто решаем более узкую задачу (находим первые несколько компонент). Только уже возникает другая проблема - сходимость может быть медленной на плохом спектре.
5) И svd и Ланцош используются на практике. Полный свд берут когда датасет маленький, тогда нам плевать на кубическую сложность, как-то потерпим. Ланцоша берут для больших разреженных матриц (такое тоже часто в мл встречается). А на больших плотных данных, наверное, чаще всего используют randomized svd. С одной стороны это как обычный свд, с другой – он берет только первые несколько k+p компонент , примерно как Ланцош. Здесь p это "запас" (условно p=10)
Спасибо за отличное и очень точное замечание! Честно говоря, это даже звучит крайне логично, но я в никогда об этом не подумал. Век живи — век учись, как говорится)
Правильность и значимость статьи сомнению он не подвергает.
Зато ещё как дополняет! Если перевести вашу мысль на язык ML, то признак "Район" действительно должен обладать наибольшим Information Gain. Модель сначала (по идее) сделает сплит по локации, а уже внутри конкретного района площадь, пожалуй, станет главным движком цены.
Рад, что пример вызвал интерес, спасибо за ценное дополнение к статье
И вам большое спасибо за интересную беседу, я даже подзабытую математику вспомнил :) Если появятся похожие темы для обсуждения — пишите в личку, буду крайне рад.
В ваших рассуждениях смешиваются разные структуры: аффинная, топологическая и метрическая, из-за чего термин "близость" используется без явного определения.
В аффинном пространстве выражение x(t)=a(1−t)+bt задаёт лишь аффинную комбинацию точек. Из этой структуры не следует понятие близости или предела — она не содержит ни топологии, ни метрики.
Переход от утверждения "t близко к 0" к “x(t) близко к a" использует структуру на параметрическом пространстве R и индуцированную (через координатное отождествление) топологию на образе R^n. Это уже топологическое, а не аффинное утверждение.
Поэтому утверждение, что 0.99a+0.01b "ближе" к a, чем 0.9a+0.1b, корректно только после фиксации топологии или метрики. В чисто аффинной постановке такая шкала не задана.
Что касается метрики: она задаётся на всех парах точек пространства d(x,y), а не на базисных элементах, поэтому её нельзя интерпретировать как "расстояния между базисом". Базис относится к линейной структуре, а метрика может быть задана и в других классах пространств (без линейных структур).
Переформулировка МНК же через грамиан и метрические тензоры корректна, однако это уже переход к более общей геометрической формализации. В контексте вводного изложения это не исправляет исходную модель, а лишь поднимает уровень абстракции, поскольку стандартное скалярное произведение R^n уже фиксирует необходимую геометрию.
Ну и в конце-концов предлагаю закрыть эту дискуссию, а то такими темпами она станет длиннее статьи :)
лучший вариант обучения — рассказывать кому‑то другому.
Подписываюсь под каждым словом. Это, наверное, лучший способ, где "это работает так" меняется на "а почему именно так?" Насчет степика идея интересная, возможно когда-нибудь в будущем..
Вуз, годы опыта на проде и, конечно, постоянные ошибки и самообучение
Но, честно вам скажу, я не все знаю :) Иногда прямо в процессе написания статьи всплывает такое, о чем я раньше даже не задумывался. Поэтому считайте, что в этом цикле статей я обучаюсь вместе с вами.
Честно говоря, стараюсь изо всех сил излагать мысли так, чтобы было понятно максимально широкому кругу читателей. Но местами формулы становятся чуть сложнее… Если где-то возникают непонятные моменты — пишите в комментарии или в личные сообщения, всегда рад обсудить.
Что касается кода — он появляется по мере движения по теме. Просто не хочется делать вставки вида “пара строк из sklearn” и на этом останавливаться (иначе всё превратится в переписывание документации sklearn). Скорее всего после бустингов будет небольшой разбор моего собственного, пусть и немного нестандартного метода, а вместе с ним — код классических ML-моделей с подбором гиперпараметров и сравнением на интересной задаче. Но даже если планы немного изменятся, всё равно сделаю большую обзорную статью с мини-повторением прошлых частей и большим количеством кода.
"Близость координат" предполагает метрику, иначе что такое близость? А в R^n стандартная метрика индуцируется скалярным произведением. Ортогональность базиса — следствие этой структуры, а не семантики признаков (стандартный базис автоматически ортонормирован). Я, честно, понимаю о чем вы, но по факту как только мы используем dot product, мы уже (минимум) в евклидовом пространстве. И это не плохо на мой взгляд, а даже наоборот.
В контексте классической линейной мы естественным образом рассматриваем векторы из R^{k+1}, в котором стандартное скалярное произведение порождает евклидову метрику
Статья интересная, да и работа немаленькая Однако, раз под капотом у полигармонического каскада работает расстояние (которое сохраняется при умножении на матрицу поворота), то было бы честно сделать другое преобразование с данными (например, аффинное сжатие/нелинейное преобразование). А то получается, что вы читерите: задача — рубить дерево, инструменты — чайник vs полка vs бензопила... К слову, было забавно, что для svr взяли rbf ядро. Страшный вы человек, однако))) В любом случае, спасибо за статью, было интересно
В целом, половина успеха в ЛЮБОЙ задаче мл – это дата. Если она плохая, даже магия вне Хогвартса не поможет.
Однако, SVM много чем уступает всяким бустингам и подобным товарищам, но мы его любим за две причины: он хорош, когда фич много, а данных мало, в также у него выпуклая задача оптимизации.
Что касаемо Scaler - как правило, он нужен практически везде, где у нас хоть мельком упоминается какая-то идея о расстоянии. Так что, полностью согласен с вами
Исправил, спасибо!
1) если говорить о трёх вышеперечисленных способах то нет, это грубо говоря 3 алгоритма для решения одной и той же задачи.
Потеря алгоритма определяется скорее выбором k. Разве что в методе Ланцоша из-за его итеративной философии мы потеряем в качестве если остановимся слишком рано.
2) грубо говоря, да. философия у них крайне похожая. только вот в теоретическом методе у нас есть замечательное рекуррентное соотношение, которое нам позволяет не трогать все подряд, а работать с последними двумя векторами. И это ключевое отличие. А вот в переортогонализации (то что описано в конце статьи) уже используется именно модификация Грама Шмидта.
3) выбор k обычно такой:
Если используем PCA для визуализации берём k=2 или 3
А в общем случае обычно подбирают через кросс валидацию
Есть ещё вариант попробовать подобрать k так, чтобы получить как можно больше объясненной дисперсии (explained_variance_ratio_ в sklearn)
4) ни то, ни другое :) мы просто решаем более узкую задачу (находим первые несколько компонент). Только уже возникает другая проблема - сходимость может быть медленной на плохом спектре.
5) И svd и Ланцош используются на практике. Полный свд берут когда датасет маленький, тогда нам плевать на кубическую сложность, как-то потерпим. Ланцоша берут для больших разреженных матриц (такое тоже часто в мл встречается). А на больших плотных данных, наверное, чаще всего используют randomized svd. С одной стороны это как обычный свд, с другой – он берет только первые несколько k+p компонент , примерно как Ланцош. Здесь p это "запас" (условно p=10)
Активно пишу по мере свободного минимизированного времени :)
Смотрите, у y_i это просто класс: либо +1, либо -1 (кот/собака), или (покупаем/не покупаем).
Также для <w,x> имеем пограничные линии, грубо говоря либо до -1 либо после +1
Если мы их умножили и получили число ≥1 значит,
Во-первых, y_i и <w,x_i> имеют одинаковый знак (значит класс угадан верно)
Во-вторых, <w, x_i> либо ≥1 либо ≤1 , т.е. находится снаружи наших "рамок"
Насчёт кошек – зависит от реализации, но в классическом понимании да: "кошка" != "Кошка".
А визуализировать, естественно, можно (см. картинку в статье). Есть разные способы. Вот, пожалуй, самый стандартный:
Где
clfсамо дерево:Спасибо за отличное и очень точное замечание! Честно говоря, это даже звучит крайне логично, но я в никогда об этом не подумал. Век живи — век учись, как говорится)
Зато ещё как дополняет! Если перевести вашу мысль на язык ML, то признак "Район" действительно должен обладать наибольшим Information Gain. Модель сначала (по идее) сделает сплит по локации, а уже внутри конкретного района площадь, пожалуй, станет главным движком цены.
Рад, что пример вызвал интерес, спасибо за ценное дополнение к статье
И вам большое спасибо за интересную беседу, я даже подзабытую математику вспомнил :)
Если появятся похожие темы для обсуждения — пишите в личку, буду крайне рад.
Если вам что-то непонятно, напишите в комментариях/в личку, буду рад ответить
В ваших рассуждениях смешиваются разные структуры: аффинная, топологическая и метрическая, из-за чего термин "близость" используется без явного определения.
В аффинном пространстве выражение x(t)=a(1−t)+bt задаёт лишь аффинную комбинацию точек. Из этой структуры не следует понятие близости или предела — она не содержит ни топологии, ни метрики.
Переход от утверждения "t близко к 0" к “x(t) близко к a" использует структуру на параметрическом пространстве R и индуцированную (через координатное отождествление) топологию на образе R^n. Это уже топологическое, а не аффинное утверждение.
Поэтому утверждение, что 0.99a+0.01b "ближе" к a, чем 0.9a+0.1b, корректно только после фиксации топологии или метрики. В чисто аффинной постановке такая шкала не задана.
Что касается метрики: она задаётся на всех парах точек пространства d(x,y), а не на базисных элементах, поэтому её нельзя интерпретировать как "расстояния между базисом". Базис относится к линейной структуре, а метрика может быть задана и в других классах пространств (без линейных структур).
Переформулировка МНК же через грамиан и метрические тензоры корректна, однако это уже переход к более общей геометрической формализации. В контексте вводного изложения это не исправляет исходную модель, а лишь поднимает уровень абстракции, поскольку стандартное скалярное произведение R^n уже фиксирует необходимую геометрию.
Ну и в конце-концов предлагаю закрыть эту дискуссию, а то такими темпами она станет длиннее статьи :)
Здесь вы уже используете понятие расстояния, раз сравниваете точки по близости.
Подписываюсь под каждым словом. Это, наверное, лучший способ, где "это работает так" меняется на "а почему именно так?"
Насчет степика идея интересная, возможно когда-нибудь в будущем..
Вуз, годы опыта на проде и, конечно, постоянные ошибки и самообучение
Но, честно вам скажу, я не все знаю :) Иногда прямо в процессе написания статьи всплывает такое, о чем я раньше даже не задумывался. Поэтому считайте, что в этом цикле статей я обучаюсь вместе с вами.
Честно говоря, стараюсь изо всех сил излагать мысли так, чтобы было понятно максимально широкому кругу читателей. Но местами формулы становятся чуть сложнее… Если где-то возникают непонятные моменты — пишите в комментарии или в личные сообщения, всегда рад обсудить.
Что касается кода — он появляется по мере движения по теме. Просто не хочется делать вставки вида “пара строк из sklearn” и на этом останавливаться (иначе всё превратится в переписывание документации sklearn). Скорее всего после бустингов будет небольшой разбор моего собственного, пусть и немного нестандартного метода, а вместе с ним — код классических ML-моделей с подбором гиперпараметров и сравнением на интересной задаче.
Но даже если планы немного изменятся, всё равно сделаю большую обзорную статью с мини-повторением прошлых частей и большим количеством кода.
Да, вы абсолютно правы. Действительно может возникнуть путаница. Точнее будет указать "расстояния", а не "веса". Исправил, спасибо.
"Близость координат" предполагает метрику, иначе что такое близость? А в R^n стандартная метрика индуцируется скалярным произведением. Ортогональность базиса — следствие этой структуры, а не семантики признаков (стандартный базис автоматически ортонормирован). Я, честно, понимаю о чем вы, но по факту как только мы используем dot product, мы уже (минимум) в евклидовом пространстве. И это не плохо на мой взгляд, а даже наоборот.
В контексте классической линейной мы естественным образом рассматриваем векторы из R^{k+1}, в котором стандартное скалярное произведение порождает евклидову метрику
Статья интересная, да и работа немаленькая
Однако, раз под капотом у полигармонического каскада работает расстояние (которое сохраняется при умножении на матрицу поворота), то было бы честно сделать другое преобразование с данными (например, аффинное сжатие/нелинейное преобразование). А то получается, что вы читерите: задача — рубить дерево, инструменты — чайник vs полка vs бензопила...
К слову, было забавно, что для svr взяли rbf ядро. Страшный вы человек, однако)))
В любом случае, спасибо за статью, было интересно
Вы абсолютно правы. Исправил
Achievement unlocked: совершать 2 опечатки в одной маленькой формуле
А кто ж не дергается на них...
В целом, половина успеха в ЛЮБОЙ задаче мл – это дата. Если она плохая, даже магия вне Хогвартса не поможет.
Однако, SVM много чем уступает всяким бустингам и подобным товарищам, но мы его любим за две причины: он хорош, когда фич много, а данных мало, в также у него выпуклая задача оптимизации.
Что касаемо Scaler - как правило, он нужен практически везде, где у нас хоть мельком упоминается какая-то идея о расстоянии. Так что, полностью согласен с вами
Спасибо, что заметили. Там очевидно -1, исправил :)