Archive

Posts Tagged ‘使用’

一段btrace代码

February 21st, 2010 No comments

最近想要优化一下本地cache,不知道数据的使用情况,故写了一个btrace脚本来做分析,也可以顺便熟悉一下强大的btrace
btrace目前已经到了1.0,可以从下面的地址下载:
https://btrace.dev.java.net/files/documents/8510/135506/btrace-bin.tar.gz

以下是今天写的btrace脚本:

import java.util.Map;
 
import com.sun.btrace.BTraceUtils;
import com.sun.btrace.annotations.BTrace;
import com.sun.btrace.annotations.OnEvent;
import com.sun.btrace.annotations.OnMethod;
import com.sun.btrace.annotations.OnTimer;
import com.sun.btrace.annotations.Property;
 
/**
 * @author chua 2010-2-20 16:36:44
 */
@BTrace
public class CacheProbe {
 
    @Property
    private static Map map = BTraceUtils.newHashMap();
 
    @OnMethod(
        clazz = "com.meichua.sample.model.Cache", 
        method = "/getAllAttributes|getAllLocators/"
    )
    public static void visitCategory() {
        if (!BTraceUtils.containsKey(map, "category")) {
            BTraceUtils.put(map, "category", "yes");
        }
    }
 
    @OnMethod(clazz = "com.meichua.sample.model.Cache", method = "/getAreaMap|getAreaTree/")
    public static void visitArea() {
        if (!BTraceUtils.containsKey(map, "area")) {
            BTraceUtils.put(map, "area", "yes");
        }
    }
 
    .
    .
    .
 
    @OnEvent
    public static void onEvent() {
        BTraceUtils.println("BTrace probe will print the used original data:");
        BTraceUtils.printMap(map);
        BTraceUtils.println("BTrace program exits!");
        BTraceUtils.exit();
    } 
 
    @OnTimer(1000*60*5)
    public static void ontimer() {
        BTraceUtils.println("--------------------------------------:");
        BTraceUtils.printMap(map);
    }
 
}

@BTrace 这个annotation表明这个类是个btrace的脚本
@Property 这个annotation标注的field是可以在JMX client中,如jconsole中可以看到
@OnMethod 这个annotation标注要监控的类中的方法,我的例子中,是一个正则表达式,当然还可以是更复杂的正则表达式
@OnEvent 这个annotation表明事件处理时,打印map中的内容,这个事件,可以在运行btrace脚本的控制台中用ctrl+c,再选择2触发
@OnTimer 这个annotation是一个定时器,有定义的时间触发一次执行,打印map内容,时间单位是毫秒

另外: map的创建,操作,打印必须有BTraceUtils的方法创建,在一个事件中,不能调用任何自己写的方法
运行: btrace <pid> CacheProbe.java

Categories: base Tags: , , , , ,

svm及libsvm使用学习

July 23rd, 2009 No comments

1: 工具下载地址
http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm.cgi?+http://www.csie.ntu.edu.tw/~cjlin/libsvm+tar.gz
解压后里面有个java目录,里面是java版的source文件
可以在该java目录下执行make,会在该目录下生成libsvm.jar,而后就可以使用libsvm提供的功能了

java源码的命名方式不符合我们一般的习惯,所以最好自己修改一下类名,方法名,这样我们调用的时候看到的引用也会顺眼些

2: 使用libsvm.jar
2.1: svm_toy这是一个applt程序,简单的分类使用,对页面上不同颜色的点进行划分
java -cp libsvm.jar svm_toy

2.2 svm_train
建立svm的模型,需要事先准备一个数据文件,格式如下:

lable1 index1:featureValue1 index2:featureValue2 index3:featureValue3 ...
lable2 index1:featureValue1 index2:featureValue2 index3:featureValue3 ...
.
lable3 index1:featureValue1 index2:featureValue2 index3:featureValue3 ...
.
lable4 index1:featureValue1 index2:featureValue2 index3:featureValue3 ...

这各格式中,lable是分类的标签,具体是值可以是1,2,3等等,lable的对象类型是double,所以你可以写成1.0,2.0,3.0或者1,1.5,2,3
index值就是featureValue的索引,也就是要计算的矩阵中的列,具体可以写成1,2,3,index的对象类型是integer. 这里index可以跳这些,比如某个featureValue不存在,如:

1 1:0.5 5:2.0 6:0.1

当准备好训练数据文件(假设文件名为train_data.txt)后,执行
java -cp libsvm.jar svm_train train_data.txt svm_model.txt
把计算模型结果输出到svm_model.txt中,以便在predict中使用

2.3 svm_predict使用之前建立的svm model,对数据进行分类处理,事先需要准备predict文件,格式如上,在这里lable是你预先判断的值,会和计算结果做比较,计算出准确率
java -cp libsvm.jar svm_predict predict_data.txt svm_model.txt output.txt

3 更多请查看readme

4 几个概念的参数
在train的时候,我们可以设置参数:
其中-t用来指定核函数类型:

0 – linear: u'*v
1 – polynomial: (gamma*u'*v + coef0)^degree
2 – radial basis function: exp(-gamma*|u-v|^2)
3 – sigmoid: tanh(gamma*u'*v + coef0)

0表示使用线性函数:

K(x, y) = <x, y>

1表示使用d阶多项式函数

K(x, y) = (<x, y> + 1)^d
for d = 2 and 2-dimensional inputs
K(x, y) = 1 + 2*x1*y1 + 2*x2*y2 + 2*x1*y1*x2*y2 + x1^2*y2^2 + x2^2*y2^2
= <f(x),f(x)>
f(x) = (1,√2x1,√2x2,√2x1x2, x1^2*x2^2)^T

2表示使用高斯径向基函数

K(x,y) = exp(- (||x-y||)^2 / d^2 )

3表示使用S型函数

K(x,y) = tanh(<x,y>/d + 1)

-s用来指定SVM的类型(default 0)

0 – C-SVC
1 – nu-SVC
2 – one-class SVM
3 – epsilon-SVR
4 – nu-SVR

0,1分类问题 2分布估算问题 3,4是回归问题

另外更多的参数见readme

5 libsvm的文本分类
我从网上搜集了很多资料,基本上都是英文的,所以看的可能不是很确切. 一般的做法就是在文章中找关键词,可以根据词语的类别特征,词频,在整个文章中占的比例来建立向量,也就是一个特征为一为属性值. 也有像建立2000个词的词典,然后根据词建立固定的index,入文本中出现就在该index的属性值标记,这样的话就是2000维向量.
通常文本分类用于搜索系统,图书馆管理系统等.
5.1 制作demo的分类思路
a:
首先构造一个字典,对里面的词进行分类
b:
构造model,对已经标记类型的文本进行词搜索,找出个类别下词的总个数和出现次数作为index和value.比如在标识为类型1的文本中第一类下的词总共出现9个,一共出现40次,第二类的词总共2个,5次.
那么构造出来的train的数据就是:
1 1:5 2:40 3:2 4:5
这样取得所有文本数据,建立svm model
c:
进行predict,对需要预测目录下的文本,根据svm_model预测类型,向量的提取和构建model中的形式是一致的

Categories: technic Tags: , ,