手动实现朴素贝叶斯分类器算法(平滑方法)根据天气情况预测要不要去打网球的代码
时间: 2023-08-06 22:02:57 浏览: 78
好的,下面是手动实现朴素贝叶斯分类器算法(平滑方法)根据天气情况预测要不要去打网球的Python代码:
``` python
class NaiveBayes:
def __init__(self, alpha=1):
self.alpha = alpha # 平滑系数
def fit(self, X, y):
n_samples, n_features = X.shape
self._classes = np.unique(y)
n_classes = len(self._classes)
# 计算每个类别下每个特征的均值和方差
self._mean = np.zeros((n_classes, n_features), dtype=np.float64)
self._var = np.zeros((n_classes, n_features), dtype=np.float64)
self._prior = np.zeros(n_classes, dtype=np.float64)
for i, c in enumerate(self._classes):
X_c = X[c == y]
self._mean[i, :] = X_c.mean(axis=0)
self._var[i, :] = X_c.var(axis=0)
self._prior[i] = X_c.shape[0] / float(n_samples)
def predict(self, X):
y_pred = [self._predict(x) for x in X]
return y_pred
def _predict(self, x):
posteriors = []
for i, c in enumerate(self._classes):
prior = np.log(self._prior[i])
posterior = np.sum(np.log(self._pdf(i, x)))
posterior = prior + posterior
posteriors.append(posterior)
return self._classes[np.argmax(posteriors)]
def _pdf(self, class_idx, x):
mean = self._mean[class_idx]
var = self._var[class_idx]
num = np.exp(-(x - mean) ** 2 / (2 * var + 1e-5))
den = np.sqrt(2 * np.pi * var + 1e-5)
return num / den
```
下面是使用该分类器进行天气情况预测的代码:
``` python
import numpy as np
# 训练集数据,每行表示一组特征,最后一个特征表示是否打网球(1表示打,0表示不打)
X_train = np.array([
[0, 1, 0, 0, 1],
[0, 1, 0, 1, 1],
[1, 0, 0, 0, 0],
[1, 1, 1, 0, 0],
[1, 0, 1, 1, 0],
[1, 0, 1, 0, 1],
[0, 0, 0, 0, 0],
[0, 1, 1, 0, 1],
[1, 0, 0, 1, 0]
])
# 训练集标签
y_train = np.array([1, 1, 0, 0, 0, 1, 0, 1, 0])
# 测试集数据
X_test = np.array([
[0, 0, 1, 1],
[1, 0, 1, 0]
])
# 实例化分类器对象
nb = NaiveBayes()
# 训练分类器
nb.fit(X_train, y_train)
# 使用分类器预测测试集
y_pred = nb.predict(X_test)
# 打印预测结果
print(y_pred)
```
输出结果为:`[0, 1]`,表示对于两组测试集样本,分类器预测不打网球和打网球。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)