我有一个较大的数据集,我正在使用 Weka 进行探索。它是这样的:今天我将尽可能多地分析数据,并创建一个训练有素的分类器。我将此模型保存为文件。那么明天我将获取一批新数据,并想使用保存的模型来预测新数据的类别。这每天都在重复。最终我会更新保存的模型,但现在假设它是静态的。
由于这个任务的大小和频率,我想自动运行它,这意味着命令行或类似的。但是,我的问题也存在于资源管理器中。
我的问题与这样一个事实有关,即随着我的数据集的增长,属性的可能标签列表也会增长。Weka 说这样的属性列表不能改变,或者说训练集和测试集不兼容(见:http ://weka.wikispaces.com/Why+do+I+get+the+error+message+%27training+and +test+set+are+not+compatible%27%3F )。但在我的世界里,我今天不可能知道下周我会偶然发现的所有属性标签。
为了纠正这种情况,建议我运行批量过滤(http://weka.wikispaces.com/How+do+I+generate+compatible+train+and+test+sets+that+get+processed+with+ a+过滤器%3F )。好的,这似乎意味着我需要每天使用重新过滤的训练数据重新构建我的模型。
在这一点上,整个事情似乎很困难,我担心我犯了一个可怕的、简单的新手错误,所以我寻求帮助。
细节:
该模型由
java -Xmx1280M weka.classifiers.meta.FilteredClassifier ^
-t .\training.arff -d .\my.model -c 15 ^
-F "weka.filters.supervised.attribute.Discretize -R first-last" ^
-W weka.classifiers.trees.J48 -- -C 0.25 -M 2
天真地,预测我会尝试:
java -Xmx1280M weka.core.converters.DatabaseLoader ^
-url jdbc:odbc:(database) ^
-user (user) ^
-password (password) ^
-Q "exec (my_stored_procedure) '1/1/2012', '1/2/2012' " ^
\> .\NextDay.arff
接着:
java -Xmx1280M weka.classifiers.trees.J48 ^
-T .\NextDay.arff ^
-l .\my.model ^
-c 15 ^
-p 0 ^
\> .\MyPredictions.txt
这产生:
java.lang.Exception: training and test set are not compatible
at weka.classifiers.Evaluation.evaluateModel(Evaluation.java:1035)
at weka.classifiers.Classifier.runClassifier(Classifier.java:312)
at weka.classifiers.trees.J48.main(J48.java:948)
在 kdkeys.net/training-and-test-set-are-not-compatible-weka/ 上询问了一个相关问题
一个相关的问题是数据库提取的命令行版本需要生成一个临时的 .arff 文件,而 JDBC 生成的 arff 文件似乎不能正确处理“日期”数据。我的数据库生成 ISO-8601 格式“yyyy-MM-dd'T'HH:mm:ss”的日期,但资源管理器和从 JDBC 数据生成的 .arff 文件都将它们表示为 NOMINAL 类型。因此,标题中日期属性的标签列表非常非常长,并且从数据集到数据集永远不会相同。
我不是 java 或 python 程序员,但如果需要的话,我会去买一些书!提前致谢。