我运行一个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,所以
在我的情况下,sklearn.metrics
也将精度返回到0.8,并记为0.因此FN不为零.
但是为什么scikilearn说F1不明确?
Scikilearn使用F1的定义是什么?
有谁知道这是什么类型的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++编写的大项目.它可能有一些稳定性问题(即随机运行时),但我不确定.据我所知,由于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.
我不太明白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
据我所知,SVM中的大边际效应:
例如,让我们看看这张图片:
在SVM优化目标中,通过正则化项我们试图找到一组参数,其中(参数矢量)theta的范数很小.因此,我们必须找到小的向量theta,并且在该向量上的正例(p)的投影大(以补偿内积的小的θ向量).同时大p给我们很大的余量.在这个图像中,我们找到了理想的theta,并且有了它的大p(和大边距):
为什么逻辑回归不是大边际分类器?在LR中,我们以相同的方式最小化正则化项中的Theta向量.也许我不明白,如果是这样 - 纠正我.
我使用了Coursera ml课程中的图像和理论.
machine-learning mathematical-optimization svm linear-regression
从这里的文件https://pythonhosted.org/joblib/parallel.html#parallel-reference-documentation
目前还不清楚我究竟batch_size
和pre_dispatch
手段.
让我们考虑使用'multiprocessing'
后端,2个作业(2个进程)的情况,我们有10个任务要计算.
我认为:
batch_size
- 一次控制腌制任务的数量,所以如果你设置batch_size = 5
- joblib会腌制并立即向每个进程发送5个任务,并且在到达那里后,它们将按顺序一个接一个地解决.使用batch_size=1
joblib将一次挑选并发送一个任务,当且仅当该进程完成了上一个任务.
显示我的意思:
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
意味着什么呢?
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) 我正在 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) 默认情况下,所有符号都导出到动态表,那么为什么要使用-rdynamic
标志?即使我们通过attribute /隐藏某些符号-fvisibility=hidden
- -rdynamic
不会更改结果,也不会取消隐藏先前隐藏的符号。那有什么意义呢?
c++ ×4
python ×3
gcc ×2
boost ×1
c++20 ×1
clang ×1
compiler-bug ×1
cython ×1
elf ×1
joblib ×1
loadlibrary ×1
macos ×1
msvcrt ×1
numpy ×1
python-3.x ×1
scikit-learn ×1
side-by-side ×1
statistics ×1
svm ×1
symbols ×1
time ×1
winapi ×1