TL; DR:有没有比yes-no分类器更复杂的分类器?
我会事先说我没有正在进行的具体项目,这更像是一个我一直在想的技术问题.
出于某种原因,我参与了一些机器学习应用程序.所有这些项目都旨在将数据分类为N个类中的一个,并且它们都使用N是 - 否分类器(如果这是他们所谓的).这些分类器中的每一个都给出一些数据(0到1或-1到1),这对应于分类器被训练的类的可能性.然后由程序使用这些分数以某种方式确定最佳分类.
我已经在名义和连续数据上看到了这一点,并对最终分类进行了不同的实现.例如,我曾经写过一个小文档语言标识符,其中分类器是用英语,法语,德语等进行训练的,并且无论哪个分类器都获得了最高分.这对我来说很有意义.
另一个项目以连续的比例对数据进行分类,大多数从0到1.2,但有些数据最多为6.我们制作了6个左右的分类器并将它们分配到箱子:0-0.2,0.2-0.4,......和1.0及以上.一旦所有分类器返回某些数据,我们就会对分数进行二次拟合,然后将峰值作为结果.这让我感到不舒服,但我不知道为什么.
似乎应该有一种更好的方法,而不仅仅是轮询一组是 - 否分类器并尝试基于某种算法来决定.举一个愚蠢的例子,考虑一个系统来决定图片是显示洋葱还是蘑菇.(这实际上是我想到的第一件事.)我认为对象看起来像洋葱越多,看起来就像蘑菇越少,从本体论的角度来看,我想要一种反映这种情况的分类方法.如果我有两个是 - 没有分类器没有考虑到洋葱反对蘑菇,我该如何处理从两者中获得高分的图片?有没有办法得到一个单一的蘑菇或洋葱分类器,以某种方式知道这两类植被之间没有重叠?或者我可以指望用真实数据训练是 - 否分类器以反映这一点而无需任何特殊干预?
我正在开发一个带有Spring,Hibernate和其他一些库的大型Java Web应用程序,包括用于日志记录的Apache log4j.我正在进行的项目之一是在代码的遗留区域(我没有写!)中重写大量异常,以提供更明智的信息.典型的异常块如下所示:
try {
//Some Hibernate business here
}
catch (Exception e) { //Yes, Exception. That's not just me being general. I find this especially frustrating.
log4j.error("Fail to XXXXXX"); //again, real
throw new MyException();
}
Run Code Online (Sandbox Code Playgroud)
你可以猜到,这会产生一些具有挑战性的日志.我正在寻找一种标准方法来从这些例外中获得更好的信息.如果有帮助的话,大多数都会包装Hibernate调用.这是一个典型的块,类似于我刚写的一个:
try {
myList.add( ((myClass) commonService.getRecordByTableId(myClass.class, ID)).toString() );
} catch (ServiceException e) {
log4j.error("Failed to retrieve record from table myClass for id " + ID);
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
在这里,我从数据库中提取记录并将其添加到列表中.在catch块中,我记录了我认为关于try块正在做什么的合理消息,并打印堆栈跟踪.所以,我的问题是:为了获得诊断错误的更好信息,我还能做什么/应该做些什么呢?
如何编辑数据库中的现有对象?例如,如果我有一个像这样的模型:
class Topic{title,content,author},当我编辑和保存对象时,我不想再次添加“作者”对象。如何更新现有对象而不是添加新对象?
我有一个webapp,它作为WAR文件部署到Tomcat 6服务器.它将一些数据存储在app本身的目录中.部署新版本的应用程序时会覆盖这些文件,但支持它们并重新添加它们是微不足道的.
但是,我的一位同事声称Tomcat有时会自动重新爆炸我的WAR文件,即使爆炸版已经存在,也要擦除这些文件.我以前从未见过这种行为.如果我真的需要,我可以找出一个解决方法,但这是实际发生的事情,无论是自发还是服务器重启?
最近我收到了臭名昭着的错误消息:OutOfMemoryError.我有一台配备16GB Ram和2X2.6 GH四核的64Bit Mac.获取此错误消息对我来说没有意义,因为我正在运行的相同算法(导致此错误消息)在另一台计算机(ubuntu 16GB Ram)上运行顺利.
System.out.println(java.lang.Runtime.getRuntime().maxMemory());
Run Code Online (Sandbox Code Playgroud)
当我在我的mac上运行上面的代码时,我得到:129,957,888(当然没有逗号:-))
当在ubuntu机器上运行此代码时,我得到:1,856,700,416
任何人都可以告诉我如何增加我的最大内存以运行我的算法?谢谢!
我试图设置我的eclipse:默认的VM参数-Xms512m -Xmx4g,但没有任何改变.