def decision_tree_demo(): """ 用决策树对高钾和铅钡进行分类 :return: """ # 1)获取数据集 df = pd.read_excel("G:\\数学建模\\数模\\2022C\\附件.xlsx", sheet_name='描述性分析') # 分割特征和目标变量 df_new = df[ ['类型', '表面风化', '二氧化硅(SiO2)', '氧化钠(Na2O)', '氧化钾(K2O)', '氧化钙(CaO)', '氧化镁(MgO)', '氧化铝(Al2O3)', '氧化铁(Fe2O3)', '氧化铜(CuO)', '氧化铅(PbO)', '氧化钡(BaO)', '五氧化二磷(P2O5)', '氧化锶(SrO)', '氧化锡(SnO2)', '二氧化硫(SO2)']] x = df.drop('类型', axis=1) # 根据实际情况修改目标变量的列名 y = df['类型'] # 根据实际情况修改目标变量的列名 # 2)划分数据集 x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22) # 3)决策树预估器 estimator = DecisionTreeClassifier(criterion="entropy") estimator.fit(x_train, y_train) # 4)模型评估 # 方法1:直接对比真实值和预测值 y_predict = estimator.predict(x_test) print("y_predict:\n", y_predict) print("直接比对真是值和预测值:\n", y_test == y_predict) # 方法2:计算准确率 score = estimator.score(x_test, y_test) print("准确率:\n", score) return None 哪里出现了问题
时间: 2024-01-11 22:05:23 浏览: 29
根据你提供的代码,有几个问题需要注意:
1. 你在导入库时没有导入 pandas,所以需要在代码开头添加 `import pandas as pd`。
2. 在分割特征和目标变量时,你使用了 `df_new` 来存储特征,但在训练和测试数据集的划分中,你使用了原始的 `df` 数据集。你应该将 `x = df.drop('类型', axis=1)` 改为 `x = df_new`,以确保使用正确的特征数据。
3. 在划分数据集时,你没有指定 `test_size` 参数来设置测试集的大小,默认情况下测试集大小为 0.25,可以通过 `train_test_split(x, y, test_size=0.2, random_state=22)` 来设置测试集大小为 0.2。
4. 在模型评估部分,你将预测结果 `y_predict` 与目标变量 `y_test` 进行比较,但没有打印出具体的比较结果。你可以使用 `print((y_test == y_predict).values)` 来打印出每个样本的比较结果。
5. 最后,你的函数没有被调用。你可以在代码最后添加 `decision_tree_demo()` 来调用函数并执行决策树分类器。
下面是修改后的代码:
```python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
def decision_tree_demo():
"""
用决策树对高钾和铅钡进行分类
:return:
"""
# 1)获取数据集
df = pd.read_excel("G:\\数学建模\\数模\\2022C\\附件.xlsx", sheet_name='描述性分析')
# 分割特征和目标变量
df_new = df[
['类型', '表面风化', '二氧化硅(SiO2)', '氧化钠(Na2O)', '氧化钾(K2O)', '氧化钙(CaO)', '氧化镁(MgO)', '氧化铝(Al2O3)', '氧化铁(Fe2O3)',
'氧化铜(CuO)', '氧化铅(PbO)', '氧化钡(BaO)', '五氧化二磷(P2O5)', '氧化锶(SrO)', '氧化锡(SnO2)', '二氧化硫(SO2)']]
x = df_new.drop('类型', axis=1) # 根据实际情况修改目标变量的列名
y = df_new['类型'] # 根据实际情况修改目标变量的列名
# 2)划分数据集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=22)
# 3)决策树预估器
estimator = DecisionTreeClassifier(criterion="entropy")
estimator.fit(x_train, y_train)
# 4)模型评估
# 方法1:直接对比真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", (y_test == y_predict).values)
# 方法2:计算准确率
score = estimator.score(x_test, y_test)
print("准确率:\n", score)
return None
decision_tree_demo()
```
希望这些修改能够解决你的问题!