Copyright 16.02.2009 by Bochkanov Sergey *************************************************************************/ public static double dfavgce(decisionforest df, double[,] xy, int npoints, alglib.xparams _params) { double result = 0; double[] x = new double[0]; double[] y = new double[0]; int i = 0; int j = 0; int k = 0; int tmpi = 0; int i_ = 0;
x = new double[df.nvars-1+1]; y = new double[df.nclasses-1+1]; result = 0; for(i=0; i<=npoints-1; i++) { for(i_=0; i_<=df.nvars-1;i_++) { x[i_] = xy[i,i_]; } dfprocess(df, x, ref y, _params); if( df.nclasses>1 ) {
与katbust - 它返回正常,通常在测试中>0.5...像往常一样
你在katbust中检查了1棵树的森林吗? 而且katbust给出的是交叉熵的输出还是其他错误?
Alglib给出了5个不同的错误。(这是我的例子,有1棵树)
提醒: 训练集误差估计报告:relclserror=0.267;avgce=184.207;rmserror=0.516;avgerror=0.267;avgrelerror=0.267。
不,提升的构建方式不同,它增加了树的数量,而熵却在减少,当它在n次迭代中开始增长时,它就停止了,这样就不会使模型过度复杂化。
它给出了熵和任何自定义指标,但建立在熵的基础上。
顺便说一下,alglib网站的英文版有一个新的、更快的森林......我想重写它,但找不到它 )
误差--二元分类错误率。它的计算方法是(#错误案例)/(#所有案例)。
默认情况下,它使用预测值的0.5阈值来定义负面和正面的实例。
不同的阈值(例如,0.)可以指定为 "错误@0"。
看了一下xgboost的文档。它没有一个交叉熵的输出,但
error - 二元分类错误率。它的计算方法是(#错误案例)/(#所有案例)。
默认情况下,它使用预测值的0.5阈值来定义负面和正面的实例。
不同的阈值(例如,0.)可以指定为 "错误@0"。
是的,这里的分类错误是默认使用的,显然是这样的
但你必须区分,提升使用错误停止,而森林只是后发制人,和树木在充分的深度不,提升的构建方式不同,它增加了树的数量,而熵却在减少,当它在n次迭代中开始增长时,它就停止了,这样就不会使模型过度复杂化。
它给出了熵和任何自定义指标,但建立在熵的基础上。
在英语版本的alglib网站上,我发布了新的、更快的森林,顺便说一下......我想重写它,但我找不到它 )
新的alglib在哪里--我可以在论坛的某个地方寻找它吗?比较这个函数的代码很有意思
新的alglib在哪里--在论坛中是否有地方可以找?有意思的是,比较这个函数的代码
不,它是用C++或C#编写的
http://www.alglib.net/arcnews.php#date_16_06_2018
不,它是用C++或C#编写的
http://www.alglib.net/arcnews.php#date_16_06_2018
谢谢!
谢谢你!
如果你会弄清楚并进行比较,让我知道:)你可以这样改写,如果不是太麻烦的话。目前森林的文件太大,如果能减少它们就好了。而加速也是一种奖励。
感谢马克西姆的倡议,我已经解禁了!谢谢你,马克西姆。
我已经在桑拿房里呆了一段时间,并在叶子上运行了我的EA,也就是我在新年前写的那个。 到目前为止,结果是负面的,但我认为我必须给它更多的时间,因为在新年的强劲走势之后,Si现在处于持平状态,而这在EA开始时还没有发生。
测试是在具有丰富历史和不良经验的账户上以最小的数量进行的,因此不会有公开的信号,我将在以后的统计中发布报告。我是为那些对我的方法是否有利可图感兴趣的人做的。
关于CatBoost'a,因为我有非常小的模型,1-30棵左右,那么面临的情况是,测试(在其上选择模型)和考试(在其上独立测试)样本可以显示非常好的财务结果,但在训练样本上的结果却非常弱。因此,现在我在所有三个样本上测试这个模型,如果我对它感到满意,我就选择它。因此,我建议也看一下训练样本,我没有这样做,因为我期望与树叶(我的替代方法,只选择树叶)或脚手架有相同的效果,即模型在测试样本上一定会表现良好,但事实证明,情况并非总是如此。
到目前为止,选择模型的标准问题对我来说是开放的,经过测试,在10万个样本中训练好的模型(对于一些金融指标 和标准模型)不超过10-30件,这当然是不够的。我们应该降低标准或创造更多的模型。Catbust有很多不同的参数,所以你可以铆接很多模型。
另一方面,我真的希望通过显卡进行训练,但事实证明1060的作用很小--到目前为止的实验表明,训练200个模型需要20分钟,而在G3900处理器上(实际上是LGA1151下的渣滓)只需要6分钟同时,处理器总是加载50%到60%,这使得它无法同时使用2块以上的显卡,而我对6块显卡的装备寄予厚望。我不知道为什么会发生这种情况,理论上一切都应该是快速的。GPU计算的最大瓶颈是模型从RAM到GPU之间的传输,但对我来说太慢了,也许传输发生在每次迭代之后,这就是滞后的原因。还有人试过在GPU上运行吗?
如果你会弄清楚并进行比较,让我知道:)你可以这样改写,如果不是太麻烦的话。目前森林的文件太大,如果能减少它们就好了。是的,而且加速也是一种奖励。
我比较了一下,下面有同样的一段未使用的代码。(2009年签署,即这部分没有进行编辑)
Copyright 16.02.2009 by Bochkanov Sergey
*************************************************************************/
public static double dfavgce(decisionforest df,
double[,] xy,
int npoints,
alglib.xparams _params)
{
double result = 0;
double[] x = new double[0];
double[] y = new double[0];
int i = 0;
int j = 0;
int k = 0;
int tmpi = 0;
int i_ = 0;
x = new double[df.nvars-1+1];
y = new double[df.nclasses-1+1];
result = 0;
for(i=0; i<=npoints-1; i++)
{
for(i_=0; i_<=df.nvars-1;i_++)
{
x[i_] = xy[i,i_];
}
dfprocess(df, x, ref y, _params);
if( df.nclasses>1 )
{
//
// classification-specific code
//
k = (int)Math.Round(xy[i,df.nvars]);
tmpi = 0;
for(j=1; j<=df.nclasses-1; j++)
{
if( (double)(y[j])>(double)(y[tmpi]) )
{
tmpi = j;
}
}
if( (double)(y[k])!=(double)(0) )
{
result = result-Math.Log(y[k]);
}
else
{
result = result-Math.Log(math.minrealnumber);
}
}
}
result = result/npoints;
return result;
}