Графічне уявлення ймовірностей, Блог про шифрування

Щоб не гадати, які діапазони апробувати, можна створити графічне уявлення густини розподілу ймовірності. Для побудови графіків існує чудова бібліотека matplotlib, яку можна завантажити із сайтуhttp://matplotlib.sourceforge.net.

Інструкції зі встановлення є на сайті, а додаткову інформацію про бібліотеку matplotlib ви знайдете в додатку А. Ця бібліотека має багато можливостей, з яких нам у цій статті знадобиться зовсім небагато. Після встановлення спробуйте створити простий графік в інтерактивному сеансі:

>>> від pylab import * >>> a=array([1,2,3,4]) >>> b=array([4,2,3,1]) >>> plot(a,b) >>> show( )

В результаті повинен вийти графік, зображений на рис. 8.9. Функція arange створює список чисел як масиву приблизно так само, як це робить функція range. У разі ми малюємо синусоїду на відрізку від 0 до 10.

блог

Мал. 8.9.Просте застосування бібліотеки matplotlib

У цьому розділі буде описано два різні погляди на розподіл ймовірностей. Перший називається кумулятивним розподілом. На графіці кумулятивного розподілу показана ймовірність того, що результат менший за дану величину. У разі цін крива починається на початку координат, оскільки ймовірність того, що ціна менша за нуль, дорівнює 0, і зростає, поки не зустрінеться група зразків з однаковою ціною. У точці, що відповідає максимальній ціні, крива досягає значення 1, оскільки справжня ціна зі 100-відсотковою ймовірністю не перевищує максимальної.

Щоб створити набір даних для побудови графіка кумулятивної ймовірності, потрібно лише пробігтися діапазоном цін, викликаючи функцію probguess зізначенням 0 як нижня межа і заданою ціною – як верхня. Результати слід передати функції plot, яка намалює графік. Додайте функцію cumulativegraph у файл numpredict.py:

def cumulativegraph(data,vec1,high,k=5,weightf=gaussian): t1=arange(0.0,high,0.1)

cprob=array([probguess(data,vec1,0,v,k,weightf) for v in t1])

Тепер викличте цю функцію в інтерактивному сеансі для побудови графіка:

Графік виглядатиме приблизно так, як показано на рис. 8.10. Як і слід було очікувати, у початковій точці кумулятивна ймовірність дорівнює 0, а в кінцевій – 1. Але цікаво, як зростає графік. Імовірність залишається рівною 0 приблизно до ціни $50, потім дуже швидко зростаючи, виходить на плато на рівні 0,6 при ціні $110, де знову робить стрибок. Таким чином, дивлячись на графік, ми розуміємо, що ймовірності групуються в районі цін $60 та $110, оскільки саме в цих точках спостерігаються стрибки кумулятивної ймовірності. Заздалегідь маючи цю інформацію, ви можете розраховувати ймовірності без ворожіння на кавовій гущі.

ймовірностей

Мал. 8.10.Графік кумулятивної ймовірності

Інший варіант – нанести на графік фактичні ймовірності у різних точках по осі цін. Це складніше, тому що ймовірність, що ціна випадково обраного зразка точно збігається із заданою, дуже мала. Крива на графіку дорівнюватиме 0 майже всюди з різкими піками в спрогнозованих цінах. Натомість необхідний спосіб комбінування ймовірностей за деякими діапазонами.

Вирішити це завдання можна, наприклад, припустивши, що ймовірність у кожній точці є виваженим середнім ймовірностями в навколишніх точках, як у зваженому алгоритмі kNN.

Щоб продемонструвати цю ідею на практиці, додайте функціюМожливістьграфа у файлі numpredict.py:

# Підготувати діапазон цін t1=arange(0.0,high,0.1)

# Обчислити ймовірності всього діапазону probs=[probguess(data,vec1,v,v+0.1,k,weightf) for v in t1]

# Згладити їх, застосувавши гауссову функцію до сусідніх ймовірностей smoothed=[]

for i in range(len(probs)): sv=0.0

for j in range(0,len(probs)): dist=abs(i-j)*0.1 weight=gaussian(dist,sigma=ss) sv+=weight*probs[j] smoothed.append(sv) )

Ця функція створює діапазон від 0 до high, а потім обчислює ймовірність у кожній точці. Оскільки результуюча крива зазвичай виявляється зубчастою, то функція пробігає по всьому масиву та створює

уявлення

Мал. 8.11.Графік щільності розподілу ймовірності

згладжений масив, складаючи близькі ймовірності. Кожна точка на згладженій кривій – це виважена за допомогою функції гауса сума сусідів. Параметр ss визначає рівень згладжування. Викликайте цю функцію в інтерактивному сеансі:

Має вийти приблизно такий графік, як на рис. 8.11. На цьому графіку ще простіше побачити, у яких точках групуються результати. Спробуйте різні значення параметра ss і перегляньте, як змінюються результати. З цього розподілу ймовірностей ясно видно, що, прогнозуючи вартість пляшки вина, ви не берете до уваги ключову інформацію про те, що одні люди роблять більш вдалі покупки, ніж інші. У деяких випадках вдається визначити, що це за інформація, а іноді ви просто розумієте, що потрібно походити магазинами і пошукати нижчу ціну.