使用itertools.count()计数时出错

2024-10-03 02:45:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

counter = itertools.count()

dtype = [('clf', object), ('accu', float), ("counter", int)]
self.models = np.zeros((n_randoms*n_boot, n_estimators), dtype=dtype)

for i in tqdm(range(n_randoms*n_boot)):
    for j in range(n_estimators):
        clf = DecisionTreeClassifier(random_state = j, criterion="entropy")
        clf.fit(X_train_list[i], y_train_list[i])
        accu_list[i, j] = clf.score(X_test_list[i], y_test_list[i])
        self.models[i, j] = (clf, accu_list[i, j], next(counter))

self.sorted_models = np.sort(self.models, axis=1, order=["accu", "counter"])

其中n_randoms是10,n_boot是7,我收到一个TypeError的错误:'<;'“DecisionTreeClassifier”和“DecisionTreeClassifier”实例之间不受支持。当我将n_估计数设置为19时,它会非常高达18

理论上,每当两个分类器具有相同的精度时,我都会使用next(计数器)对每个分类器进行索引,这样,当我使用np.sort()时,它会根据顺序[“acu”,“counter”]进行排序,我认为这很好。此外,如果我在这里使用-next(counter)而不是加号,我只能将n_估计设置为16,并且从17开始得到相同的误差。基于此,我认为在处理next(计数器)时可能存在错误

我的问题是,1.我的错误在哪里?2.关于修复它有什么提示吗?多谢各位

编辑: 我做了更多的实验,这次我将n_随机数设置为100,n_估计数设置为5,这比上面的迭代误差总数(5*100*7>;19*10*7)要大,但效果很好,所以我想只有当估计数增加时才会导致误差


Tags: selfmodels错误npcounterlistnext误差
1条回答
网友
1楼 · 发布于 2024-10-03 02:45:04

numpy.sort并不保证不将元素与它们自己进行比较。快速排序中的partition logic有时会在分区末尾执行自比较,因为元素比较发生在指针比较之前:

/*
 * Generic comparisons may be buggy, so don't rely on the sentinels
 * to keep the pointers from going out of bounds.
 */
for (;;) {
    do {
        pi += elsize;
    } while (cmp(pi, vp, arr) < 0 && pi < pj);
    do {
        pj -= elsize;
    } while (cmp(vp, pj, arr) < 0 && pi < pj);
    if (pi >= pj) {
        break;
    }
    GENERIC_SWAP(pi, pj, elsize);
}

这里,vp是指向透视图副本的指针,透视图位于初始值pj。如果轴是从初始pi到初始pj范围内的最高值,则pi一直前进到轴,并发生自比较

Pivot selection将保证存在一个高于枢轴的值,但较高的值紧跟在初始^{之后


在自比较中,计数器值将相等,比较将尝试询问分类器是否小于自身

分区只在排序轴增长超过插入排序阈值时才开始发生,这就是为什么只有在排序轴足够长时才看到问题的原因

避免自我比较会很方便。我很确定内置的sorted函数避免了自我比较,我认为在numpy.sort中避免自我比较不会太困难。这可能值得一个增强请求

相关问题 更多 >