与WEKA一起开发

我在哪里可以得到WEKA的源代码?

每个WEKA版本都附带一个包含完整源代码的JAR归档(这只是一个简单的ZIP归档)。它被称为weka-src.jar。或者,你也可以从Subversion获得WEKA的源代码。

如何编译WEKA

你可以简单地使用任何(兼容Sun的)Java编译器编译源代码,也可以使用Ant或IDE。请查看关于编译WEKA的文章,其中包含指向更多文章的链接,这些文章涵盖了关于ANT和IDE的主题。

什么是Subversion?我需要做什么才能访问它

Subversion是我们现在对WEKA源代码使用的版本控制系统。有关如何访问存储库并从中检索源代码的更多信息,请参阅Subversion文章。

如何在我自己的代码中使用wekas类

在你自己的代码中使用WEKA类并不难,下面的文章很好地概述了如何做到这一点:

其他资源:

  • 请查看Weka手册中使用API的章节(2009年9月8日之前的快照以及>3.6.1和>3.7.0的版本)。
  • Weka Examples集合是一个ANT项目,可以通过快照和2009年9月8日之后的版本获得,其中包含大量的示例类。

注意:WEKA是GNU通用公共许可证下的开源软件,这意味着你的代码也必须按照GPL进行许可。

如何编写新的分类器或筛选器

基本上,分类器需要从weka.classfiers.classfier派生,过滤器需要从weka.filters.Filter派生,但这只是情况的一部分。以下文章更详细地介绍了新计划的发展:

如果你的方案不在通常的WEKA包之外,你需要让WEKA知道这个包,以便能够在GUI中使用它。请参阅如何添加新的分类器、过滤器、内核等?了解更多关于这方面的信息。

注意:这也包含在WEKA手册3.6.1/3.7.0以后的版本中的扩展WEKA一章,或者2010年10月1日以后的稳定3.6/Developer版本的快照中。此外,本章还介绍了聚类器、属性选择算法和关联器。

我可以将weka编译成本机代码吗?

是的,你有以下选项:

  • Excelsior JET-将Java编译成本机代码的商业工具(Windows/Linux)。
  • gcj-一个免费的跨平台工具,用于将Java编译成本机代码。

有关更多详细信息,请参阅使用gcj编译WEKA一文。

我可以使用C#中的WEKA吗?

可以。有关更多信息,请阅读在Microsoft.NET框架中使用WEKA一文。还有一个针对IKVM的教程可用。

我可以使用python中的weka吗?

是也不是。如果你正在从头开始,你可能想要考虑Jython,它是Python的重写,以便与Java无缝集成。缺点是,你只能使用Jython实现的库,而不能使用NumPy或SciPy等其他库。本文使用Jython中的WEKA解释了如何使用Jython中的WEKA类,以及如何在Jython中实现新的分类器,并用Jython实现了一个ZeroR示例。

一种利用javax.script包(Java6中的新功能)的方法是Jepp,即Java Embedded Python。Jepp似乎具有与Jython相同的限制,不能导入Scipy或Numpy,但可以导入纯Python库。通过 JEPP使用 WEKA的弧线包含更多信息和示例。

另一种解决方案是从Python应用程序内部访问Java的JPype,但它还没有完全成熟。

最后,你可以使用python-weka-wrapper Python 2.7库来访问Weka(3.9.x)的大部分非GUI功能:

对于Python3,使用python-weka-wrapper3 Python库:

我可以使用groovy的weka吗?

可以。有关更多信息,请阅读从Groovy使用WEKA一文。本文将告诉你如何设置Groovy CLASSPATH,以便使WEKA类可供Groovy使用,并且还包含一些示例代码。

序列化很好,但是如何从weka类生成实际的java代码呢?

WEKA的一些方案支持基于其内部状态生成Java源代码。有关更多详细信息,请参阅从WEKA类生成源代码一文。

分类/回归的可插拔评估指标

WEKA3.7.8(以及WEKA开发者分支从2012年1月15日开始的每晚快照)有一种机制,允许将新的分类和回归评估指标添加为插件。新的指标将与WEKA的标准评估指标集一起,在命令行上生成的输出中输出,在资源管理器的分类面板中,并由知识流的分类器性能评估器组件进行输出。在命令行上生成的输出中,新的指标将与WEKA的标准评估指标集一起输出。此外,新的插件指标也可用于在实验台中进行分析。

以前,添加新的评估度量涉及编辑和重新编译单一的weka.classfiers.valuation类-即使在最好的情况下,这也是一项令人不寒而栗的工作。使用新的插件机制,可以很容易地添加新指标并通过包管理系统进行部署。如何为包管理系统构建包的“附加配置文件”部分?详细说明如何告诉PluginManager类有关新插件评估指标的信息。

类和接口

所有新指标的主要基类都是weka.classifiers.evaluation.AbstractEvaluationMetric。该类要求具体的子类实现以下方法:

  • boolean appliesToNominalClass()-如果此度量计算的统计信息适用于名义类问题,则为true。
  • boolean appliesToNumericClass()-如果此度量计算的统计信息适用于数值类问题,则为true。
  • String getMetricName()-返回指标的名称。
  • String getMetricDescription()-返回指标的简短描述。
  • List getStatisticNames()-返回此指标计算的统计信息列表(例如,“正确”的指标可能同时返回正确分类的数字和正确的百分比)。
  • double getStatistic(String statName)-获取命名统计的计算值。

为了便于计算统计数据,在第一次构造时,主valuation对象(他的类现在位于weka.classfiers.valuation中)将向所有插件指标传递对其自身的引用。因此,插件度量可以访问EVALUATION类中的所有受保护字段,并且可以在计算自己的统计数据时使用这些字段。

除了扩展AbstractEvaluationMetric之外,插件指标还需要实现以下接口之一:

weka.classifiers.evaluation.StandardEvaluationMetric

接口的“标准”评估指标-即,将成为WEKA正常输出的一部分,而不必打开特定的显示选项。

它定义了以下方法。

  • String toSummaryString()-返回一个格式化字符串(适合在控制台或GUI输出中显示),其中包含此指标计算的所有统计数据。
  • void updateStatsForClassifier(double[] predictedDistribution, Instance instance)-更新有关当前测试实例的分类器性能的统计信息。当类是名义类时调用。只有在无法根据基本评估对象中存储的内容计算其统计信息时,实现者才需要实现此方法。
  • void updateStatsForPredictor(double predictedValue, Instance instance)-更新有关当前测试实例的预测器性能的统计信息。当类是数值类时调用。只有在无法根据基本评估对象中存储的内容计算其统计信息时,实现者才需要实现此方法。

weka.classifiers.evaluation.InformationTheoreticEvaluationMetric

信息论评估指标要实施的接口。允许命令行界面根据用户提供的选项显示或不显示这些指标。

它定义了以下方法。

  • String toSummaryString()-返回一个格式化字符串(适合在控制台或GUI输出中显示),其中包含此指标计算的所有统计数据。
  • void updateStatsForClassifier(double[] predictedDistribution, Instance instance)-更新有关当前测试实例的分类器性能的统计信息。当类是名义类时调用。只有在无法根据基本评估对象中存储的内容计算其统计信息时,实现者才需要实现此方法。
  • void updateStatsForPredictor(double predictedValue, Instance instance)-更新有关当前测试实例的预测器性能的统计信息。当类是数值类时调用。只有在无法根据基本评估对象中存储的内容计算其统计信息时,实现者才需要实现此方法。
  • void updateStatsForConditionalDensityEstimator(ConditionalDensityEstimator classifier, Instance classMissing, double classValue)-基于当前测试实例更新条件密度估计器的统计信息。当类为数值且分类器为ConditionalDensityEstimators时调用。只有在无法根据基本评估对象中存储的内容计算其统计信息时,实现者才需要实现此方法。

weka.classifiers.evaluation.InformationRetrievalMetric

要实现的信息检索评估指标的接口。允许命令行界面根据用户提供的选项显示或不显示这些指标。这些统计数据将在信息检索统计表中显示为新列。因此,不需要toSummaryString()格式的表示形式。

它定义了以下方法。

  • void updateStatsForClassifier(double[] predictedDistribution, Instance instance)-更新有关当前测试实例的分类器性能的统计信息。当类是名义类时调用。只有在无法根据基本评估对象中存储的内容计算其统计信息时,实现者才需要实现此方法。
  • double getStatistic(String name, int classIndex)-获取给定类索引的命名统计的值。如果实现类扩展AbstractEvaluationMetric,则getStatistic(String StatName)的实现应该使用classIndex 0调用此方法。
  • double getClassWeightedAverageStatistic(String statName)-获取此统计信息的加权(按类)平均值。

weka.classifiers.evaluation.IntervalBasedEvaluationMetric

主要是要实施的基于间隔的评估指标的标记接口。允许命令行界面根据用户提供的选项显示或不显示这些指标。

它定义了以下方法。

  • String toSummaryString()-返回一个格式化字符串(适合在控制台或GUI输出中显示),其中包含此指标计算的所有统计数据。
  • void updateStatsForIntervalEstimator(IntervalEstimator classifier, Instance instance, double classValue)-基于当前测试实例更新区间估计器的统计信息。只有在无法根据基本评估对象中存储的内容计算其统计信息时,实现者才需要实现此方法。

我能为WEKA做些什么呢?

关于如何为WEKA做贡献的信息可以在“如何为包管理系统构建包”的贡献包一节中找到。文章。新分类器(一般方案)的条件是,首先,它们必须在知名会议(例如,ICML)的论文集上发表,或者作为受人尊敬的期刊(例如,机器学习)的文章发表;第二,它们的性能优于其他标准方案(例如,J48/C4.5)。

但是请记住,我们没有很多人力,也就是说,做WEKA维护人员并不是一个全职的职位。

00

WEKA

发表评论

电子邮件地址不会被公开。 必填项已用*标注

什么阻碍了你实现迈入机器学习领域的目标?

什么阻碍了你实现迈入机器学习领域的目标?

2020-04-22 机器学习

如果你在为进入机器学习领域而挣扎,感觉到有什么东西阻止了自己的开始,那么你应该看看这篇文章。 在这篇文章中,我们会讨论阻止进入机器学习领域的自我限制的信念,让你明白面临的问题。 几乎总是一种自我限制的信念阻碍了你们的进步。 也许你会在一个或多个这样的信念中看到自己。如果是这样的话, [......]

了解详情

R语言机器学习迷你课程

R语言机器学习迷你课程

2020-08-12 机器学习

在这个迷你课程中,你将发现如何开始,构建精确的模型,并自信地完成在14天内使用R预测建模机器学习项目。 这是一个重要而重要的文章。你可能想把它书签。 了解如何准备数据,拟合机器学习模型,并用我的新书评估他们在r上的预测,包括14步教程、3个项目和完整源代码。 我们开始吧。 [......]

了解详情

关于机器学习的几点思考

关于机器学习的几点思考

2020-04-26 机器学习

机器学习是一个大的、跨学科的研究领域。 你可以通过机器学习获得令人印象深刻的结果,并找到非常具有挑战性的问题的解决方案。但这只是更广泛的机器学习领域的一小部分,通常被称为预测建模或预测分析。 在这篇文章中,你将发现如何改变你对机器学习的思考方式,以便更好地为你提供机器学习实践者的服务。 [......]

了解详情

找到你的机器学习部落

找到你的机器学习部落

2020-04-26 机器学习

机器学习是一个充满算法和数据的迷人而强大的研究领域。 问题是,有这么多不同类型的人对机器学习感兴趣,每个人都有不同的需求。重要的是要了解你想要从机器学习中得到什么,并根据这些需求调整你的自学。 如果你不这样做,你很容易就会陷入困境,迷失方向,失去兴趣,得不到你想要的东西。 找到 [......]

了解详情

应用机器学习过程

应用机器学习过程

2020-04-26 机器学习

随着时间的推移,在处理应用机器学习问题时,你会开发出一种模式或流程,以快速获得良好的正常结果。 一旦开发完成,你就可以在一个又一个项目上反复使用此过程。你的流程越健壮、越发达,你就能越快地获得可靠的结果。 在这篇文章中,我想与你分享我解决机器学习问题的过程框架。 你可以将其用作下一 [......]

了解详情