WEKA高级用法
如何在WEKA中跟踪实例?
WEKA不支持实例的内部ID,必须使用ID属性。请参见如何使用ID属性?
如何使用id属性
有关如何在WEKA中使用属性ID的更多信息,请参阅实例ID文章。
如何连接到数据库
只需稍加努力,你就可以通过JDBC轻松访问数据库。你需要以下各项:
- 要在CLASSPATH中配置访问的数据库的JDBC驱动程序。
- 自定义的DatabaseUtils.props文件。以下示例文件位于
weka.jar
归档的weka/test
目录中:- HSQLDB –
DatabaseUtils.props.hsql
(>= 3.4.1/3.5.0)。 - MS SQL Server 2000 –
DatabaseUtils.props.mssqlserver
(>= 3.4.9/3.5.4)。 - MS SQL Server 2005 Express Edition –
DatabaseUtils.props.mssqlserver2005
(> 3.4.10/3.5.5)。 - MySQL –
DatabaseUtils.props.mysql
(>= 3.4.9/3.5.4)。 - ODBC –
DatabaseUtils.props.odbc
(>= 3.4.9/3.5.4)。 - Oracle –
DatabaseUtils.props.oracle
(>= 3.4.9/3.5.4)。 - PostgreSQL –
DatabaseUtils.props.postgresql
(>= 3.4.9/3.5.4)。 - Sqlite 3.x –
DatabaseUtils.props.sqlite3
(> 3.4.12, > 3.5.7)。
- HSQLDB –
有关更多详细信息,请参阅以下文章:
- 数据库。
- DatabaseUtils.props。
- Windows数据库(包括通过ODBC访问)。
以下常见问题也可能是你感兴趣的:
如何从命令行使用WEKA
阅读入门文章将帮助你理解命令行的用法,以及如何从命令行运行WEKA方案。
我可以调整分类器的参数吗?
可以,你可以使用以下元分类器之一执行此操作:
weka.classifiers.meta.CVParameterSelection
。weka.classifiers.meta.GridSearch
(仅限开发人员版)。weka.classifiers.meta.AutoWEKAClassifier
(通过外部包)。weka.classifiers.meta.MultiSearch
(通过外部包)。
有关更多信息,请参阅各自分类器的Javadoc或优化参数文章。
如何生成学习曲线
你可以使用实验仪的高级模式生成学习曲线。有关更多详细信息,请参阅文章学习曲线。
我在哪里可以找到有关ROC曲线的信息?
只要看看那些贴着ROC标签的文章,它们就涵盖了ROC曲线和AUC的主题。这些文章介绍了GUI处理以及如何从代码创建ROC曲线。
我现在有不平衡的数据
你可以执行成本敏感型分类或对数据进行重采样,以获得更均衡的类分布(请参阅受监督的重采样过滤器)。
我可以在实验器中使用集群器运行实验吗?
可以,请参阅使用集群器运行实验的文章。
如何在WEKA中使用事务数据
事务性数据通常通过将事务ID作为主键的表存储在数据库中。给定事务的各个项目或元素可以拆分到表中的多行中(每行都具有相同的ID)。这种格式的数据需要转换为每个事务一行,然后才能用于学习WEKA中的分类器、关联规则、聚集器等。从WEKA3.7.2开始,有一个称为非正规化的包,其中包含一个可以执行这种“扁平化”过程的过滤器。过滤器要求 1)数据包含唯一标识每个单独事务的ID字段,以及 2)数据已经按照该ID字段的顺序排序。以下是取自WEKA邮件列表的示例场景:
Hi, I have data spanning multiple rows for an instance, such as below (User 1 span across multiple rows, User 2 as well). Is it possible to use WEKA to cluster this dataset? If not, any suggestion on how I should organize the data so that I can use WEKA to cluster this data? User ItemID Sequence TimeSpent 1 1 1 5 1 2 2 1 1 5 3 8 1 6 4 12 1 8 5 2 2 1 1 7 2 2 2 3 2 3 3 3 2 4 4 2 2 5 5 7
在WEKA3.7.2中,有一个称为非正规化的包,它包含一个用于扁平化事务数据的过滤器。对于上面的示例,你必须做的第一件事是将其转换为ARFF文件:
@relation test @attribute User numeric @attribute ItemID numeric @attribute Sequence numeric @attribute TimeSpent numeric @data 1, 1, 1, 5 1, 2, 2, 1 1, 5, 3, 8 1, 6, 4, 12 1, 8, 5, 2 2, 1, 1, 7 2, 2, 2, 3 2, 3, 3, 3 2, 4, 4, 2 2, 5, 5, 7
接下来,你可以运行NumericToNominal
过滤器来转换需要编码为名义的属性(用户属性是一个ID,可以保持数字或名义)。这里,我已将除ID之外的所有属性转换为nominal:
java weka.filters.unsupervised.attribute.NumericToNominal -R 2-last -i test.arff > test2.arff
这将导致:
@relation test-weka.filters.unsupervised.attribute.NumericToNominal-R2-last @attribute User numeric @attribute ItemID {1,2,3,4,5,6,8} @attribute Sequence {1,2,3,4,5} @attribute TimeSpent {1,2,3,5,7,8,12} @data 1,1,1,5 1,2,2,1 1,5,3,8 1,6,4,12 1,8,5,2 2,1,1,7 2,2,2,3 2,3,3,3 2,4,4,2 2,5,5,7
现在,假设已经安装了非正规化软件包,并且(重要的)数据已经按照ID属性(在本例中为“User”)的顺序进行了排序:
java weka.Run Denormalize -G first -i test2.arff > final.arff
这将导致:
@attribute User numeric @attribute ItemID_1 {f,t} @attribute ItemID_2 {f,t} @attribute ItemID_3 {f,t} @attribute ItemID_4 {f,t} @attribute ItemID_5 {f,t} @attribute ItemID_6 {f,t} @attribute ItemID_8 {f,t} @attribute Sequence_1 {f,t} @attribute Sequence_2 {f,t} @attribute Sequence_3 {f,t} @attribute Sequence_4 {f,t} @attribute Sequence_5 {f,t} @attribute TimeSpent_1 {f,t} @attribute TimeSpent_2 {f,t} @attribute TimeSpent_3 {f,t} @attribute TimeSpent_5 {f,t} @attribute TimeSpent_7 {f,t} @attribute TimeSpent_8 {f,t} @attribute TimeSpent_12 {f,t} @data 1,t,t,f,f,t,t,t,t,t,t,t,t,t,t,f,t,f,t,t 2,t,t,t,t,t,f,f,t,t,t,t,t,f,t,t,f,t,f,f
请注意,对于集群/关联规则,你需要首先删除用户ID属性。
我已经使用命令行界面将其作为示例进行了说明。当然,这一切也可以在浏览器中完成。非规格化过滤器还具有聚合任何数字属性(而不是ID)的选项,因此,如果(例如)将TimeSpent属性保留为数字,而不是使用NumericToNominal将其转换为nominal ,则非规格化可以聚合它(sum, average, max, min)。
如何将WEKA与Matlab或Octave配合使用?
Matlab 和Octave 允许你与Java应用程序交互,从而允许你从这些应用程序中使用Weka。
有关如何使用Java集成,请参阅下面的演示文稿Octave(Octave与Matlab相当兼容)一节: