【问题标题】:How to compare if two sklearn estimators are equals?如何比较两个 sklearn 估计器是否相等?
【发布时间】:2016-07-18 09:35:55
【问题描述】:

我有两个 sklearn 估算器并想比较它们:

import numpy as np
from sklearn.tree import DecisionTreeClassifier

X, y = np.random.random((100,2)), np.random.choice(2,100)    
dt1 = DecisionTreeClassifier()
dt1.fit(X, y)
dt2 = DecisionTreeClassifier()
dt3 = sklearn.base.copy.deepcopy(dt1)

如何比较分类器以便 dt1 != dt2, dt1 == dt3?

【问题讨论】:

  • 嗯,你首先必须定义两个分类器相等是什么意思。
  • 相同类型的分类器,相同的参数,配备相同的数据,相同的输出......基本上,完全相等,除了是不同的对象。
  • 这不是一个常见的问题 - 没有预先实现的平等可以为您做到这一点。分类器也不存储训练数据,因此仅凭分类器可能无法确定它们是否配备了相同的数据。您可能想稍微解释一下为什么需要这个 - 也许还有另一种方法可以解决您遇到的问题。

标签: python scikit-learn


【解决方案1】:

您需要比较分配给分类器实例的参数和已训练分类器的.tree_.value

# the trees have the same params
def compare_trees(tree1, tree2):
    if hash(tree1.__dict__.values())==hash(tree2.__dict__.values()):
        # the trees have both been trained
        if tree1.tree_ != None and tree2.tree_ != None: 
            try: # the tree values are matching arrays
                return (tree1.tree_.value==tree2.tree_.value).all()
            except: # they do not match
                return False
        elif tree1.tree_ != None or tree2.tree_ != None: 
            # XOR of the trees is not trained
            return False
        else: # Neither has been trained
            return True
    else: # the params are different
        return False


dt1 = DecisionTreeClassifier()
X, y = np.random.random((100,2)), np.random.choice(2,100)
dt1.fit(X, y)

dt2 = DecisionTreeClassifier() # untrained

dt3 = sklearn.base.copy.deepcopy(dt1) # copy of 1st

dt4 = DecisionTreeClassifier() # trained on different data
X_, y_ = np.random.random((100,2)), np.random.choice(2,100)   
dt4.fit(X_, y_)

print(compare_trees(dt1, dt1)) # True
print(compare_trees(dt1, dt2)) # False
print(compare_trees(dt1, dt3)) # True
print(compare_trees(dt1, dt4)) # False

【讨论】:

  • 是否有任何通用方法可以使用任何基本分类器来做到这一点?
  • 我不这么认为。 fit 方法更改 .tree_ 属性,这是一个非泛型 Tree 实例。
猜你喜欢
  • 2014-09-20
  • 2013-08-18
  • 2021-05-23
  • 1970-01-01
  • 2021-09-14
  • 2023-03-11
  • 2010-12-05
  • 2016-03-06
相关资源
最近更新 更多