首先,载入西瓜数据集,将其分为训练集和测试集。训练集包含10条信息,测试集包含7条信息。 对训练集进行处理,计算出每个属性的先验概率和条件概率。先验概率指的是某一个类别下,该类别出现的概率。条件概率指的是在已知某个属性条件下,该类别出现的概率。 对测试集进行分类。对于每一个测试样本,根据计算出的先验概率和条件概率,计算出该样本属于每个类别的概率,选择概率最大的类别作为预测结果。 计算分类准确率。将预测结果与真实结果比较,统计出分类准确率。 重复步骤2-4,选择不同的属性组合进行实验。例如,可以选择只使用色泽和根蒂两个属性,或者选择全部6个属性。 对实验结果进行分析。比较不同属性组合的分类准确率,找出对分类结果影响较大的属性。根据这个实验步骤生成代码
时间: 2024-03-05 22:48:43 浏览: 53
yolov5水果质量检测检测权重+数据集
以下是Python代码实现:
```python
import numpy as np
# 载入西瓜数据集
data = np.array([
[1, 1, 1, 1, 1, 1, 0.697, 0.46, 1],
[2, 1, 2, 1, 1, 1, 0.774, 0.376, 1],
[2, 1, 1, 1, 1, 1, 0.634, 0.264, 1],
[1, 1, 2, 1, 1, 1, 0.608, 0.318, 1],
[3, 1, 1, 1, 1, 1, 0.556, 0.215, 1],
[1, 2, 1, 2, 1, 2, 0.403, 0.237, 1],
[2, 2, 1, 2, 1, 2, 0.481, 0.149, 1],
[2, 2, 1, 1, 1, 1, 0.437, 0.211, 1],
[2, 2, 2, 2, 2, 1, 0.666, 0.091, 0],
[1, 3, 3, 1, 3, 2, 0.243, 0.267, 0],
[3, 3, 3, 3, 3, 1, 0.245, 0.057, 0],
[3, 1, 1, 3, 3, 2, 0.343, 0.099, 0],
[1, 2, 1, 1, 2, 1, 0.639, 0.161, 0],
[3, 2, 2, 2, 2, 1, 0.657, 0.198, 0],
[2, 2, 1, 2, 2, 2, 0.36, 0.37, 0],
[3, 1, 1, 3, 3, 1, 0.593, 0.042, 0],
[1, 1, 2, 2, 2, 1, 0.719, 0.103, 0]
])
# 将数据集分为训练集和测试集
train_data = np.vstack((data[:10], data[11:15]))
test_data = np.vstack((data[10], data[15:]))
# 计算先验概率和条件概率
prior_prob = {} # 先验概率
cond_prob = {} # 条件概率
for i in range(train_data.shape[1] - 1):
attr_values = np.unique(train_data[:, i])
for attr in attr_values:
# 计算先验概率
prior_prob[attr] = np.sum(train_data[:, -1] == attr) / train_data.shape[0]
# 计算条件概率
for j in range(train_data.shape[1] - 1):
key = '{}|{}'.format(j, attr)
cond_prob[key] = np.sum((train_data[:, j] == attr) & (train_data[:, -1] == attr)) / np.sum(train_data[:, -1] == attr)
# 对测试集进行分类
pred_labels = []
for i in range(test_data.shape[0]):
probs = {}
for attr in np.unique(train_data[:, -1]):
prob = prior_prob[attr]
for j in range(test_data.shape[1] - 1):
key = '{}|{}'.format(j, test_data[i, j])
prob *= cond_prob.get(key, 0)
probs[attr] = prob
pred_label = max(probs, key=probs.get)
pred_labels.append(pred_label)
# 计算分类准确率
accuracy = np.sum(pred_labels == test_data[:, -1]) / test_data.shape[0]
print('分类准确率:', accuracy)
# 重复步骤2-4,选择不同的属性组合进行实验
# 可以定义一个属性列表,然后使用列表推导式从原始数据集中选取对应的列
attrs = [6, 7] # 只使用色泽和根蒂两个属性
train_data = data[:10, attrs + [-1]]
test_data = data[10:, attrs + [-1]]
# 计算先验概率和条件概率,进行分类,计算分类准确率
# ...
attrs = [0, 1, 2, 3, 4, 5, 6, 7] # 使用全部6个属性
train_data = data[:10, attrs + [-1]]
test_data = data[10:, attrs + [-1]]
# 计算先验概率和条件概率,进行分类,计算分类准确率
# ...
# 对实验结果进行分析,比较不同属性组合的分类准确率,找出对分类结果影响较大的属性
# ...(分析结果需要手动完成,此处代码省略)
阅读全文