Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Плотность булевых значений вдоль оси Х |
Автор: _Y_ 2.7.2007, 15:54 |
Имеется вектор булевых значений (скажем 0 и 1). Надо построить график иллустрирующий плотность распределения значений 1 вдоль вектора. Что-то ничего красивого у меня не получается. Подскажите, пожалуста - может есть какие-то достойные подходы. 1. Сначала, естественно, попробовал просто гистограму - вроде она для этого и предназначена. Но! Значения у меня располагаются блоками разной длины и, фактически, мне нужна плотность расположения блоков. В результате форма гистограмы сильно зависит от положения границ ее колонок. Например, вектор 01100011 на гистограмме с разбивкой по две позиции дает значения 1-1-0-2 что не есть хорошо, поскольку очевидны два совершенно одинаковых региона 11 2. Попробовал считать посредством скользящего окна. Т.е. выбираю ширину окна (в позициях вдоль вектора) и считаю сумму единиц в его пределах. Так делаю проходя окном вдоль всего вектора. Чуть лучше, но получаемый график очень сильно зависит от выбранной ширины окна. При этом форма меняется с изменением окна не плавно, а почти скачками. Плохо. |
Автор: JackYF 2.7.2007, 16:55 |
_Y_, попробуй выбрать значение ширины окна дробным и меньшим 1... не знаю, что из этого получится... там с масшабированием после этого поиграться. Или почти тоже самое, но возьми этот булевый вектор, каждый бит запиши подряд n раз (000111111000000000111111) и примени предыдущие методы. Это то, что пришло навскидку. |
Автор: _Y_ 2.7.2007, 17:30 |
JackYF, не идет. окно наоборот приходится увеличивать. При уменьшении ширины окна получается просто график ступенчато прыгающий между 0 и 1. Вот думаю, может как-то аппроксимировать график нормальным распределением, потом суммой двух нормальных распределений и т.д. Потом выбирать как-то - какое число нормальных распределений наиболее разумно. Но это только догадка. Хочу совета, т.к. проверять такие догадки буду до Нового Года ![]() |
Автор: esperant0 2.7.2007, 21:40 |
Мои два высших образование не позволяют мне понять что вы хотите. Если вам нужна помощь. не поленитесь напишите нормально условие. |
Автор: _Y_ 2.7.2007, 23:46 | ||||
Плохо. Может стоит подумать о получении третьего? Ну, не отчаивайтесь. Попробую объяснить еще раз. Другими словами. Имеется ось Х (то, что выше я называл вектором). Вдоль нее расположены значения отвечающие условию да-нет. Ну или есть значение - нет значения. Если просто построить график, присвоив каждому "наличию" значения какую-то величину (проще всего единицу), получится такой заборчик: ![]() Проблема осложняется тем, что "единицы" обычно собраны в блоки разной длины. Т.е. данный заборчик - это просто гистограмма с единичным шагом разбиения оси 1. Хотелось бы построить более информативный график (чисто иллюстрационный) отражающий плотность этих самых единиц на отдельных участках оси Х. Что-то вроде красного графика на этом же рисунке. Как его построить я пока не знаю и нарисован он, естественно, от фонаря.
Не ленюсь. Нормальные условия это температура 293 К и давление 1 атм ![]() |
Автор: esperant0 3.7.2007, 07:38 |
Формально не понятно следующее предложение "Хотелось бы построить более информативный график (чисто иллюстрационный) отражающий плотность этих самых единиц на отдельных участках оси Х. Что-то вроде красного графика на этом же рисунке" |
Автор: _Y_ 3.7.2007, 08:22 | ||
Очевидно, что на каких-то участках оси мой "забор" плотнее, а на каких-то он реже. Явления этой "плотности-редкости" надо проиллюстрировать изменениями какой-то величины Y. Возможно, задача и не совсем корректная, но и график на данный момент требуется не строгий (четко соответствующий каким-то физическим и/или статистическим законам), а иллюстрационный (просто дающий представление о "плотности забора"). |
Автор: skyboy 3.7.2007, 09:50 |
картинка не грузится. я сначала думал, что тебе надо группировка значений в кластеры, чтоб не было дискретности-ступенчатости, но, по-видимому, я ошибаюсь. или нет? |
Автор: _Y_ 3.7.2007, 10:16 | ||||
Это narod.ru так работает. ![]()
Не знаю. Может и оно. С вопросами обьединения в кластеры я практически не знаком. Посоветуйте пожалуйста. |
Автор: alex_smirnov 3.7.2007, 16:47 |
Так а чем не устраивает гистограмма? 1. Разбиваем на 10 бинов наш вектор. 2. В каждый бин попадает 0.1*N нулей и единиц. 3. Просто просуммировать 0 и 1 и нормировать на число элементов в бине (хотя можно и не нормировать) Больше бинов => выше разрешение... И не стоит заморачиваться с различными скользящими окнами (у нас же тут не анализ временных рядов всё-таки ![]() Проблема с РАЗЛИЧИЕМ одинаковых блоков должна, впринципе, решаться размножением ряда... Форкни существующие точки раз 100... а потом выбирая бин размером в 10 элементов стой гистограмму. И вообще это чисто статистичесий подход... можно поизвращённее: ищешь подпоследовательности различной длинны, исходя из результатов поиска делаешь оценку бина... ![]() |
Автор: sergejzr 3.7.2007, 17:12 |
Нормальным распределением (колокол у каждой еденицы, затем сложением всех колоколов) получится самым красивым. Одна проблема - выбор правильной ширины. Но в эту сторону как я понимаю Вы уже копаете. Надо бы эвристику, которая поможет подобрать правильный коеффициент. ПС: У меня сейчас похожая задача и нам нужен с вами одно и тот же решение ![]() Вот пример, как наши колокола регрессируют функцию http://img526.imageshack.us/my.php?image=gausswr8.png |
Автор: _Y_ 3.7.2007, 17:15 | ||||||
В том и проблема, что либо на гистограмме всего три-чретыре бина, либо строится изображенный мой забор. Это проишодит из-за блочного распределения единиц. Блоки достаточно широкие и их не много.
Можно чуть подробнее про извращения? Как раз идентифицировать/оценивать последовательности просто. Добавлено через 5 минут и 14 секунд
Спасибо. Попробую. Что получится - напишу. Я с завтрашнего дня в отпуске ![]() |
Автор: alex_smirnov 3.7.2007, 19:55 |
sergejzr интересно про колокола сказал а поизвращённей можно так: 1. ищешь все уникальные структуры единиц и(или) нулей, т.е. "базис" своего вектора; 2. больше думать не надо, всявязи с предложением о колоколах на единицах ))) (поизвращённей не получилось) с каждой стуктурой ассоциируешь свой колокол. и всё же подумай над размножением своего вектора и построении гистограммы (просто быстрее делается) всё зависит от задачи! удачи! |
Автор: esperant0 3.7.2007, 21:34 | ||||||||||
Чавой это? Добавлено через 1 минуту и 38 секунд
Чавой это? Добавлено через 4 минуты и 23 секунды
Почему 2 верно? Имхо не верно Добавлено через 5 минут и 2 секунды
Чавой? Добавлено через 6 минут и 16 секунд
Форкни? Правильней форткани или отвиндозь. Но форкни Добавлено через 7 минут и 15 секунд ![]() К сожалению тема превратилось в набор псевдонаучных, псевдоматематических изречений. |
Автор: alex_smirnov 4.7.2007, 09:50 |
esperant0, хочу заметить, что Вы со своими двумя высшими образованиями не предложили ничего, хоть как-то решаюшее проблему, которую, видимо ещё и не поняли до конца))) fork, к вашему сведению, вполне стат. термин, который, правда, чаще используется в Comp. Sc. и означает клон (когда я говорил форкни, имел ввиду нечто, похожее на метод bootstrap и всё, опять же предполагая, что имеем достаточно длинный вектор) Без обид. Я думаю, что _Y_ теперь уже сам разберётся) |
Автор: _Y_ 4.7.2007, 10:48 | ||||
С гистограммы я начал еще до того как писать сюда. Ничего приличного не получилось ![]()
Вчера пошел по этому пути. Пытался аппроксимировать прямоугольник (блок единиц) функцией нормального распределения с помощью метода наименьших квадратов. Запутался в интегрировании ![]() ![]() Отрапортую. Спасибо. |
Автор: alex_smirnov 4.7.2007, 17:45 | ||
Жжошь:
эээ, а если просто функцию плотности вероятности рисовать? ))) http://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5 ничего интегрировать не надо, просто дисперсию в зависимости от длины блока задаёшь и всё))) |
Автор: esperant0 4.7.2007, 18:06 | ||
Уважаемый человек. Проблему криво сформулированную понять доконца может человек не понимающий до конца, самого себя, например. |
Автор: JackYF 4.7.2007, 18:24 |
esperant0, alex_smirnov, люди, ну не скатывайтесь на личности... только недавно отгремела война в разделе Билдера... |
Автор: SelenIT 4.7.2007, 19:42 |
Предлагаю в качестве первого приближения к сглаживающей ф-ции кол-во единиц в единичной окрестности каждой точки (т.е. в самой точке и двух соседних с ней). Имхо, можно назвать ее "функцией сапера" за аналогию с методой расстановки циферок в соответствующей виндозной игре ![]() |