Python实现拉普拉斯修正的朴素贝叶斯分类器并应用于西瓜数据集3.0
首先,我们需要导入所需的库:numpy和pandas。
import numpy as np
import pandas as pd
接下来,我们可以定义一个朴素贝叶斯分类器的类。
class NaiveBayesClassifier:
def __init__(self):
self.prior_probabilities = None
self.cond_probabilities = None
self.classes = None
def fit(self, X, y):
self.classes = np.unique(y)
self.prior_probabilities = {}
self.cond_probabilities = {}
for c in self.classes:
X_c = X[y == c]
self.prior_probabilities[c] = X_c.shape[0] / X.shape[0]
self.cond_probabilities[c] = {}
for feature in X.columns:
feature_values = X_c[feature].unique()
for value in feature_values:
count = X_c[X_c[feature] == value].shape[0]
self.cond_probabilities[c][(feature, value)] = (count + 1) / (X_c.shape[0] + len(feature_values))
def predict(self, X):
predictions = []
for i in range(X.shape[0]):
x = X.iloc[i]
probabilities = {}
for c in self.classes:
probabilities[c] = self.prior_probabilities[c]
for feature in X.columns:
value = x[feature]
probabilities[c] *= self.cond_probabilities[c].get((feature, value), 1 / len(self.cond_probabilities[c]))
predictions.append(max(probabilities, key=probabilities.get))
return predictions
接下来,我们可以加载西瓜数据集3.0。
data = pd.read_csv('watermelon_3.0.csv')
X = data.drop('label', axis=1)
y = data['label']
然后,我们可以创建一个朴素贝叶斯分类器对象,并对数据进行拟合。
classifier = NaiveBayesClassifier()
classifier.fit(X, y)
最后,我们可以使用训练好的分类器对样本进行分类。
sample = pd.DataFrame({'色泽': ['浅白'], '根蒂': ['蜷缩'], '敲声': ['沉闷'], '纹理': ['清晰'], '脐部': ['凹陷'], '触感': ['硬滑'], '密度': [0.697], '含糖率': [0.46]})
prediction = classifier.predict(sample)
print('Prediction:', prediction)
运行代码后,将会输出样本的预测类别。
原文地址: https://www.cveoy.top/t/topic/pj83 著作权归作者所有。请勿转载和采集!