朴素贝叶斯分类器matlab
时间: 2023-10-16 21:18:16 浏览: 25
下面是一个简单的朴素贝叶斯分类器的 Matlab 实现:
假设我们有一个二分类问题,数据集包含 n 个样本,每个样本有 m 个特征。其中,第 i 个样本的特征向量为 $x_i = [x_{i1}, x_{i2}, ..., x_{im}]$,标签为 $y_i \in \{0,1\}$。
首先,我们需要计算类别为 0 和 1 的先验概率 $P(Y=0)$ 和 $P(Y=1)$:
```matlab
P_Y0 = sum(y == 0) / n;
P_Y1 = sum(y == 1) / n;
```
接下来,我们需要计算每个特征在类别为 0 和 1 下的条件概率。由于朴素贝叶斯假设所有特征相互独立,因此可以分别计算每个特征的条件概率。
对于每个特征 $x_j$,我们需要计算它在类别为 0 和 1 下的均值 $\mu_{0,j}$ 和 $\mu_{1,j}$,以及方差 $\sigma_{0,j}^2$ 和 $\sigma_{1,j}^2$。这可以通过如下代码实现:
```matlab
mu0 = mean(x(y==0,:)); % 类别为 0 的样本中,每个特征的均值
mu1 = mean(x(y==1,:)); % 类别为 1 的样本中,每个特征的均值
sigma0 = var(x(y==0,:)); % 类别为 0 的样本中,每个特征的方差
sigma1 = var(x(y==1,:)); % 类别为 1 的样本中,每个特征的方差
```
接下来,我们可以使用上述参数计算每个特征在类别为 0 和 1 下的条件概率。假设我们要预测一个新样本 $x_{new}$ 的类别,我们需要计算 $x_{new}$ 在类别为 0 和 1 下的概率,即 $P(X=x_{new}|Y=0)$ 和 $P(X=x_{new}|Y=1)$:
```matlab
P_X_Y0 = prod(normpdf(x_new, mu0, sqrt(sigma0))); % 每个特征在类别为 0 下的条件概率的乘积
P_X_Y1 = prod(normpdf(x_new, mu1, sqrt(sigma1))); % 每个特征在类别为 1 下的条件概率的乘积
```
最后,我们可以使用贝叶斯公式计算后验概率,并将后验概率较大的类别作为预测结果:
```matlab
if P_X_Y0 * P_Y0 > P_X_Y1 * P_Y1
y_pred = 0;
else
y_pred = 1;
end
```