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]

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

在PuLP,如果要使用整数规划指定多变量约束,需要使用LpVariable.dicts()方法创建变量字典。这个方法可以创建多个变量,每个变量都有一个唯一的名称和一个范围。然后,可以使用这些变量来定义模型的约束条件。 下面是一个使用整数规划指定多变量约束的例子: ```python import pulp # 创建变量字典 var_dict = pulp.LpVariable.dicts("variables", ["x1", "x2", "x3"], lowBound=0, cat=pulp.LpInteger) # 创建问题 prob = pulp.LpProblem("Example problem", pulp.LpMaximize) # 添加约束 prob += 2*var_dict["x1"] + 3*var_dict["x2"] + 4*var_dict["x3"] <= 5 prob += var_dict["x1"] + var_dict["x2"] + var_dict["x3"] <= 1 # 添加目标函数 prob += 3*var_dict["x1"] + 4*var_dict["x2"] + 5*var_dict["x3"] # 求解问题 prob.solve() # 打印结果 for var in prob.variables(): print(f"{var.name}: {var.varValue}") print(f"Objective function value: {pulp.value(prob.objective)}") ``` 在这个例子,我们创建了一个包含三个变量变量字典,并使用`LpInteger`类型指定这些变量为整数。然后,我们使用这些变量来定义模型的约束条件和目标函数。最后,我们使用`prob.solve()`方法求解问题,并打印出每个变量的值和目标函数的值。 注意,在PuLP,可以使用`cat`参数指定变量类型,包括`LpContinuous`(连续变量)、`LpInteger`(整数型变量)和`LpBinary`(二进制变量)。对于整数规划问题,我们需要使用`LpInteger`类型指定变量为整数型变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值