我试图使用随机森林进行回归.原始数据是218行和9列的数据帧.前8列是分类值(可以是A,B,C或D),最后一列V9的数值可以是10.2到999.87.
当我在训练集上使用随机森林时,它代表原始数据的2/3并随机选择,我得到了以下结果.
>r=randomForest(V9~.,data=trainingData,mytree=4,ntree=1000,importance=TRUE,do.trace=100)
| Out-of-bag |
Tree | MSE %Var(y) |
100 | 6.927e+04 98.98 |
200 | 6.874e+04 98.22 |
300 | 6.822e+04 97.48 |
400 | 6.812e+04 97.34 |
500 | 6.839e+04 97.73 |
600 | 6.852e+04 97.92 |
700 | 6.826e+04 97.54 |
800 | 6.815e+04 97.39 |
900 | 6.803e+04 97.21 |
1000 | 6.796e+04 97.11 |
Run Code Online (Sandbox Code Playgroud)
我不知道高方差百分比是否意味着模型是好的.此外,由于MSE很高,我怀疑回归模型并不是很好.有关如何阅读上述结果的任何想法?他们是否意味着模型不好?
我目前正在实现自定义丢失层,在此过程中,我偶然发现了objectives.py文件[1]中均方误差的实现.我知道我在理解这种损失计算时遗漏了一些东西,因为我一直认为平均值是在每个小批量(张量的轴0)的每个输出的样本中单独进行的,但看起来平均值实际上是在最后一个轴上完成,在一个向量中,意味着它在输出中完成.我在自定义损失层工作时偶然发现了这个问题,因为它需要对特定位置的训练输出中的一些输出的丢失进行折扣.无论如何,我对均方误差的理解是不正确的?为什么Keras会使用最后一个轴,从而将1xn输出向量转换为1x1输出向量?
谢谢.
[1] https://github.com/fchollet/keras/blob/master/keras/objectives.py#L7
我不知道这是否可能,但让我解释一下我的问题
想象一下,我有下面的数组
errors=[e1,e2,e3];
Run Code Online (Sandbox Code Playgroud)
现在我想要计算的是下面
MSE=1/(array_lenght)*[e1^2+e2^2+e3^2];
Run Code Online (Sandbox Code Playgroud)
我可以用循环来制作它,但我想知道是否有任何快速方法.
我想计算两个非常大的二维数组之间的 mse。
x1 = [1,2,3]
x2 = [1,3,5]
x3 = [1,5,9]
x = [x1,x2,x3]
y1 = [2,3,4]
y2 = [3,4,5]
y3 = [4,5,6]
y = [y1,y2,y3]
Run Code Online (Sandbox Code Playgroud)
预期结果是大小为 3 的向量:
[mse(x1,y1), mse(x2,y2), mse(x3,y3)]
Run Code Online (Sandbox Code Playgroud)
至于现在,我正在使用 sklearn.metrics.mean_squared_error :
mses = list(map(mean_squared_error, x, y))
Run Code Online (Sandbox Code Playgroud)
这需要很长时间,因为 xi 和 yi 的实际长度是 115 并且我在 x/y 中有超过一百万个向量。
对于一个非常简单的分类问题,我有一个目标向量[0,0,0,... 0]和一个预测向量[0,0.1,0.2,.... 1]会使交叉熵损失更好地收敛/更快还是MSE损失?当我绘制它们时,在我看来,MSE损失具有较低的误差范围.那为什么会这样?

machine-learning loss mean-square-error logistic-regression cross-entropy