Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果两个sklearn估计量相等,如何比较?_Python_Scikit Learn - Fatal编程技术网

Python 如果两个sklearn估计量相等,如何比较?

Python 如果两个sklearn估计量相等,如何比较?,python,scikit-learn,Python,Scikit Learn,我有两个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

我有两个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?

您将要比较分配给分类器实例的参数和经过训练的分类器的
.tree\uu0.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\uquot
属性,该属性是非泛型
实例。