Tag: weka

创建一个新的weka实例

我是Weka的新手,我正在努力创建新的实例以使用之前训练过的MultilayerPerceptron进行标记,我不太了解如何创建实例,所以我从训练数据中获得了第一个实例然后y通过更改atributes值来修改它: //Opening the model public boolean abrirModelo(String ruta) { try { clasificador = (MultilayerPerceptron) weka.core.SerializationHelper.read(ruta); return true; } catch (IOException e) { System.out.println(“Fallo la lectura del archivo”); return false; } catch (ClassNotFoundException a) { System.out.println(“Fallo el casting”); return false; }catch(Exception e){ System.out.println(“Error con el castingo”); return false; } } //getting the first instance to be […]

当已经指定了最大堆值时,是否有解决“Java堆空间”内存错误的解决方法?

我正在运行一个WEKA分类器(J48,输入.arff文件由3个字段组成,字段1具有~27k个不同属性,字段2~500k值),最新一代Macbook Pro具有8GB RAM。 我使用-Xmx参数将java堆空间增加到最大值: java -Xmx7G -cp weka-3-6-10 / weka.jar weka.classifiers.trees.J48 -t myfiles / loc_linear.arff -i 但是当我运行分类器(大约10分钟后)后,我得到错误“ 线程中的exception”主“java.lang.OutOfMemoryError:Java堆空间 ”。 显然我的输入文件8GB RAM是不够的。 这是否意味着唯一的解决方案是拥有更强大的硬件(例如16GB RAM或非常强大的服务器/集群)? 这个问题会有解决方法吗? (例如,减少输入文件?如果是这样,您认为哪种标准适用于减少?)。 还有其他想法或建议吗?

Hadoop:没有可写接口的简单方法将对象作为输出值

我正在尝试利用hadoop来训练多个模型。 我的数据足够小以适应内存,所以我希望在每个地图任务中训练一个模型。 我的问题是,当我完成我的模型训练后,我需要将它发送到减速器。 我正在使用Weka来训练模型。 我不想开始研究如何在Weka类中实现Writable接口,因为它需要付出很多努力。 我正在寻找一种简单的方法来做到这一点。 Weka中的Classifier类实现了Serializable接口。 如何将此对象发送到reducer? edits 以下是提及weka对象序列化的链接: http ://weka.wikispaces.com/Serialization 以下是我的代码:配置作业(仅发布部分配置): conf.set(“io.serializations”,”org.apache.hadoop.io.serializer.JavaSerialization,” + “org.apache.hadoop.io.serializer.WritableSerialization”); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Classifier.class); 地图function: //load dataset in data variable Classifier tree=new J48(); tree.buildClassifier(); context.write(new Text(“whatever”), tree); 我的Map类扩展了Mapper(对象,文本,文本,分类器) 但我收到这个错误: java.lang.NullPointerException at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73) at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.(MapTask.java:964) at org.apache.hadoop.mapred.MapTask$NewOutputCollector.(MapTask.java:673) at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:755) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:369) at org.apache.hadoop.mapred.Child$4.run(Child.java:259) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:416) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) at org.apache.hadoop.mapred.Child.main(Child.java:253) […]

Java,Weka:如何预测数字属性?

我试图使用Weka的NaiveBayesUpdateable分类器。 我的数据包含名义和数字属性: @relation cars @attribute country {FR, UK, …} @attribute city {London, Paris, …} @attribute car_make {Toyota, BMW, …} @attribute price numeric %% car price @attribute sales numeric %% number of cars sold 我需要根据其他属性预测销售数量(数字!)。 据我所知,我不能在Weka中使用数字属性进行贝叶斯分类。 一种技术是在长度为k的N个区间中拆分数值属性的值,而使用标称属性,其中n是类名,如下所示:@attribute class {1,2,3,… N}。 然而,我需要预测的数字属性范围从0到1 000 000.创建1 000 000个类根本没有任何意义。 如何使用Weka预测数字属性或者在Weka没有此工具的工具的情况下查找哪些算法?

如何使用Weka的DBSCAN对实例进行聚类?

我一直在尝试使用Weka的DBSCAN聚类器来集群实例。 根据我的理解,我应该使用clusterInstance()方法,但令我惊讶的是,当看一下该方法的代码时,看起来实现忽略了参数: /** * Classifies a given instance. * * @param instance The instance to be assigned to a cluster * @return int The number of the assigned cluster as an integer * @throws java.lang.Exception If instance could not be clustered * successfully */ public int clusterInstance(Instance instance) throws Exception { if (processed_InstanceID >= database.size()) […]

使用FileInputStream在Resources中加载文件

我知道在资源中打开文件的安全方法是: InputStream is = this.getClass().getResourceAsStream(“/path/in/jar/file.name”); 现在问题是我的文件是Weka Wrapper包中的decider的模型,而Decider类只有一个方法: public void load(File file) throws Exception load获取文件并将其作为FileInputStream打开。 你看到了解决方法吗? 我真的很想将模型发送到资源中。 我正在考虑创建一个临时文件,在临时文件中写入模型的内容,然后将临时文件传递给Weka,但它是如此脏..其他选项?

如何在WEKA中交叉validation后打印预测类

使用分类器完成10倍交叉validation后,如何打印出每个实例的预测类以及这些实例的分布? J48 j48 = new J48(); Evaluation eval = new Evaluation(newData); eval.crossValidateModel(j48, newData, 10, new Random(1)); 当我尝试类似于下面的内容时,它说分类器没有构建 。 for (int i=0; i<data.numInstances(); i++){ System.out.println(j48.distributionForInstance(newData.instance(i))); } 我正在尝试做的是与WEKA GUI中相同的function,其中一旦训练了分类器,我就可以点击Visualize classifier error” > Save ,我将在文件中找到预测的类。但是现在我需要它在我自己的Java代码中工作。 我尝试过类似下面的内容: J48 j48 = new J48(); Evaluation eval = new Evaluation(newData); StringBuffer forPredictionsPrinting = new StringBuffer(); weka.core.Range attsToOutput = null; Boolean outputDistribution = […]

在weka中向实例添加实例

我有一些arff文件。 我想按顺序阅读它们并创建一个大型数据集。 Instances.add(Instance inst)不会向实例添加字符串值,因此尝试setDataset()…但即使这样也会失败。 有没有办法为字符串完成直观正确的事情? ArffLoader arffLoader = new ArffLoader(); arffLoader.setFile(new File(fName)); Instances newData = arffLoader.getDataSet(); for (int i = 0; i < newData.numInstances(); i++) { Instance one = newData.instance(i); one.setDataset(data); data.add(one); }

如何使用java获取weka中最近的邻居

我一直在尝试使用与weka机器学习库一起使用的Ibk最近邻算法。 我知道如何对实例进行分类,但我想实现协同过滤function,因此我需要实际获取最接近感兴趣对象的实际对象列表。 我怎样才能在weka中使用它的java API实际这样做?

如何在Mac上将LibSVM类添加到WEKA类路径

我正在运行Max OS X 10.7 Lion,我想从命令行使用WEKA和LibSVM。 我收到此错误: Problem evaluating classifier: libsvm classes not in CLASSPATH! 我在这里找到了LibSVM库。 我需要将它添加到我的Java类路径中,以便WEKA可以找到它。 下载包含几个文件,如下所示。 我不知道如何将它们添加到我的Java类路径中。 我试图在WEKA中使用LibSVM分类器,因为它比SMO更适合我。 我也不确定这是否意味着Java类路径或者它是否特定于WEKA。 我也不知道从哪里获取这些课程。 任何帮助表示赞赏。