小编Ibr*_*iev的帖子

为什么scikitlearn说F1得分不明确,FN大于0?

我运行一个python程序,调用sklearn.metrics计算精度和F1分数的方法.这是没有预测样本时的输出:

/xxx/py2-scikit-learn/0.15.2-comp6/lib/python2.6/site-packages/sklearn/metr\
ics/metrics.py:1771: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)

/xxx/py2-scikit-learn/0.15.2-comp6/lib/python2.6/site-packages/sklearn/metr\
ics/metrics.py:1771: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
Run Code Online (Sandbox Code Playgroud)

当没有预测样本时,意味着TP + FP为0,所以

  • 精度(定义为TP /(TP + FP))为0/0,未定义,
  • 如果FN不为零,则F1得分(定义为2TP /(2TP + FP + FN))为0.

在我的情况下,sklearn.metrics也将精度返回到0.8,并记为0.因此FN不为零.

但是为什么scikilearn说F1不明确?

Scikilearn使用F1的定义是什么?

python statistics machine-learning scikit-learn

46
推荐指数
2
解决办法
4万
查看次数

thread_local + std::thread 销毁时死锁

有谁知道这是什么类型的UB吗?使用 MSVC 19.29.30148 构建时,以下代码在jthread销毁时死锁,有时在 std::cout 之后死锁,有时在之前死锁。这在某种程度上与 thread_local 有关,但我看不出问题是什么。它似乎在其他编译器和平台下工作得很好。

#include <thread>
#include <memory>
#include <iostream>

int main(void)
{
    std::thread t2(
        [&] {
            thread_local std::jthread asd([] {
                    std::cout << "ASD" << std::endl;
                    });
        });
    if (t2.joinable()) { t2.join(); }
}
Run Code Online (Sandbox Code Playgroud)

更新:在静态和动态运行时均可重现

c++ multithreading msvcrt compiler-bug c++20

13
推荐指数
0
解决办法
362
查看次数

返回的cpu时钟时间必须在运行中完全相同吗?

我有用C++编写的大项目.它可能有一些稳定性问题(即随机运行时),但我不确定.据我所知,由于OS多任务处理,执行时间(由挂钟时间测量)在运行之间可能会有所不同.但我不知道,稳定程序是否正常,在具有相同输入的运行中具有由cpu时间时间测量的不同执行时间.我尝试使用clock()time.h,和

boost::chrono:::process_user_cpu_clock::now();
Run Code Online (Sandbox Code Playgroud)

但在这两种情况下,我都会在图表上看到尖峰.我将举例说明这些图表.这里Y轴 - 执行时间,X轴 - 相同程序的连续运行,在相同的输入数据上.红色图表 - 挂钟时间,红色 - cpu时钟时间,由time.h采取从time.h

在此输入图像描述

当然我们假设我们的程序是稳定的,并且没有任何随机行为.那么,有可能吗?平台是Windows 7.

c++ time boost

10
推荐指数
1
解决办法
305
查看次数

Cython用户的Numpy类型

我不太明白numpy.{typename},numpy.npy_ {typename}和numpy.{typename} _t之间的区别是什么,当我从Cython代码中使用它们时?

即这些类型的区别是什么:

# test.pyx
cimport numpy as np
import numpy as np

np.float32
np.npy_float32
np.float32_t
Run Code Online (Sandbox Code Playgroud)

正如我现在所理解的那样:第一种类型是动态的,即Cython将生成一些代码以在运行时检测该类型的大小.另外两种类型是静态的,即使用它的代码将使用每种类型的预定义大小进行编译.请指正.

其他链接:https://docs.scipy.org/doc/numpy/reference/c-api.dtype.html#c-type-names

python numpy cython

8
推荐指数
1
解决办法
1068
查看次数

逻辑回归大边际分类器?

据我所知,SVM中的大边际效应:

例如,让我们看看这张图片:

SVM

在SVM优化目标中,通过正则化项我们试图找到一组参数,其中(参数矢量)theta的范数很小.因此,我们必须找到小的向量theta,并且在该向量上的正例(p)的投影大(以补偿内积的小的θ向量).同时大p给我们很大的余量.在这个图像中,我们找到了理想的theta,并且有了它的大p(和大边距):

SVM2

我的问题:

为什么逻辑回归不是大边际分类器?在LR中,我们以相同的方式最小化正则化项中的Theta向量.也许我不明白,如果是这样 - 纠正我.

我使用了Coursera ml课程中的图像和理论.

machine-learning mathematical-optimization svm linear-regression

7
推荐指数
1
解决办法
939
查看次数

joblib中的batch_size和pre_dispatch到底意味着什么

从这里的文件https://pythonhosted.org/joblib/parallel.html#parallel-reference-documentation 目前还不清楚我究竟batch_sizepre_dispatch手段.

让我们考虑使用'multiprocessing'后端,2个作业(2个进程)的情况,我们有10个任务要计算.

我认为:

batch_size- 一次控制腌制任务的数量,所以如果你设置batch_size = 5- joblib会腌制并立即向每个进程发送5个任务,并且在到达那里后,它们将按顺序一个接一个地解决.使用batch_size=1joblib将一次挑选并发送一个任务,当且仅当该进程完成了上一个任务.

显示我的意思:

def solve_one_task(task):
    # Solves one task at a time
    ....
    return result

def solve_list(list_of_tasks):
    # Solves batch of tasks sequentially
    return [solve_one_task(task) for task in list_of_tasks]
Run Code Online (Sandbox Code Playgroud)

所以这段代码:

Parallel(n_jobs=2, backend = 'multiprocessing', batch_size=5)(
        delayed(solve_one_task)(task) for task in tasks)
Run Code Online (Sandbox Code Playgroud)

等于此代码(在性能方面):

slices = [(0,5)(5,10)]
Parallel(n_jobs=2, backend = 'multiprocessing', batch_size=1)(
        delayed(solve_list)(tasks[slice[0]:slice[1]]) for slice in slices)
Run Code Online (Sandbox Code Playgroud)

我对吗?那pre_dispatch意味着什么呢?

python multithreading multiprocessing python-3.x joblib

7
推荐指数
1
解决办法
1333
查看次数

LoadLibraryEx忽略并排清单

LoadLibraryEx功能是否使用并排清单?我有带有嵌入式SxS清单的bar.dll,并且该清单描述了这个bar.dll的版本,其他dll文件foo.dll有清单,它将bar.dll列为依赖项,具有指定版本.但是当我尝试从foo.dll加载bar.dll时,LoadLibraryEx("bar.dll", NULL, 0)我看到(启用带有gflags的sls)忽略这些清单,并加载它在searchpath中看到的第一个版本的bar.dll,如果我定义ISOLATION_AWARE_ENABLED并使用LoadLibrary它找到正确的版本,但这ISOLATION_AWARE_ENABLED不影响行为LoadLibraryEx,我需要加载正确的版本,LoadLibraryEx因为LoadLibraryEx隐式使用dll的延迟加载.是LoadLibraryEx应该这样的工作,或者是在我的项目配置的一些问题?

foo dll

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="foo" version="0.1.2.3" type="win32"/>
<dependency>
    <dependentAssembly>
        <assemblyIdentity name="bar" version="0.1.2.3" type="win32" />
    </dependentAssembly>
</dependency>
<file name="foo.dll">
</file>
</assembly> 
Run Code Online (Sandbox Code Playgroud)

bar.dll

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="bar" version="0.1.2.3" type="win32"/>
<file name="bar.dll">
</file>
</assembly> 
Run Code Online (Sandbox Code Playgroud)

c++ winapi side-by-side loadlibrary activation-context-api

5
推荐指数
1
解决办法
418
查看次数

前向声明+ typedef 改变类属性?

我正在 AppleClang 12.0.5 中使用命令编译此代码:

clang++ -O2 -g -fvisibility=hidden -std=c++17 -Wpedantic -c sharedlib.cpp
Run Code Online (Sandbox Code Playgroud)

我正在通过以下方式检查目标文件中的符号列表:

nm -om sharedlib.o | c++filt | grep "typeinfo for"
Run Code Online (Sandbox Code Playgroud)

代码本身(sharedlib.cpp):

namespace Foo
{
template <class T>
class BarHidden;

class BarExported;
}

typedef Foo::BarHidden<double> BarHiddenTypedef;
typedef Foo::BarExported BarExportedTypedef;

namespace Foo
{
template<typename T>
class __attribute__((visibility("default"))) BarHidden
{
public:
    virtual ~BarHidden(){};
};

class __attribute__((visibility("default"))) BarExported
{
public:
    virtual ~BarExported(){};
};
}

void __attribute__((visibility("default"))) Throw()
{
    // throw Foo::BarExported();    // weak external typeinfo for Foo::BarExported
    // throw Foo::BarHidden<int>(); // weak …
Run Code Online (Sandbox Code Playgroud)

c++ macos gcc clang

5
推荐指数
0
解决办法
351
查看次数

为什么在gcc中需要-rdynamic选项?

默认情况下,所有符号都导出到动态表,那么为什么要使用-rdynamic标志?即使我们通过attribute /隐藏某些符号-fvisibility=hidden- -rdynamic不会更改结果,也不会取消隐藏先前隐藏的符号。那有什么意义呢?

gcc symbols shared-libraries elf dynamic-linking

0
推荐指数
1
解决办法
940
查看次数