libSVM多类别概率输出问题

在libsvm模型进行预测时predict返回的三个参数分别为: -predicted_label:第一个返回值 nx1,表示样本的预测类标号; -accuracy:第二个返回值,1×1,表示分类的正确率; -prob_estimates:第三个返回值,nxk,每一行表示这个样本分别属于每一个类别的概率。 然而,坑来了。。。。 您的程序中所返回的第三个参数中的概率顺序极有可能并不是按照真实的类别0-(k-1)的类别排序的。 注意,是可能。因为大部分情况是正常的,因而查询了很多也没注意到相关介绍,最后在 [这里] 看到相同情况。 此时,才留意到,其实predict返回的概率结果排序是按照标签的输入顺序依次排序的,因而前面的标签会排在前面。 此时可通过model.Label将标签顺序打印出来,并根据此进行重排序 [label,rOrder] = sort(model.Label); predict_scoresR = predict_scores(:,rOrder); 得到正确的顺序 predict_scoresR.

JAVA基于正则表达式的模糊替换

示例: 输入字符串:黄家驹 alias KaKuiWong(英)Koma(日)、黄伯、黑仔、四眼仔 输出字符串:黄家驹 alias KaKuiWong、Koma、黄伯、黑仔、四眼仔 代码: String inputStr = inputStr.replaceAll(“\\((.)\\)”, “、”); 有时候我们需要对括号内部的长度进行限制,如只有长度在5以内才被判断为后缀信息,若长度很长,则可能是内容信息: 代码: String inputStr = inputStr.replaceAll(“\\((.{0,5})\\)”, “、”);

对HashMap中的Value或Key进行排序

以下函数段功能,对Map结构变量tagStatMap以Value为标准进行排序,然后存放到tagInfoList结构中。 //开始对Tag进行排序    List<Map.Entry<String, Integer>> tagInfoList =            new ArrayList<Map.Entry<String, Integer>>(tagStatMap.entrySet());    Collections.sort(tagInfoList, new Comparator<Map.Entry<String, Integer>>() {           @Override   public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {                  return (o2.getValue() - o1.getValue());             //return (o1.getKey()).toString().compareTo(o2.getKey());        }    });     for (int i = 0; i < tagInfoList.size(); i++) {        String tagStr = tagInfoList.get(i).getKey();        int tagFrq = tagInfoList.get(i).getValue();        tagStaticsWriter.write(tagFrq+“<->”+tagStr+“\n”);                    }  

使用Matlab计算各种距离Distance

计算距离的需求有两种:   一种是给定一个特征集合X,然后计算Pairwise距离矩阵,那么可使用D=pdist(X,distance)的方式;   另一种是给定两个对应的特征集合X和Y,然后计算X与Y对应的距离信息,使用D=pdist2(X,Y,distance)的方式; 需注意,2011版本以前的Matlab是没有pdist2.m文件的,而早期的pdist2.m文件中的距离计算方式也比较少,所以建议使用最新的Matlab版本,很重要。 其中,distance的定义有如下几种: 欧几里德距离Euclidean distance(‘euclidean’) 欧氏距离虽然很有用,但也有明显的缺点。 一:它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求。 二:它没有考虑各变量的数量级(量纲),容易犯大数吃小数的毛病。所以,可以先对原始数据进行规范化处理再进行距离计算。 标准欧几里德距离Standardized Euclidean distance(‘seuclidean’) 相比单纯的欧氏距离,标准欧氏距离能够有效的解决上述缺点。注意,这里的V在许多Matlab函数中是可以自己设定的,不一定非得取标准差,可以依据各变量的重要程度设置不同的值,如knnsearch函数中的Scale属性。 马哈拉诺比斯距离Mahalanobis distance(‘mahalanobis’) where C is the covariance matrix. 马氏距离是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧式距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧式距离,如果协方差矩阵为对角阵,则其也可称为正规化的欧氏距离. 马氏优缺点:   1)马氏距离的计算是建立在总体样本的基础上的,因为C是由总样本计算而来,所以马氏距离的计算是不稳定的;   2)在计算马氏距离过程中,要求总体样本数大于样本的维数。   3)协方差矩阵的逆矩阵可能不存在。 曼哈顿距离(城市区块距离)City block metric(‘cityblock’) Notice that the city block distance is … 继续阅读

找回Eclipse被删除的代码

使用Eclipse开发程序时,有时候会有意或无意删除掉自己本不想要的代码,但随之马上后悔。(或在U盘上直接编写代码,然后U盘损坏掉了的情况) 幸运的是,Eclipse可以短暂缓存一部分代码文件。找回方式如下: 1、选择误删除文件在eclipse所在Package(文件夹) 2、在Package上单击右键。 3、选择restore from local history… 4、在弹出的对话框中选择需要恢复的文件 此时,在右边可以看到缓存的多个版本,下面可以看到对应版本的代码。

利用JAVA计算TFIDF和Cosine相似度-学习版本

写在前面的话,既然是学习版本,那么就不是一个好用的工程实现版本,整套代码全部使用List进行匹配效率可想而知。 【原文转自】:http://computergodzilla.blogspot.com/2013/07/how-to-calculate-tf-idf-of-document.html,修改了其中一些bug。 P.S:如果不是被迫需要语言统一,尽量不要使用此工程计算TF-IDF,计算2W条短文本,Matlab实现仅是几秒之间,此Java工程要计算良久。。半个小时?甚至更久,因此此程序作为一个学习版本,并不适用于工程实现。。工程试验版本 For beginners doing a project in text mining aches them a lot by various term like : TF-IDF COSINE SIMILARITY CLUSTERING DOCUMENT VECTORS In my earlier post I showed you guys what is Cosine Similarity. I will not … 继续阅读