Есть ли способ найти вероятность различных значений в матрицах - PullRequest
0 голосов
/ 11 ноября 2018

Я думал, что будет библиотека, которая поможет мне выполнить эту задачу вместо того, чтобы писать много строк кода. Я пытался найти некоторые решения из книг, связанных с моей проблемой, но я не смог найти ни одного.

Одна из последних книг, которые я прочитал, связана с вероятностью:

Python для вероятности, статистики и машинного обучения для Хосе Unpingco

Задача в том, чтобы у меня была такая матрица ниже

0    1
213 vha
342 gha
523 xha
121 gha
812 gha
612 vha
123 gha

и я хочу, чтобы программа рассчитала шаги перехода, скажем, от vha до gha во втором ряду. и от gha до xha в третьем ряду. Если какой-либо шаг повторяется, он будет добавлен к предыдущему шагу. Например, от vha до gha в первой и второй строках повторяется в конце матрицы.

Желаемым выводом будет similar steps added together / total number of rows-1. В первом случае это vha до gha prob = 2 / 7-1

Желаемый вывод

vha to gha prob = 0.3
gha to xha prob = 0.16
xha to gha prob = 0.16
gha to gha prob = 0.16
gha to vha prob = 0.16

Total probs = 1

1 Ответ

0 голосов
/ 12 ноября 2018

Вы можете использовать Counter, чтобы подсчитать, сколько раз происходит переход, а затем вычислить вероятности для каждого перехода.

Вы можете использовать zip, чтобы объединить два фрагмента списка m - один с удаленным последним элементом и другой с удаленным первым элементом - чтобы получить кортежи для смежных элементов. zip(m[:-1], m[1:]) делает это. Затем вы можете сосчитать похожие кортежи, которые представляют переходы, с помощью Counter:

from collections import Counter

m = [[213, 'vha'],
     [342, 'gha'],
     [523, 'xha'],
     [121, 'gha'],
     [812, 'gha'],
     [612, 'vha'],
     [123, 'gha']]

c = Counter([(x[1], y[1]) for x, y in zip(m[:-1], m[1:])])
probs = [(e, v / (len(m) - 1)) for e, v in c.items()]

for p in probs:
    print(p)

выход

(('vha', 'gha'), 0.3333333333333333)                                                                                                                
(('gha', 'xha'), 0.16666666666666666)                                                                                                               
(('xha', 'gha'), 0.16666666666666666)                                                                                                               
(('gha', 'gha'), 0.16666666666666666)                                                                                                               
(('gha', 'vha'), 0.16666666666666666)
...