import numpy as np import pandas as pd ## 定义朴素贝叶斯模型训练过程 def nb_fit(X, y): # 样本数据 X_data = '1,绿,脆,清,是\n\ 2,不绿,不脆,不清,不是\n\ 3,绿,脆,不清,是\n\ 4,绿,不脆,清,是\n\ 5,不绿,不脆,清,不是' X_data.columns = ['颜色', '脆度', '清度'] X_data = X_data.set_index('id') # 标签数据 y_data = pd.read_csv(pd.compat.StringIO(y), sep=',', header=None) y_data.columns = ['label'] # 标签类别 classes = y_data['label'].unique() # 标签类别统计 class_count = y_data['label'].value_counts() # 极大似然估计:类先验概率 class_prior = class_count / len(y_data) # 类条件概率:字典初始化 prior_condition_prob = dict() # 遍历计算类条件概率 for col in X_data.columns: for j in classes: p_x_y = X_data[(y_data == j).values][col].value_counts() # 遍历计算类条件概率 for i in p_x_y.index: prior_condition_prob[(col, i, j)] = p_x_y[i] / class_count[j] return classes, class_prior, prior_condition_prob classes, class_prior, prior_condition_prob = nb_fit(X, y) # 调用 nb_fit 函数 print(prior_condition_prob)报错X未定义
时间: 2024-02-14 19:12:21 浏览: 59
这段代码中,X 和 y 还没有被定义,需要在调用 nb_fit 函数之前先定义它们。例如,可以将 X 和 y 定义为字符串:
```
X = 'id,颜色,脆度,清度\n\
1,绿,脆,清\n\
2,不绿,不脆,不清\n\
3,绿,脆,不清\n\
4,绿,不脆,清\n\
5,不绿,不脆,清\n'
y = '是\n不是\n是\n是\n不是\n'
```
然后再调用 nb_fit 函数:
```
classes, class_prior, prior_condition_prob = nb_fit(X, y) # 调用 nb_fit 函数
print(prior_condition_prob) # 输出 prior_condition_prob
```
阅读全文