用python实现朴素贝叶斯分类器
时间: 2023-07-12 11:19:45 浏览: 122
下面是一个简单的使用Python实现朴素贝叶斯分类器的示例代码。
首先,需要导入必要的库,包括numpy和pandas:
```python
import numpy as np
import pandas as pd
```
接着,定义一个朴素贝叶斯分类器的类:
```python
class NaiveBayesClassifier:
def __init__(self):
self.prior_probabilities = None
self.conditional_probabilities = None
self.classes = None
def fit(self, X, y):
self.classes = np.unique(y)
self.prior_probabilities = np.zeros(len(self.classes))
self.conditional_probabilities = []
for i, c in enumerate(self.classes):
X_c = X[y == c]
self.prior_probabilities[i] = len(X_c) / len(X)
self.conditional_probabilities.append(
[(X_c[:, j].mean(), X_c[:, j].std()) for j in range(X.shape[1])]
)
def predict(self, X):
y_pred = []
for x in X:
probabilities = []
for i, c in enumerate(self.classes):
probability = self.prior_probabilities[i]
for j in range(len(x)):
mean, std = self.conditional_probabilities[i][j]
probability *= self.gaussian_pdf(x[j], mean, std)
probabilities.append(probability)
y_pred.append(self.classes[np.argmax(probabilities)])
return y_pred
@staticmethod
def gaussian_pdf(x, mean, std):
exponent = np.exp(-((x - mean) ** 2 / (2 * std ** 2)))
return (1 / (np.sqrt(2 * np.pi) * std)) * exponent
```
在这个类中,有三个方法:
- 构造函数`__init__(self)`:初始化先验概率和条件概率的变量为`None`。
- `fit(self, X, y)`:使用输入数据`X`和标签`y`来训练朴素贝叶斯分类器,计算先验概率和条件概率。
- `predict(self, X)`:使用训练好的模型来对新的数据`X`进行预测,并返回预测结果。
其中,`fit`方法中,首先获取所有不同的标签,计算每个标签的先验概率,然后计算每个标签下每个特征的条件概率,使用均值和标准差来表示正态分布的概率密度函数。
在`predict`方法中,首先对新的数据计算在每个标签下的概率,并选择概率最大的标签作为预测结果。
最后,定义一个`main`函数来测试这个朴素贝叶斯分类器:
```python
def main():
# 读取数据
data = pd.read_csv('data.csv').values
X = data[:, :-1]
y = data[:, -1]
# 划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)
# 训练模型并进行预测
clf = NaiveBayesClassifier()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
# 输出预测结果
from sklearn.metrics import accuracy_score
print('Accuracy:', accuracy_score(y_test, y_pred))
```
在这个`main`函数中,首先读取数据,然后使用`train_test_split`方法将数据划分为训练集和测试集,训练朴素贝叶斯分类器,并对测试集进行预测,最后输出预测准确率。
完整的代码如下:
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044901.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)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.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://img-home.csdnimg.cn/images/20241231044955.png)