Код:
gc n pp
| even n = undefined
| otherwise = sum $ take (div n 2 + 1) psn
where
pn = 1-pp
ps1 = pp : pn : repeat 0
add ps = zipWith (+) (map (*pp) ps) (0 : map (*pn) ps)
psn = take (n+1) $ head $ drop (n-1) $ iterate add ps1А вот, что получается:
Ok, one module loaded.
*Main> gc 3 $ gc 3 $ gc 3 0.67
0.9300038794006937
*Main> gc 27 0.67
0.9669928892550795
*Main> gc 3 $ gc 3 $ gc 3 $ gc 3 0.67
0.9859875152550825
*Main> gc 81 0.67
0.9992226998122999Плоское голосование всегда сильнее.
Похоже, у меня ошибка в симуляции плоского голосования; тексту ниже верить не стоит
Вот у нас есть три разных предсказателя с определённой примерно одинаковой вероятностью правильного результата Pc (и ошибки Pe=1-Pc). Если мы проведём голосование 2 из 3, то неверный результат будет получен в 4 возможных комбинациях из 8, однако вероятность неверного результата будет равна (1-Pc)^3+3*Pc*(1-Pc)^2. При Pc=2/3, вероятность неверного ответа 7/27, а вероятность верного, соответственно, Pc'=20/27, чуть больше 2/3. Мы получили усиление предсказательной мощи. Если полученную вероятность правильного голосования Pc' подставить в формулу вероятности неправильного ответа, то мы получим Pc''=16400/19683=0.833. Следующая подстановка даст нам Pc'''=0,926.
Что интересно, прикидка вероятностей для уплощённого голосования (14 из 27 с Pc=2/3) даёт большее усиление предсказательной способности. Однако, если мы возьмём Pc=3/4, и выше, то иерархическая ассамблея начинает заметно выигрывать. Порог находится в районе 0,676.
Я посмотрел, такие иерархические системы в теории случайных лесов (random forests) не упоминаются. Наверное потому, что для предсказательной силы типичного случайного леса ("...чуть выше 50%...") иерархическое построение не имеет смысла.