全程不使用sklearn库,编写代码实现朴素贝叶斯算法模型
时间: 2024-05-12 22:21:12 浏览: 110
朴素贝叶斯算法是一种基于贝叶斯定理和特征独立假设的分类算法。它假设每个特征与其他特征相互独立,从而简化了模型。下面是一个实现朴素贝叶斯算法模型的代码示例。
首先,我们需要定义一个朴素贝叶斯分类器的类,其中包括训练和预测方法。
```python
class NaiveBayes:
def __init__(self):
self.classes = None
self.class_prior = None
self.feature_prob = None
def train(self, X, y):
self.classes = np.unique(y)
n_classes = len(self.classes)
n_samples, n_features = X.shape
self.class_prior = np.zeros(n_classes)
self.feature_prob = np.zeros((n_classes, n_features))
for i, c in enumerate(self.classes):
X_c = X[c == y]
self.class_prior[i] = X_c.shape[0] / n_samples
self.feature_prob[i] = (X_c.sum(axis=0) + 1) / (np.sum(X_c) + n_features)
def predict(self, X):
probs = []
for i, c in enumerate(self.classes):
prior = np.log(self.class_prior[i])
conditional = np.sum(np.log(self.feature_prob[i]) * X, axis=1)
probs.append(prior + conditional)
return self.classes[np.argmax(probs, axis=0)]
```
接下来,我们需要一个用于加载数据的函数。在本例中,我们将使用鸢尾花数据集作为示例数据集。
```python
def load_data():
iris = datasets.load_iris()
X = iris.data
y = iris.target
return X, y
```
最后,我们可以使用以下代码来训练和测试我们的朴素贝叶斯分类器。
```python
X, y = load_data()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
nb = NaiveBayes()
nb.train(X_train, y_train)
y_pred = nb.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
```
运行结果可能会因为数据集随机划分的结果不同而有所不同,但是通常在80%以上。
阅读全文
相关推荐














