m0_67979531 2023-04-21 13:34 采纳率: 29.2%
浏览 27
已结题

代码的运行有一点小问题


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

  • 写回答

2条回答 默认 最新

  • Leodong. 2023-04-21 14:28
    关注

    该回答通过自己思路及引用到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 图像文件。


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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月29日
  • 已采纳回答 4月21日
  • 创建了问题 4月21日

悬赏问题

  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?