分类: Java
2011-08-03 22:28:01
无意间在网上看到了:,相对我写的代码,它的当然更有权威性。翻译完了,第一次翻译,术语的汉语很多不清楚。还没有校对,有什么错误请告诉我。
你可能要用的最常用的组件(components)是:
l Instances 你的数据
l Filter 对数据的预处理
l Classifiers/Clusterer 被建立在预处理的数据上,分类/聚类
l Evaluating 评价classifier/clusterer
l Attribute selection 去除数据中不相关的属性
下面将介绍如果在你自己的代码中使用WEKA,其中的代码可以在上面网址的尾部找到。
Instances ARFF文件 3.5.5和3.4.X版本从ARFF文件中读取是一个很直接的
import weka.core.Instances;
import java.io.BufferedReader;
import java.io.FileReader;
...
Instances data = new Instances(
new BufferedReader(
new FileReader("/some/where/data.arff")));
// setting class attribute
data.setClassIndex(data.numAttributes() - 1);
Class Index是指示用于分类的目标属性的下标。在ARFF文件中,它被默认为是最后一个属性,这也就是为什么它被设置成numAttributes-1.
你必需在使用一个Weka函数(ex: weka.classifiers.Classifier.buildClassifier(data))之前设置Class Index。
3.5.5和更新的版本DataSource类不仅限于读取ARFF文件,它同样可以读取CSV文件和其它格式的文件(基本上Weka可以通过它的转换器(converters)导入所有的文件格式)。
import weka.core.converters.ConverterUtils.DataSource;
...
DataSource source = new DataSource("/some/where/data.arff");
Instances data = source.getDataSet();
// setting class attribute if the data format does not provide this
//information
// E.g., the XRFF format saves the class attribute information as well
if (data.classIndex() == -1)
data.setClassIndex(data.numAttributes() - 1);
数据库从数据库中读取数据稍微难一点,但是仍然是很简单的,首先,你需要修改你的DatabaseUtils.props(自己看一下原文,基本上都有链接)重组(resemble)你的数据库连接。比如,你想要连接一个MySQL服务器,这个服务器运行于3306端口(默认),MySQL JDBC驱动被称为Connector/J(驱动类是org.gjt.mm.mysql.Driver)。假设存放你数据的数据库是some_database。因为你只是读取数据,你可以用默认用户nobody,不设密码。你需要添加下面两行在你的props文件中:
jdbcDriver=org.gjt.mm.mysql.Driver
jdbcURL=jdbc:mysql://localhost:3306/some_database
其次,你的读取数据的Java代码,应该写成下面这样:
import weka.core.Instances;
import weka.experiment.InstanceQuery;
...
InstanceQuery query = new InstanceQuery();
query.setUsername("nobody");
query.setPassword("");
query.setQuery("select * from whatsoever");
// if your data is sparse, then you can say so too
// query.setSparseData(true);
Instances data = query.retrieveInstances();
注意:
l 别忘了把JDBC驱动加入你的CLASSPATH中
l 如果你要用MS Access,你需要用JDBC-ODBC-bridge,它是JDK的一部分。
如果用sql sever数据库呢?
tomorrow05302011-08-15 20:22:58
WEKA连接MySQL,Oracle,SQLServer
http://hi.baidu.com/doyeah/blog/item/9e2295545bde534cd10906c2.html