Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Плотность булевых значений вдоль оси Х


Автор: _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.

Вот думаю, может как-то аппроксимировать график нормальным распределением, потом суммой двух нормальных распределений и т.д. Потом выбирать как-то - какое число нормальных распределений наиболее разумно. Но это только догадка. Хочу совета, т.к. проверять такие догадки буду до Нового Года smile 

Автор: esperant0 2.7.2007, 21:40
Мои два высших образование не позволяют мне понять что вы хотите.


Если вам нужна помощь. не поленитесь напишите нормально условие.

Автор: _Y_ 2.7.2007, 23:46
Цитата(esperant0 @ 2.7.2007,  21:40)
Мои два высших образование не позволяют мне понять что вы хотите.

Плохо. Может стоит подумать о получении третьего?

Ну, не отчаивайтесь. Попробую объяснить еще раз. Другими словами.

Имеется ось Х (то, что выше я называл вектором). Вдоль нее расположены значения отвечающие условию да-нет. Ну или есть значение - нет значения. Если просто построить график, присвоив каждому "наличию" значения какую-то величину (проще всего единицу), получится такой заборчик:
user posted image
Проблема осложняется тем, что "единицы" обычно собраны в блоки разной длины. Т.е. данный заборчик - это просто гистограмма с единичным шагом разбиения оси 1.

Хотелось бы построить более информативный график (чисто иллюстрационный) отражающий плотность этих самых единиц на отдельных участках оси Х. Что-то вроде красного графика на этом же рисунке. Как его построить я пока не знаю и нарисован он, естественно, от фонаря.

Цитата(esperant0 @ 2.7.2007,  21:40)
не поленитесь напишите нормально условие.

Не ленюсь. Нормальные условия это температура 293 К и давление 1 атм smile 

Автор: esperant0 3.7.2007, 07:38
Формально не понятно следующее предложение
"Хотелось бы построить более информативный график (чисто иллюстрационныйотражающий плотность этих самых единиц на отдельных участках оси Х. Что-то вроде красного графика на этом же рисунке"

Автор: _Y_ 3.7.2007, 08:22
Цитата(esperant0 @ 3.7.2007,  07:38)
Формально не понятно следующее предложение
"Хотелось бы построить более информативный график (чисто иллюстрационныйотражающий плотность этих самых единиц на отдельных участках оси Х

Очевидно, что на каких-то участках оси мой "забор" плотнее, а на каких-то он реже. Явления этой "плотности-редкости" надо проиллюстрировать изменениями какой-то величины Y. Возможно, задача и не совсем корректная, но и график на данный момент требуется не строгий (четко соответствующий  каким-то физическим и/или статистическим законам), а иллюстрационный (просто дающий представление о "плотности забора").

Автор: skyboy 3.7.2007, 09:50
картинка не грузится.
я сначала думал, что тебе надо группировка значений в кластеры, чтоб не было дискретности-ступенчатости, но, по-видимому, я ошибаюсь. или нет?

Автор: _Y_ 3.7.2007, 10:16
Цитата(skyboy @ 3.7.2007,  09:50)
картинка не грузится

Это narod.ru так работает. smile  Извиняюсь за него. Приходится токать Show picture. Надо придумать другое место чтобы выкладывать картинки в таких случаях.

Цитата(skyboy @ 3.7.2007,  09:50)
я сначала думал, что тебе надо группировка значений в кластеры, чтоб не было дискретности-ступенчатости, но, по-видимому, я ошибаюсь. или нет?

Не знаю. Может и оно. С вопросами обьединения в кластеры я практически не знаком. Посоветуйте пожалуйста.

Автор: alex_smirnov 3.7.2007, 16:47
Так а чем не устраивает гистограмма?

1. Разбиваем на 10 бинов наш вектор.
2. В каждый бин попадает 0.1*N нулей и единиц.
3. Просто просуммировать 0 и 1 и нормировать на число элементов в бине (хотя можно и не нормировать)

Больше бинов => выше разрешение...

И не стоит заморачиваться с различными скользящими окнами (у нас же тут не анализ временных рядов всё-таки smile )

Проблема с РАЗЛИЧИЕМ одинаковых блоков должна, впринципе, решаться размножением ряда...
Форкни существующие точки раз 100... а потом выбирая бин размером в 10 элементов стой гистограмму.

И вообще это чисто статистичесий подход... можно поизвращённее:
ищешь подпоследовательности различной длинны, исходя из результатов поиска делаешь оценку бина... smile

Автор: sergejzr 3.7.2007, 17:12
Нормальным распределением (колокол у каждой еденицы, затем сложением всех колоколов) получится самым красивым. Одна проблема - выбор правильной ширины. Но в эту сторону как я понимаю Вы уже копаете. 

Надо бы эвристику, которая поможет подобрать правильный коеффициент.


ПС:
У меня сейчас похожая задача и нам нужен с вами одно и тот же решение smile

Вот пример, как наши колокола регрессируют функцию

http://img526.imageshack.us/my.php?image=gausswr8.png


Автор: _Y_ 3.7.2007, 17:15
Цитата(alex_smirnov @ 3.7.2007,  16:47)
Так а чем не устраивает гистограмма?
1. Разбиваем на 10 бинов наш вектор.
2. В каждый бин попадает 0.1*N нулей и единиц

В том и проблема, что либо на гистограмме всего три-чретыре бина, либо строится изображенный мой забор. Это проишодит из-за блочного распределения единиц. Блоки достаточно широкие и их не много.

Цитата(alex_smirnov @ 3.7.2007,  16:47)
 можно поизвращённее:
ищешь подпоследовательности различной длинны, исходя из результатов поиска делаешь оценку бина... smile

Можно чуть подробнее про извращения? Как раз идентифицировать/оценивать последовательности просто.

Добавлено через 5 минут и 14 секунд
Цитата(sergejzr @ 3.7.2007,  17:12)
Нормальным распределением (колокол у каждой еденицы, затем сложением всех колоколов) получится самым красивым

Спасибо. Попробую. Что получится - напишу. 

Я с завтрашнего дня в отпуске smile  - не обижайтесь если долго.

Автор: alex_smirnov 3.7.2007, 19:55
sergejzr интересно про колокола сказал

а поизвращённей можно так:

1. ищешь все уникальные структуры единиц и(или) нулей, т.е. "базис" своего вектора;
2. больше думать не надо, всявязи с предложением о колоколах на единицах ))) (поизвращённей не получилось)
с каждой стуктурой ассоциируешь свой колокол.

и всё же подумай над размножением своего вектора и построении гистограммы (просто быстрее делается)

всё зависит от задачи! удачи!

Автор: esperant0 3.7.2007, 21:34
Цитата(alex_smirnov @ 3.7.2007,  19:55)
 1. ищешь все уникальные структуры единиц и(или) нулей, т.е. "базис" своего вектора;
 

Чавой это?

Добавлено через 1 минуту и 38 секунд
Цитата(sergejzr @ 3.7.2007,  17:12)
 

Вот пример, как наши колокола регрессируют функцию

 

Чавой это?

Добавлено через 4 минуты и 23 секунды
Цитата(alex_smirnov @ 3.7.2007,  16:47)
Так а чем не устраивает гистограмма?

1. Разбиваем на 10 бинов наш вектор.
2. В каждый бин попадает 0.1*N нулей и единиц.
 

Почему 2 верно? Имхо не  верно

Добавлено через 5 минут и 2 секунды
Цитата(alex_smirnov @ 3.7.2007,  16:47)
 Проблема с РАЗЛИЧИЕМ одинаковых блоков должна, впринципе, решаться размножением ряда...
  

Чавой?

Добавлено через 6 минут и 16 секунд
Цитата(alex_smirnov @ 3.7.2007,  16:47)
 
Форкни существующие точки раз 100... а потом выбирая бин размером в 10 элементов стой гистограмму.

 

Форкни? Правильней форткани или отвиндозь. Но форкни

Добавлено через 7 минут и 15 секунд
 smile 

К сожалению тема превратилось в набор псевдонаучных, псевдоматематических изречений.



Автор: alex_smirnov 4.7.2007, 09:50
esperant0, хочу заметить, что Вы со своими двумя высшими образованиями не предложили ничего, хоть как-то решаюшее проблему, которую, видимо ещё и не поняли до конца)))

fork, к вашему сведению, вполне стат. термин, который, правда, чаще используется в Comp. Sc. и означает клон (когда я говорил форкни, имел ввиду нечто, похожее на метод bootstrap и всё, опять же предполагая, что имеем достаточно длинный вектор)

Без обид. Я думаю, что _Y_ теперь уже сам разберётся)

Автор: _Y_ 4.7.2007, 10:48
Цитата(alex_smirnov @ 3.7.2007,  19:55)
и всё же подумай над размножением своего вектора и построении гистограммы

С гистограммы я начал еще до того как писать сюда. Ничего приличного не получилосьsmile

Цитата(alex_smirnov @ 3.7.2007,  19:55)
ищешь все уникальные структуры единиц и(или) нулей, т.е. "базис" своего вектора .... с каждой стуктурой ассоциируешь свой колокол

Вчера  пошел по этому пути. Пытался аппроксимировать прямоугольник (блок единиц) функцией нормального распределения с помощью метода наименьших квадратов. Запутался в интегрировании  smile посмотрел на часы и ушел в отпуск smile  Но этот вариант добью потихоньку в параллели с вариантом, предложенным sergejzr

Отрапортую. Спасибо.

Автор: 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
Цитата(alex_smirnov @ 4.7.2007,  09:50)
esperant0, хочу заметить, что Вы со своими двумя высшими образованиями не предложили ничего, хоть как-то решаюшее проблему, которую, видимо ещё и не поняли до конца)))

 

Уважаемый человек. 

Проблему криво сформулированную понять доконца может человек не понимающий до конца, самого себя, например.



Автор: JackYF 4.7.2007, 18:24
esperant0
alex_smirnov, люди, ну не скатывайтесь на личности... только недавно отгремела война в разделе Билдера...

Автор: SelenIT 4.7.2007, 19:42
Предлагаю в качестве первого приближения к сглаживающей ф-ции кол-во единиц в единичной окрестности каждой точки (т.е. в самой точке и двух соседних с ней). Имхо, можно назвать ее "функцией сапера" за аналогию с методой расстановки циферок в соответствующей виндозной игре smile. Очевидно, диапазон значений - от нуля (большая "прогалина") до трех (сплошной частокол единиц). Если нули с единицами идут примерно поровну, ф-ция будет колебаться между 1 и 2, если преобладают нули - в районе единицы, если преобладают единицы - в районе двойки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)