weka 安装 libsvm

weka 是个强大的开源数据挖据平台。可以实现样本的分类/回归,聚类,关联分析等功能。
但是在使用LIBSVM和liblinear时需要安装两者java版的工具包,不然提示调用到的类不在指定的路径中。
具体方法如下:
1.下载 wlsvm(weka libsvm) .地址:http://www.cs.iastate.edu/~yasser/wlsvm/。下载Java version of LIBLINEAR。地址:http://www.bwaldvogel.de/liblinear-java/
2.解压wlsvm.zip在lib目录下得到 libsvm.jar和wlsvm.jar两个文件,将其拷贝到weka安装目录下。liblinear为liblinear-1.33。
3.修改位于weka安装目录下的RunWeka.ini初始化文件。
(文件如下,已经去除部分注释)
# setups (prefixed with "cmd_")
cmd_default=javaw -Dfile.encoding=#fileEncoding# -Xmx#maxheap# -classpath "#wekajar#;#cp#" #mainclass#
cmd_console=cmd.exe /K start cmd.exe /K "java -Dfile.encoding=#fileEncoding# -Xmx#maxheap# -classpath \"#wekajar#;#cp#\" #mainclass#"
cmd_explorer=javaw -Dfile.encoding=#fileEncoding# -Xmx#maxheap# -classpath "#wekajar#;#cp#" weka.gui.explorer.Explorer

fileEncoding=Cp1252

cp=%CLASSPATH%;

把最后一行改成如下:(视libsvm.jar,liblinear-1.33.jar包的全路径而定,注意一定要写全路径。)
cp=%CLASSPATH%;C:/Program Files/Weka-3-7/libsvm.jar;C:/Program Files/Weka-3-7/liblinear-1.33.jar
4.保存该文件,然后就可以在分类器中调用这两个算法了。
5.如果想在java工程中直接调用,只需要把libsvm.jar wlsvm.jar liblinear-1.33.jar加到weka的工程里就行,相信会用java的人都会弄,就不具体叙述方法了。
在使用Weka设置libsvm格式时,可以通过添加额外的属性来设置qid。具体步骤如下: 1. 在Weka中加载数据文件,选择“Preprocess”选项卡,在“Filters”中选择“AddExpression”过滤器。 2. 在“AddExpression”过滤器的“Expression”文本框中输入以下表达式: ``` qid=<query_id>; <feature_vector> ``` 其中,`<query_id>`为该样本所属的查询ID,可以从数据文件中读取;`<feature_vector>`为文档特征向量,与标准的libsvm格式相同。 3. 在“AddExpression”过滤器的“Options”中选择“Add new attribute”选项,点击“OK”按钮,添加新属性。 4. 将添加的新属性设置为训练样本的类别属性,然后将数据保存为libsvm格式。 例如,以下是一个使用Weka设置libsvm格式,并加入查询ID(qid)的示例代码: ```java import weka.core.Instances; import weka.core.converters.ConverterUtils.DataSource; import weka.filters.Filter; import weka.filters.unsupervised.attribute.AddExpression; import weka.filters.unsupervised.attribute.Remove; import weka.filters.unsupervised.instance.RemoveWithValues; import weka.classifiers.functions.LibSVM; import java.io.*; public class WekaLibsvmWithQid { public static void main(String[] args) throws Exception { // 加载数据文件 DataSource source = new DataSource("data.arff"); Instances data = source.getDataSet(); // 设置过滤器,添加qid属性 AddExpression addExpr = new AddExpression(); addExpr.setExpression("qid=<query_id>; <feature_vector>"); addExpr.setInputFormat(data); Instances newData = Filter.useFilter(data, addExpr); // 设置过滤器,移除原始的类别属性 Remove removeClass = new Remove(); removeClass.setAttributeIndices("" + (data.classIndex() + 1)); removeClass.setInputFormat(newData); Instances finalData = Filter.useFilter(newData, removeClass); // 设置过滤器,移除所有qid不等于1的样本 RemoveWithValues removeQid = new RemoveWithValues(); removeQid.setAttributeIndex("" + (finalData.attribute("qid").index() + 1)); removeQid.setMatchValue("1"); removeQid.setInvertSelection(true); removeQid.setInputFormat(finalData); Instances finalData2 = Filter.useFilter(finalData, removeQid); // 将数据保存为libsvm格式 BufferedWriter writer = new BufferedWriter(new FileWriter("data.libsvm")); for (int i = 0; i < finalData2.numInstances(); i++) { double classValue = finalData2.instance(i).classValue(); int qidValue = (int) finalData2.instance(i).value(finalData2.attribute("qid")); String featureString = finalData2.instance(i).toString(finalData2.attribute("features")); writer.write((int) classValue + " qid:" + qidValue + " " + featureString + "\n"); } writer.close(); // 训练模型 LibSVM svm = new LibSVM(); svm.buildClassifier(finalData2); } } ``` 其中,“data.arff”为原始数据文件,包含类别属性和文档特征向量;“data.libsvm”为保存的libsvm格式文件。在代码中,使用了三个过滤器:AddExpression、Remove和RemoveWithValues,分别用于添加qid属性、移除原始的类别属性和移除所有qid不等于1的样本。最后,将过滤后的数据保存为libsvm格式,并使用LibSVM算法训练模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值