python计算条件概率_在python中计算范畴变量和连续变量的条件概率?P(分类|连续)...

A,B是数值变量,仅从表中计算条件概率(将其视为总体)

让我们假设A,B只能有所提供表中的值,并以下面的概率表为例,再加几行(以便更好地理解):import pandas as pd

df = pd.read_csv('prob.txt', sep=' ') # let the dataframe df store the probability table

df

# the probability table

A B C

0 2.0 1.0 foo

1 2.2 1.2 bar

2 1.0 1.5 foo

3 2.0 3.0 bar

4 2.0 2.0 foo

5 3.2 1.2 foo

回想一下,两个条件事件的定义!=0:

因此,我们

^{pr2}$

同样,我们也可以计算其他条件概率。在将表作为样本训练数据集,使用a,B(连续)预测变量拟合分类器,以预测Pr(C | a,B)

现在让我们假设该表提供了总体中连续变量a,B的几个(随机)抽样值,并且您想要拟合一个分类器来预测类C('foo'或'bar')的概率,给定数据(变量a,B的可见/不可见值),在这种情况下,您可以从库中安装任何分类器scikit-learn,您不必自己实现。例如,在这种情况下,我们可以想到的最简单的一个是Naive Bayesian,尽管它假设了给定类(P(A,B | C)=P(A | C)P(B | C))的条件独立性。在

假设您有如下所示的数据集df(在这里我综合生成了数据集,您可以在这里使用自己的数据集)import pandas as pd

# load your data in dataframe df here

df.head()

# A B C

# 0.161729 0.814335 foo

# 0.862661 0.517964 foo

# 0.814303 0.337391 foo

# 1.898132 1.530963 bar

# 2.124829 0.289176 bar

from sklearn.naive_bayes import GaussianNB

clf = GaussianNB()

X, y = df[['A','B']], df['C']

# fit the classifier on the training dataset

clf.fit(X, y)

# predict the Pr(C = 'bar' | A, B) with predict_proba()

print(clf.predict_proba([[1,1]])[:,0]) # Pr(C='bar'|A=1.0, B=1.0)

# [ 0.86871233]

import matplotlib.pylab as plt

X1, X2 = np.meshgrid(np.linspace(X[['A']].min(), X[['A']].max(),10), np.linspace(X[['B']].min(), X[['B']].max(),10))

plt.figure(figsize=(10,6))

# plot the probability surface

plt.contourf(X1, X2, clf.predict_proba(np.c_[X1.ravel(), X2.ravel()])[:,0].reshape(X1.shape), cmap='jet', alpha=.8)

plt.colorbar()

cols = {'foo':'green', 'bar':'red'}

plt.scatter(X[['A']], X[['B']], c=[cols[c] for c in y.tolist()], s=50)

plt.show()

colorbar显示了给定A和B值(图中的x,y轴)的C='bar'的概率如何变化。原始数据点也用绿色和红色点绘制(分别使用'foo'和'bar'类)。在

如果条件独立性对你来说太强了,你可以试着去适应贝叶斯分类:线性/二次判别分析分类器(假设两个高斯函数一个用于Pr(A,B | C='foo'),另一个用于Pr(A,B | C='bar'),具有相同/不同协方差矩阵,并从MLE/MAP数据中学习类条件概率的高斯参数,然后计算后验概率P(C | A,B) 利用Bayes定理,对于一维高斯参数MLE计算this视频可能有用)。下图显示了用MLE拟合类条件分布的高斯分布和用LDA分类器拟合的决策面。在

clf.predict_proba([[1,1]])[:,0] # Pr(C='bar'|A=1.0, B=1.0)

# [ 0.67028318]SVM、RandomForest、NeuralNet用于更复杂的分类器,并使用拟合的分类器预测概率。下图显示了带有RandomForest classifier的决策面。在

clf.predict_proba([[1,1]])[:,0] # Pr(C='bar'|A=1.0, B=1.0)

# [ 1.0]

希望这个现在能正确回答你的问题。在

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值