首先,我们需要导入所需的库: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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录