朴素贝叶斯分类器 Python 代码实现
这是一个使用 Python 代码实现的朴素贝叶斯分类器。它包含两个方法:fit 和 predict。
fit 方法用于训练分类器。它接收输入特征矩阵 X 和标签向量 y,并计算先验概率和条件概率。先验概率 (self.prior) 表示每个类别的概率,条件概率 (self.conditional_prob) 表示给定特征值下每个类别的概率。该方法使用了拉普拉斯平滑 (加 1 平滑) 来避免概率为零的情况。
predict 方法用于对新样本进行分类。它接收输入特征矩阵 X,并返回预测的标签。该方法通过计算每个类别的后验概率 (先验概率乘以条件概率) 来进行分类。它选择具有最大后验概率的类别作为预测结果。
这个分类器假设特征之间相互独立,即每个特征的条件概率只取决于它自己的取值。这是朴素贝叶斯分类器的基本假设。
class NaiveBayesClassifier:
def __init__(self):
self.prior = {}
self.conditional_prob = {}
self.labels = None
def fit(self, X, y):
self.labels, counts = np.unique(y, return_counts=True)
total_samples = X.shape[0]
for label, count in zip(self.labels, counts):
self.prior[label] = (count + 1) / (total_samples + len(self.labels))
for feature_index in range(X.shape[1]):
feature_values = np.unique(X[:, feature_index])
self.conditional_prob[feature_index] = {}
for feature_value in feature_values:
self.conditional_prob[feature_index][feature_value] = {}
for label in self.labels:
numerator = np.sum((X[:, feature_index] == feature_value) & (y == label)) + 1
denominator = np.sum(y == label) + len(feature_values)
self.conditional_prob[feature_index][feature_value][label] = numerator / denominator
def predict(self, X):
predictions = []
for sample in X:
max_posterior = float('-inf')
predicted_label = None
for label in self.labels:
posterior = np.log(self.prior[label])
for feature_index, feature_value in enumerate(sample):
conditional_prob = self.conditional_prob[feature_index][feature_value][label]
posterior += np.log(conditional_prob)
if posterior > max_posterior:
max_posterior = posterior
predicted_label = label
predictions.append(predicted_label)
return predictions
该代码示例展示了如何使用 Python 实现朴素贝叶斯分类器,并详细解释了每个方法的作用和代码逻辑。您可以根据自己的需求对代码进行调整和扩展。
原文地址: https://www.cveoy.top/t/topic/pka3 著作权归作者所有。请勿转载和采集!