请利用Python写出以下任务的完整代码:对一个产品数据集的一些属性进行预处理并将其划分训练集和测试集,并使用朴素贝叶斯方法对数据进行分类,并计算在测试集上的分类效果,基于输入的数据判定该产品是否值得推荐
时间: 2024-03-17 07:41:15 浏览: 54
好的,我来为您提供一个利用 Python 对产品数据集进行预处理并使用朴素贝叶斯方法进行分类的完整代码。主要分为四个部分,分别是数据预处理、训练集和测试集的划分、朴素贝叶斯分类以及分类效果评估。
```python
# 导入所需的库
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
# 读取数据集
df = pd.read_csv("product_data.csv")
# 数据预处理
# 将属性值转换为数值型
df['属性1'] = df['属性1'].map({'A': 0, 'B': 1, 'C': 2})
df['属性2'] = df['属性2'].map({'Yes': 1, 'No': 0})
df['属性3'] = df['属性3'].map({'True': 1, 'False': 0})
# 划分训练集和测试集
X = df.drop('推荐', axis=1)
y = df['推荐']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 朴素贝叶斯分类
gnb = GaussianNB()
gnb.fit(X_train, y_train)
y_pred = gnb.predict(X_test)
# 分类效果评估
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")
# 判断该产品是否值得推荐
new_data = pd.DataFrame({'属性1':[1], '属性2':[0], '属性3':[1]})
new_data['属性1'] = new_data['属性1'].map({0: 'A', 1: 'B', 2: 'C'})
new_data['属性2'] = new_data['属性2'].map({1: 'Yes', 0: 'No'})
new_data['属性3'] = new_data['属性3'].map({1: 'True', 0: 'False'})
new_data_pred = gnb.predict(new_data)
if new_data_pred[0] == 1:
print("该产品值得推荐!")
else:
print("该产品不值得推荐!")
```
代码的具体解释如下:
1. 首先,我们导入所需的库,这些库包括 pandas、numpy、sklearn 中的 train_test_split、GaussianNB 和 accuracy_score 等。其中,train_test_split 是用于划分训练集和测试集的函数,GaussianNB 是用于实现朴素贝叶斯分类的类,accuracy_score 是用于计算分类准确率的函数。
2. 接着,我们使用 pandas 中的 read_csv 函数读取产品数据集,并将其保存在 DataFrame 类型的变量 df 中。
3. 然后,我们对数据集进行预处理,将属性值转换为数值型(这里我们将属性1中的 A、B、C 分别转换为 0、1、2,属性2中的 Yes、No 分别转换为 1、0,属性3中的 True、False 分别转换为 1、0)。
4. 接下来,我们使用 train_test_split 函数将数据集划分为训练集和测试集,其中测试集占比为 20%,随机种子为 42。
5. 然后,我们使用 GaussianNB 类实现朴素贝叶斯分类,并在测试集上进行分类,将分类结果保存在变量 y_pred 中。
6. 最后,我们使用 accuracy_score 函数计算在测试集上的分类准确率,然后基于输入的数据判断该产品是否值得推荐。在这里,我们创建了一个新的 DataFrame 类型的变量 new_data,其中包含了新输入的数据,然后使用 predict 方法预测该产品是否值得推荐,并输出判断结果。
希望这份代码能够帮到您!
阅读全文