代码的运行有一点小问题


import pandas as pd
from sklearn.tree import DecisionTreeRegressor
from sklearn import preprocessing
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV
from sklearn.tree import export_graphviz 
import graphviz
# 读取含有热误差数据的CSV文件
train_file = open('data8.csv', encoding='utf-8')
train_df = pd.read_csv(train_file)

# 读取测试集的含有热误差数据的CSV文件
test_file = open('data.csv', encoding='utf-8')
test_df = pd.read_csv(test_file)
 
# 对训练集进行数据预处理
X_train = train_df.iloc[:, :-1]
Y_train = train_df.iloc[:, -1]
X_train_scaled = preprocessing.scale(X_train)
 
# 对测试集进行数据预处理
X_test = test_df.iloc[:, :-1]
Y_test = test_df.iloc[:, -1]
X_test_scaled = preprocessing.scale(X_test, with_mean=X_train_scaled.mean(axis=0)[0], with_std=X_train_scaled.mean(axis=0)[0])
X = pd.concat([test_df.iloc[:, :-1], train_df.iloc[:, :-1]], axis=1)
Y = pd.concat([test_df.iloc[:, -1], train_df.iloc[:, -1]], axis=1)
X_test.columns = X_train.columns

# 创建决策树模型
dt = DecisionTreeRegressor()
# 训练决策树模型

# 定义网格搜索参数
param_grid = {
    'max_depth': [1,2,3,4,5,6,7,8,9],
    'min_samples_split': [2, 4, 6],
    'min_samples_leaf': [1, 2, 3]
}
# 进行网格搜索优化
grid = GridSearchCV(dt, param_grid, cv=5, error_score='raise')
grid.fit(X, Y)
grid_search = GridSearchCV(DecisionTreeRegressor(), param_grid, cv=5)
grid_search.fit(X_train, Y_train)
best_model = grid_search.best_estimator_
best_dt = DecisionTreeRegressor(max_depth=grid.best_params_['max_depth'], min_samples_leaf=grid.best_params_['min_samples_leaf'], min_samples_split=grid.best_params_['min_samples_split'])
best_dt.fit(X_train, Y_train) 

# 输出最优参数和模型得分
print('Best Parameters:', grid.best_params_)

# 定义新的温度数据

# 输出预测结果
Y_pred = best_model.predict(X_test)
mse = mean_squared_error(Y_test, Y_pred)
print(f"MSE: {mse:.4f}")
print(Y_pred)
X_test = pd.concat([X_train, X_test], axis=0, ignore_index=True)
dot_data = export_graphviz(best_dt, out_file=None, 
                           feature_names=X_train.columns,  
                           filled=True, rounded=True,  
                           special_characters=True)
graph = graphviz.Source(dot_data)
graph.render("decision_tree")

下面的问题怎么解决

ExecutableNotFound: failed to execute WindowsPath('dot'), make sure the Graphviz executables are on your systems' PATH

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
这个错误提示是说无法找到 Graphviz 的可执行文件 "dot",请确保 Graphviz 已经安装并且已经将其可执行文件所在的路径添加到系统的 PATH 环境变量中。

可以尝试以下几种方法解决问题:

  1. 安装 Graphviz 并将其可执行文件所在路径添加到系统的 PATH 环境变量中。可以从 Graphviz 的官方网站(https://graphviz.org/%EF%BC%89%E4%B8%8A%E4%B8%8B%E8%BD%BD%E7%9B%B8%E5%BA%94%E7%9A%84%E5%AE%89%E8%A3%85%E5%8C%85%EF%BC%8C%E5%B9%B6%E6%8C%89%E7%85%A7%E6%8F%90%E7%A4%BA%E8%BF%9B%E8%A1%8C%E5%AE%89%E8%A3%85%E3%80%82%E5%AE%89%E8%A3%85%E5%AE%8C%E6%88%90%E5%90%8E%EF%BC%8C%E5%8F%AF%E4%BB%A5%E5%9C%A8%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%B8%AD%E8%BE%93%E5%85%A5 "dot -V" 来验证是否安装成功,并将 Graphviz 的可执行文件所在路径添加到系统的 PATH 环境变量中。

  2. 修改代码,将 export_graphviz() 函数的 out_file 参数设置为非空值,比如将其设为一个文件名,这样就可以将决策树的可视化结果输出到文件中而不是直接显示在屏幕上。例如:

    export_graphviz(best_dt, out_file="tree.dot",

                feature_names=X_train.columns,
                filled=True, rounded=True,
                special_characters=True)
    

    graph = graphviz.Source.from_file("tree.dot")
    graph.render("decision_tree")

    修改后的代码中将决策树的可视化结果输出到了名为 "tree.dot" 的文件中,并通过 graphviz.Source.from_file() 方法将该文件读入为一个 graphviz.Source 对象,最后使用 graph.render() 方法将决策树保存为一个图像文件。

  3. 使用其他可视化工具或库,如 Matplotlib 等,来可视化决策树,而不是依赖于 Graphviz。这种方法需要修改代码,使用其他库的 API 来绘制决策树。例如:

    from sklearn.tree import plot_tree
    import matplotlib.pyplot as plt

    fig, ax = plt.subplots(figsize=(10, 10))
    plot_tree(best_dt, ax=ax, feature_names=X_train.columns)
    plt.savefig("decision_tree.png")

    修改后的代码中使用了 plot_tree() 函数来绘制决策树,将绘制结果保存为一个 PNG 图像文件。注意,使用这种方法绘制的决策树可能不如 Graphviz 绘制的决策树美观,但是可以避免 Graphviz 的安装和配置工作。

下面是修改后的代码,使用 Matplotlib 绘制决策树并保存为 PNG 图像文件:

import pandas as pd
from sklearn.tree import DecisionTreeRegressor, plot_tree
from sklearn import preprocessing
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV
import matplotlib.pyplot as plt

# 读取含有热误差数据的 CSV 文件
train_file = open('data8.csv', encoding='utf-8')
train_df = pd.read_csv(train_file)

# 读取测试集的含有热误差数据的 CSV 文件
test_file = open('data.csv', encoding='utf-8')
test_df = pd.read_csv(test_file)

# 对训练集进行数据预处理
X_train = train_df.iloc[:, :-1]
Y_train = train_df.iloc[:, -1]
X_train_scaled = preprocessing.scale(X_train)

# 对测试集进行数据预处理
X_test = test_df.iloc[:, :-1]
Y_test = test_df.iloc[:, -1]
X_test_scaled = preprocessing.scale(X_test, with_mean=X_train_scaled.mean(axis=0)[0], with_std=X_train_scaled.mean(axis=0)[0])
X = pd.concat([test_df.iloc[:, :-1], train_df.iloc[:, :-1]], axis=1)
Y = pd.concat([test_df.iloc[:, -1], train_df.iloc[:, -1]], axis=1)
X_test.columns = X_train.columns

# 创建决策树模型
dt = DecisionTreeRegressor()

# 定义网格搜索参数
param_grid = {
    'max_depth': [1,2,3,4,5,6,7,8,9],
    'min_samples_split': [2, 4, 6],
    'min_samples_leaf': [1, 2, 3]
}

# 进行网格搜索优化
grid = GridSearchCV(dt, param_grid, cv=5, error_score='raise')
grid.fit(X, Y)

grid_search = GridSearchCV(DecisionTreeRegressor(), param_grid, cv=5)
grid_search.fit(X_train, Y_train)
best_model = grid_search.best_estimator_
best_dt = DecisionTreeRegressor(max_depth=grid.best_params_['max_depth'], min_samples_leaf=grid.best_params_['min_samples_leaf'], min_samples_split=grid.best_params_['min_samples_split'])
best_dt.fit(X_train, Y_train)

# 输出最优参数和模型得分
print('Best Parameters:', grid.best_params_)

# 定义新的温度数据

# 输出预测结果
Y_pred = best_model.predict(X_test)
mse = mean_squared_error(Y_test, Y_pred)
print(f"MSE: {mse:.4f}")
print(Y_pred)

# 绘制决策树并保存为 PNG 图像文件
fig, ax = plt.subplots(figsize=(15, 15))
plot_tree(best_dt, ax=ax, feature_names=X_train.columns)
plt.savefig("decision_tree.png")

修改后的代码将决策树绘制为一个 15x15 的图像,并将其保存为名为 "decision_tree.png" 的 PNG 图像文件。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7433424
  • 这篇博客也不错, 你可以看下【汇总】小绿和小蓝中出现的代码来源考据
  • 除此之外, 这篇博客: 【自然语言处理】 常见的文本相似度计算方法中的 最小编辑距离 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 最小编辑距离是一种经典的距离计算方法,用来度量字符串之间的差异。它认为,将字符串A不断修改(增删改)、直至成为字符串B,所需要的修改次数代表了字符串A和B的差异大小。当然了,将A修改为B的方案非常多,选哪一种呢?我们可以用动态规划找到修改次数最小的方案,然后用对应的次数来表示A和B的距离。

  • 您还可以看一下 李月喜老师的企业微信开发第三方应用开发篇课程中的 最小应用提审上线小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    对于问题中提到的代码出现错误,需要更多具体信息才能提供解决方案。请提供错误信息和出现错误的代码行数,以便更好地理解问题所在。

    参考资料中提供了一些与机器学习相关的知识,包括无监督学习、显存占用、卷积神经网络等等。这些知识可以在日常的机器学习工作中被用到,但与问题解决并不直接相关。建议根据实际问题提出具体问题,然后再寻找相应的参考资料和解决方案。