如何使用WEKA包管理器?
通常,术语“包”是指Java组织类的概念。从版本3.7.2开始,Weka将包的概念定义为附加功能的捆绑包,独立于主weka.jar文件中提供的功能。包由各种JAR文件、文档、元数据以及可能的源代码组成。Weka早期版本中的许多学习算法和工具已经从版本3.7.2中分离出来。这简化了核心Weka系统,并允许用户安装他们需要或感兴趣的东西。它还提供了一种简单的机制,供人们在向Weka捐款时使用。Weka提供了许多软件包,它们可以添加学习方案或以某种方式扩展核心系统的功能。许多是由Weka团队提供的,其他的是来自第三方的。
WEKA包括一个管理包的工具和一个在运行时动态加载它们的机制。既有命令行管理器又有GUI包管理器。如果包管理器在你尝试运行它时没有启动,请查看此页面。
命令行包管理
请参见这个页面上的文章。
运行已安装的学习算法
在“入门”前面已经介绍了主WEKA发行版附带的运行学习算法(即包含在weka.jar文件中)。但是,使用包管理器安装的包中的算法怎么办?我们不想在每次不想运行特定算法时都向类路径添加大量的JAR文件。幸运的是,我们不必这么做。WEKA有一种机制可以在运行时动态加载已安装的包。这意味着新安装的软件包可以立即在Weka的GUI中使用。
我听到你在问,如何在命令行上运行包中的算法呢?我们可以使用Run命令运行命名算法:
java weka.Run
如果未提供参数,则RUN将输出以下用法信息:
Usage: weka.Run [-no-scan] [-no-load] <scheme name [scheme options]>
run命令支持子字符串匹配,因此你可以运行分类器(如J48),如下所示:
java weka.Run J48
当提供的方案名称有多个匹配项时,你将看到一个列表。例如:
java weka.Run NaiveBayes Select a scheme to run, or <return> to exit: 1) weka.classifiers.bayes.ComplementNaiveBayes 2) weka.classifiers.bayes.NaiveBayes 3) weka.classifiers.bayes.NaiveBayesMultinomial 4) weka.classifiers.bayes.NaiveBayesMultinomialUpdateable 5) weka.classifiers.bayes.NaiveBayesSimple 6) weka.classifiers.bayes.NaiveBayesUpdateable Enter a number >
你可以通过提供-no-scan
选项关闭包扫描和子字符串匹配。在脚本中使用Run
命令时,这很有用。在这种情况下,你需要指定要使用的算法的完全限定名称。例如:
java weka.Run -no-scan weka.classifiers.bayes.NaiveBayes
要减少启动时间,你还可以通过指定-no-load
选项来关闭已安装软件包的动态加载。在这种情况下,如果你计划使用任何打包的算法,则需要在类路径中显式包含它们。例如:
java -classpath ./weka.jar:$HOME/wekafiles/packages/DTNB/DTNB.jar rweka.Run -no-load -no-scan weka.classifiers.rules.DTNB
GUI包管理器
除了命令行客户端之外,Weka的包管理系统还有一个图形界面。这可以从GUIChooser
中的“Tools
(工具)”菜单访问。包管理系统的命令行客户端中的所有可用功能都在GUI版本中可用,并且可以一次安装和卸载多个包。
包管理器的窗口水平分为两部分:顶部是包列表,底部是可用于显示当前所选包信息的迷你浏览器。
软件包列表显示软件包的名称、其类别、当前安装的版本(如果已安装)、可通过存储库获得的最新版本以及软件包是否已加载。通过单击相应的列标题,此列表可以按包名或类别排序。再次单击相同的标题会颠倒排序顺序。窗口左上角的三个单选按钮可用于过滤列表中显示的内容。可以显示所有软件包(默认)、所有可用的软件包(即尚未安装的软件包)或仅显示已安装的软件包。
如果一个程序包有多个版本可用,则可以通过单击“Repository Version”列中的一个条目来访问它们:
安装和删除软件包
在窗口的最顶端有三个按钮。左侧是一个按钮,可用于刷新包存储库元数据的缓存副本。第一次使用包管理器(GUI或命令行)时,在建立初始缓存时会有很短的延迟。
注意:WEKA(3.7.2)不会自动检查中央存储库中的新信息,因此定期刷新本地缓存是个好主意。从Weka 3.7.3开始,如果中央存储库中有新的包可用,包管理器将通知你。
右上角的两个按钮用于分别安装和删除软件包。可以通过按住Shift并左键单击组合来选择范围和/或通过按住Command并左键单击组合来添加到选择中来安装/删除多个软件包。在Install和Uninstall-ton下面是一个复选框,可以启用该复选框来忽略所选软件包所需的任何依赖项以及可能发生的任何冲突。选中此复选框时安装程序包将“不”安装所需的依赖项。
某些软件包可能包含有关如何完成安装的其他信息,或者在安装软件包时显示的特殊说明:
通常没有必要在安装软件包后重新启动Weka-更改应该立即可用。升级已安装的软件包时例外。如果有疑问,请重新启动Weka。
非官方套餐
包列表显示了那些将其元数据存储在Weka的中央元数据存储库中的包。这些软件包是“官方的”Weka软件包,Weka团队经验证,它们似乎提供了所宣传的内容(并且不包含恶意代码或恶意软件)。
也可以安装未经过正式程序的非官方软件包。例如,想要将实验算法快速提供给社区以获得反馈的研究人员可能会提供非官方的软件包。非官方软件包可以通过点击软件包管理器窗口右上角的“File/url”按钮来安装。这将弹出一个“Unnotional Package Install”对话框,用户可以在其中浏览他们的文件系统以查找软件包zip文件,或者直接输入软件包zip文件的URL。请注意,不会对非官方包执行依赖项检查。
使用HTTP代理
GUI和命令行包管理器都可以通过http代理进行操作。为此,请从命令行启动weka并提供代理主机和端口的属性值:
java -Dhttp.proxyHost=some.proxy.somewhere.net -Dhttp.proxyPort=port weka.gui.GUIChooser
如果你的代理需要身份验证,则Weka将显示一个GUI对话框,你可以在其中输入用户名和密码。如果你在headless环境中运行,则可以提供另外两个(非标准)属性:
-Dhttp.proxyUser=some_user_name -Dhttp.proxyPassword=some_password
使用备用中央包元数据存储库
默认情况下,命令行和GUI包管理器都使用托管在Sourceforge上的中央包元数据存储库。万一此站点由于某种原因不可用,则可以将包管理系统指向另一个存储库。该机制允许访问官方存储库的临时备份、建立本地镜像和设置备用存储库以供使用等。
可以通过设置Java属性指定替代存储库:
weka.core.wekaPackageRepositoryURL=http://some.mirror.somewhere
这可以在使用-D标志从命令行启动WEKA时设置,也可以放入$WEKA_HOME/props
中名为“PackageRepository.props
”的文件中。WEKA_HOME
的默认值是user.home/wekafiles
,其中user.home
是用户的主目录。有关Weka如何以及在哪里存储配置信息的更多信息,请参阅包结构文章。
包管理器属性文件
正如上一节所提到的,可以通过在$WEKA_HOME/props
中的PackageRepository.props
文件中放置一个条目来指定替代包元数据存储库。从Weka 3.7.8(以及2012年9月24日之后的快照构建)开始,包管理器还会查找放置在$WEKA_HOME/props/PackageManager.props
中的属性。当前可以设置的属性集包括:
weka.core.wekaPackageRepositoryURL=http://some.mirror.somewhere weka.packageManager.offline=[true | false] weka.packageManager.loadPackages=[true | false] weka.pluginManager.disable=com.funky.FunkyExplorerPluginTab
脱机模式(如果未指定)的默认值为false
,loadPackages的默认值为true
。可以使用weka.pluginManager.Disable属性指定要在GUI中“禁用”的完全限定类名的逗号分隔列表。这可用于使有问题的组件在GUI中不可用,而不必阻止加载包含这些组件的整个包。例如,“funkyPackage”可以提供几个分类器和一个用于可视化的特殊资源管理器插件选项卡。例如,假设插件资源管理器选项卡存在某些数据集的问题,并导致生成令人讨厌的异常(或者在最糟糕的情况下可能会使资源管理器崩溃!)。在这种情况下,我们可能希望使用包提供的分类器,而只禁用资源管理器插件。将Explorer插件的完全限定名称作为与weka.pluginManager.Disable属性相关联的逗号分隔列表的成员列出将实现这一点。