我在试着预测金属线圈的质量。我有一个宽10米,长1到6公里的金属线圈。作为培训数据,我有大约600个参数,每10米测量一次,最后的质量控制标记-好/坏(整个线圈)。坏的意思是至少有一个地方有线圈是坏的,没有确切的数据在哪里。我有大约10000卷的数据。在
假设我们要为这个数据训练logistic回归(带2个因子)。在
X = [[0, 0],
...
[0, 0],
[1, 1], # coil is actually broken here, but we don't know it yet.
[0, 0],
...
[0, 0]]
Y = ?????
我不能把所有的“bad”都放在Y中然后运行分类器,因为对于分类器,我会感到困惑。我不能把所有的“好”和“坏”都写在你身上,因为我不知道哪里是坏的位置。在
我想到的解决方案是,我可以将损耗函数定义为和((Y-min(F(x1,x2))^2)(由属于一个线圈的所有F计算的min)而不是和((Y-F(x1,x2))^2)。在这种情况下,我可能得到了正确的F训练,以指出不好的地方。我需要梯度,它不可能在所有点都计算,最小值不是在所有地方都可微的,但是我可以用弱梯度代替(使用在每个地方线圈中最小的函数值)。在
我或多或少知道如何自己实现它,问题是用scikitlearn在python中实现它的最简单方法是什么。理想情况下,它应该与几种学习方法(许多基于损失函数和梯度的方法)相同(或易于适应),是否有可能为这种方法的学习方法做一些包装?在
更新:查看渐变_增压.py-内部有抽象类LossFunction,具有计算损耗和梯度的能力,具有透视效果。看来没有共同的解决办法。在
在机器学习社区中,您正在考虑的是超集学习,这意味着,不是典型的有监督的设置,您有{(x_i,y_i)}形式的训练集,而是{({x_1,…,x_N},y_1)},这样你就知道集合中至少有一个元素具有属性y_1。这不是一个很常见的设置,但现有的一些研究,谷歌在该领域的论文。在
就你自己的损失函数而言,scikit learn是不可能的。Scikit learn是关于简单性的,它为您提供了一套非常灵活的现成工具。它不是一个研究工具,你的问题是研究。你能用什么代替?我建议您使用任何符号微分解决方案,例如autograd,它使您能够通过python代码进行区分,只需在其上应用scipy.optimize.minimize就可以了!任何定制的损失函数都能正常工作。在
作为旁注-最小算子是不可微的,因此模型可能很难弄清楚到底发生了什么。你可以试着去做
sum((Y - prod_x F(x_1, x_2) )^2)
,因为乘法是可以很好地微分的,你仍然会得到类似的效果-如果至少有一个元素被预测为0,它将从其余元素中删除任何“1”答案。您甚至可以更进一步,使其在数值上更稳定,并执行以下操作:也就是说
^{pr2}$您可以注意到与交叉熵成本的相似性,因为您的问题确实是一个分类。现在你有了完美的概率损失,你把每个片段的概率都附加到“坏”或“好”上,所以整个物体坏的概率要么高(如果Y==0)要么低(如果Y==1)。在
相关问题 更多 >
编程相关推荐