小编Sci*_*ion的帖子

朴素的贝叶斯和零频率问题

我想我已经正确实施了大部分内容.一部分让我困惑:

零频率问题:当每个类值没有出现属性值时,为每个属性值类组合(拉普拉斯估计器)的计数加1.

这是我的一些客户端代码:

//Clasify
string text = "Claim your free Macbook now!";
double posteriorProbSpam = classifier.Classify(text, "spam");
Console.WriteLine("-------------------------");
double posteriorProbHam = classifier.Classify(text, "ham");
Run Code Online (Sandbox Code Playgroud)

现在说某些地方的训练数据中有"免费"这个词

//Training
classifier.Train("ham", "Attention: Collect your Macbook from store.");
*Lot more here*
classifier.Train("spam", "Free macbook offer expiring.");
Run Code Online (Sandbox Code Playgroud)

但是这个词出现在我的"垃圾邮件"类别的培训数据中,而不是"火腿".所以当我去计算posteriorProbHam时,当我遇到"免费"这个词时我该怎么办.

在此输入图像描述

algorithm machine-learning spam-prevention bayesian

6
推荐指数
1
解决办法
4858
查看次数

extern vs Singleton类

假设我们使用extern关键字有一些外部链接.

我有(在class1.cpp中):

MyClass* myClassVar = NULL;
Run Code Online (Sandbox Code Playgroud)

构造函数初始化上面的内容,析构函数删除.

然后在class2.cpp和class3.cpp中有:

extern MyClass* myClassVar;
Run Code Online (Sandbox Code Playgroud)

这些类使用myClassVar(执行通常的空检查等).

Singleton会更受青睐吗?(我知道全局变量等等,而Singleton只是语法糖).将上述代码更改为以下代码是否有优势?

static Singleton& getInstance()
{
   static Singleton instance;

   return instance;
}
Run Code Online (Sandbox Code Playgroud)

然后所有课程都会:

Singleton::getInstance()
Run Code Online (Sandbox Code Playgroud)

c++ singleton static extern

3
推荐指数
2
解决办法
2344
查看次数

ProcessExit - DLL 卸载和静态的顺序

有一个 EXE 隐式加载一些 DLL 和其他显式加载 (LoadLibrary)。该 EXE 正在执行其 ExitProcess(进程中剩余 1 个线程),并且作为繁忙卸载 DLL(例如 A.DLL)的一部分。

A.DLL(不幸的是)有一个静态的。调用 atexit 回调,并开始调用该静态的析构函数,留下一系列析构函数,直到析构函数决定进行一些清理并加载 DLL 来执行此操作。该 DLL 执行一些方法,直到由于内存访问冲突而发生崩溃,因为它将在此 DLL 中使用的静态不再存在。查看此静态的堆栈跟踪,它的析构函数已作为其 DLL 卸载的一部分被调用。

发生了什么?DLL 已加载,执行了一些方法,使用静态(在同一个 DLL 中),但这已被破坏(静态仅在 dll 卸载时被破坏)。那么它是否处于执行方法的半边缘状态,但也正在被破坏?

EXE 似乎在 __tmainCRTStartup 的上下文中,这意味着用户创建的 main 已返回?在用户 main 或 tmainCRTStartup 的上下文中,DLL 是否被卸载?

c++ windows dll static visual-c++

3
推荐指数
1
解决办法
3162
查看次数

将另一个寄存器移到EBP寄存器

我理解EBP和ESP寄存器的基本语义,但我对以下内容略有不满:

mov ebp, eax
Run Code Online (Sandbox Code Playgroud)

下一行是:

mov edi, dword ptr [ebp]
Run Code Online (Sandbox Code Playgroud)

我认为ebp寄存器是我们参考堆栈的参考点,添加它给我们参数,减去获取局部变量.因此,通过将eax移动到ebp,这不会导致问题吗?

我能理解说:

mov [ebp+12], eax
Run Code Online (Sandbox Code Playgroud)

我猜这是将eax移动到out参数的路线?

x86 assembly

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

任务工厂和线程本地存储

我在循环中从任务工厂创建x个任务.当我等待所有任务完成时,这些任务就会完成并做一些工作.

我的问题是每个任务/线程都初始化它自己的昂贵对象的副本,比如DocumentObject.理想情况下,我希望为每个任务/线程重用这个对象,这样当它作为工厂的一部分重新使用时,就不需要重新创建了.

这个ThreadLocal概念在.Net中可能是这样的.

c# multithreading task task-parallel-library thread-local-storage

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

为什么我们首先使用Raw指针?之前没有使用RAII

我说的是一般应用程序,而不是低级别的,因此它们与硬件接口.

查看遗留代码有很多:

delete myObject;
Run Code Online (Sandbox Code Playgroud)

为什么Smart Pointer的概念不是很早就引入的,它只是利用了RAII,这是一个基于堆栈的对象在离开范围时破坏的概念.从第一天起就一直存在.

可能是性能,一个额外的方向(但这是一个小的价格/开销支付).

开发人员可以在不到30分钟的时间内创建基本但功能强大的自定义智能指针.那么为什么这么久?

或者它在那里,但人们选择不使用它...

c++ smart-pointers

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