【问题标题】:Models give different scores when predictions are made in a loop VS when predictions are made from a list of models当在循环中进行预测时,模型给出不同的分数 VS 当从模型列表中进行预测时
【发布时间】:2020-08-31 02:55:26
【问题描述】:

变量 grid.best_estimator_ 包含从 GridSearchCV 找到的决策树模型

for subset in range(len(smol_X_train)):
    temp_tree = grid.best_estimator_.fit(smol_X_train[subset], smol_y_train[subset])
    pred = temp_tree.predict(X_test)
    accuracy = accuracy_score(y_test, pred)
    print(accuracy)

输出-

0.827
0.7025 
0.782 
0.7205 
..
..
0.8365
0.8395 

有一个列表-

tree_list = []

for subset in range(len(smol_X_train)):
    temp_tree = grid.best_estimator_.fit(smol_X_train[subset], smol_y_train[subset])
    tree_list.append(temp_tree)

for one_tree in tree_list:
    pred = one_tree.predict(X_test)
    accuracy = accuracy_score(y_test, pred)
    print(accuracy)

输出-

0.8395
0.8395
0.8395
0.8395
..
..
0.8395
0.8395

列表中的模型返回相同的分数(最后一个模型的分数)。

  1. 为什么这里的输出不同?存储在列表中的模型不是都适合不同的子集,因此也应该给出不同的预测吗?
  2. 模型(除了最后一个)的fitness在被放入列表时会丢失吗?

【问题讨论】:

    标签: python scikit-learn decision-tree


    【解决方案1】:

    克隆、拟合模型然后将其附加到列表中就可以了。而不是直接将模型附加到列表中。

    from sklearn.base import clone
    
    tree_list = []
    
    for subset in range(len(smol_X_train)):
        temp_tree = grid.best_estimator_.fit(smol_X_train[subset], smol_y_train[subset])
        tree_list.append(clone(temp_tree))
        pred = temp_tree.predict(X_test)
        accuracy = accuracy_score(y_test, pred)
        print(accuracy)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-24
      • 2014-01-03
      • 2022-07-28
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 2016-02-16
      相关资源
      最近更新 更多