基于身高和体重,采用最小错误率贝叶斯决策,画出类别判定的决策面。用python代码
时间: 2024-09-21 07:08:34 浏览: 84
基于身高和体重的贝叶斯分类通常涉及到创建一个二元分类模型,比如判断一个人是否超重。我们可以使用高斯朴素贝叶斯作为简单示例,其中每个特征(身高和体重)都被假设为独立的正态分布。这里是一个基本的Python代码片段,使用sklearn库来实现这个过程,并绘制决策边界:
```python
from sklearn.datasets import make_blobs
from sklearn.naive_bayes import GaussianNB
import numpy as np
import matplotlib.pyplot as plt
# 假设我们有身高和体重数据
X, y = make_blobs(n_samples=500, centers=2, random_state=42, center_box=(150, 80, 70, 60)) # 超重的人(1)和非超重的人(0)
# 创建一个高斯朴素贝叶斯分类器
gnb = GaussianNB()
# 训练模型
gnb.fit(X, y)
# 获取决策函数(返回的是每个样本属于各个类别的概率)
def decision_function(X):
return gnb.predict_proba(X)[:, 1]
# 定义绘图区域
xlim = (150, 90)
ylim = (60, 80)
# 绘制决策边界和数据点
x_min, x_max = xlim[0] - 1, xlim[1] + 1
y_min, y_max = ylim[0] - 1, ylim[1] + 1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 500), np.linspace(y_min, y_max, 500))
Z = decision_function(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)
plt.figure(figsize=(8, 6))
plt.contourf(xx, yy, Z, cmap='RdBu_r', alpha=.8)
plt.scatter(X[y == 0, 0], X[y == 0, 1], color='blue', label='Non-overweight')
plt.scatter(X[y == 1, 0], X[y == 1, 1], color='red', marker='x', label='Overweight')
plt.xlabel('Height')
plt.ylabel('Weight')
plt.title('Bayesian Decision Boundaries for Weight Classification')
plt.legend()
plt.show()
```
这个代码首先生成了一些随机数据点,然后训练了一个高斯朴素贝叶斯模型。接着,它计算了所有可能的(网格化)坐标点上超重的概率,并根据这个概率绘制了决策边界。
阅读全文