从列表计算条件概率
Calculating conditional probability from list
正在尝试计算给定列表的条件概率。假设我有以下列表:
[[ 1, 0, 0, 0, 1, 5],
[ 0, 1, 0, 1, 0, 3],
[ 1, 0, 0, 0, 1, 5],
[ 0, 0, 1, 1, 0, 2],
[ 0, 0, 1, 0, 1, 1]]
每个'column'代表一个二进制属性,最后一个'column'是class属性。要找到属性的条件概率,我需要计算 P(X|Y)
.
在Python列表中,我如何
- 计算属性的频率,给定它是 Y class?
- 计算 class?
的总频率
以上内容在 pandas 中很容易实现,但我实际上对如何使用 Python 列表来解决它一无所知。
您可以按照以下方式构建数据结构:
from collections import defaultdict
d = defaultdict(lambda: defaultdict(lambda: [0, 0]))
for *values, key in matrix:
for i, v in enumerate(values):
d[key][i][v] += 1
然后像这样计算条件概率:
def prob(k, i):
false, true = d[k][i] # counts of vals 0/1 in col i for class k
return true / (true + false)
>>> prob(5, 3) # for class 5, column 3 is this likely to be 1
0.0
>>> prob(5, 4)
1.0
frequency of the attribute given it is a Y class?
class_ = 3
attr_index = 1
attr_freq_given_cls = sum(a_list[attr_index]
for a_list in list_of_lists
if a_list[-1] == class_)
由于属性来自{0, 1}
,sum
ming 产生出现次数;并使用 -1
进行索引给出标签。
count the total frequency for the class?
from collections import Counter
class_freqs = Counter(a_list[-1] for a_list in list_of_lists)
祝那个朴素的贝叶斯好运 :)
正在尝试计算给定列表的条件概率。假设我有以下列表:
[[ 1, 0, 0, 0, 1, 5],
[ 0, 1, 0, 1, 0, 3],
[ 1, 0, 0, 0, 1, 5],
[ 0, 0, 1, 1, 0, 2],
[ 0, 0, 1, 0, 1, 1]]
每个'column'代表一个二进制属性,最后一个'column'是class属性。要找到属性的条件概率,我需要计算 P(X|Y)
.
在Python列表中,我如何
- 计算属性的频率,给定它是 Y class?
- 计算 class? 的总频率
以上内容在 pandas 中很容易实现,但我实际上对如何使用 Python 列表来解决它一无所知。
您可以按照以下方式构建数据结构:
from collections import defaultdict
d = defaultdict(lambda: defaultdict(lambda: [0, 0]))
for *values, key in matrix:
for i, v in enumerate(values):
d[key][i][v] += 1
然后像这样计算条件概率:
def prob(k, i):
false, true = d[k][i] # counts of vals 0/1 in col i for class k
return true / (true + false)
>>> prob(5, 3) # for class 5, column 3 is this likely to be 1
0.0
>>> prob(5, 4)
1.0
frequency of the attribute given it is a Y class?
class_ = 3
attr_index = 1
attr_freq_given_cls = sum(a_list[attr_index]
for a_list in list_of_lists
if a_list[-1] == class_)
由于属性来自{0, 1}
,sum
ming 产生出现次数;并使用 -1
进行索引给出标签。
count the total frequency for the class?
from collections import Counter
class_freqs = Counter(a_list[-1] for a_list in list_of_lists)
祝那个朴素的贝叶斯好运 :)