使用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 … 继续阅读

Java中的格式化输出,Formatter类的介绍

转载原文链接:http://www.itzhai.com/java-notes-java-in-the-formatted-output-formatter-class-presentation.html 我们知道C语言中有printf()这样的格式化函数,类似这样的: printf(“data: [%d %f]\n”, x, y); 1、Java中也提供了类似的格式化方法:System.out.format(); Java SE5引入的format方法可以用于PrintStream或PrintWriter对象(这里不介绍了),其中也包括System.out,下面就是一个使用例子: int x = 1; double y = 3.1415926; System.out.format(“data: [%d %f]\n”, x, y); 得到如下结果: data: [1 3.141593] 2、Formatter类: 在Java中所有新的格式化功能都由java.util.Formatter类处理。可将Formatter看做一个翻译器,将你的字符串翻译成需要的结果。 构造Formatter的时候,需要向其构造器传递一些信息,告诉最终的结果将向哪里输出: public class Message{ private String username; private Formatter f; public … 继续阅读

Bitbucket-团队开发私有库使用指南

使用Git维护代码比较好的是GitHub,但是GitHub的私有库是收费的。那么对于一个小团队前期开发时可以考虑使用Bitbucket免费私有库,默认是5个人,据说邀请好友可以赠送3个人,则是8个人。 Bitbucket 和 Github 一样都是 代码维护管理仓库,可以较好的进行代码管理和协同合作。除众所周知的代码维护外,采用 Bitbucket/Github 进行团队开发的另外两大好处分别是 1:WIKI页面管理,方便大家的讨论知识进行梳理; 2:问题追踪,方便团队开发时进行 问题记录,责任下发,自由讨论,邮件关注,团队投票表决等; 代码的维护统一采用Git工具,其他包括Wiki, 问题追踪等 文本排版建议采用Markdown语法。 【第一步】:开通帐户 Bitbucket(http://bitbucket.org/)支持使用Google帐号授权登录。 【第二步】:添加团队 从页面右上角进入 管理帐号,选择使用的Team,进入ACCESS MANAGEMENT -> User groups 添加用户组,如果是添加多个管理员的话则添加 Administrators,如果是 添加开发者用户的话,则添加Developers,添入他们的邮箱/用户名进行邀请(如果对方已通过邮箱注册了帐户则直接添加进来,如果尚未开通则发送邀请邮件)。 此时进入团队首页就可以看到新添加的成员了。 【第三步】:创建仓库 在团队首页-概览-一栏 创建一个新的仓库:Create your first repo,添入一些基本信息后则创建成功。(其中有一个HipChat整合,由于内地使用不是很多,我们暂且不进行整合) 【第四步】:安装Git Unix系统下可直接使用Git,而Win用户则需要安装可支持插件,Git的安装比较简单,直接参考【Git 安装指南】 【第五步】:初始化本地仓库 写在前面的话:如果是从服务器上拉仓库里的文件下来则使用pull,如果是要从服务器上直接把整个仓库Down下来则使用clone。 安装好Git之后,我们选用命令行操作,打开Git Bash,创建一个文件夹,或者cd转到目标文件夹下。 … 继续阅读

PHP字数统计工具: str_word_count

str_word_count的详细说明见:http://php.net/manual/de/function.str-word-count.php 在线测试可使用: http://str_word_count.onlinephpfunctions.com/ 一些Trick,会发现下划线是会被拆分的,而连字符则不会被拆分。因此,在一些 稿件提交系统中,如果有严格的字数限制,而又舍不得删去一些文字,则可尝试在一些不影响阅读的段落中添加连字符以绕开系统的字数限制。注,Trick适可而止,尽量不要大范围使用连字符,要避免给review一个非常差的印象。

Matlab多个Figure图合成一个Fig

案例:之前跑过的程序 已经生成了多个matlab图,现在需要进行合并到一个图中。 解决方案,利用图像句柄把figure图像中的参数读入到内存中,然后重新subplot绘制。 程序如下: Code   ViewCopyPrint clc;clear;    open(‘./test_1.fig’)    figure_info=findall(gcf,’type’,’line’);     xdata1 = get(figure_info,’xdata’);    ydata1 = get(figure_info,’ydata’);    color1 = get(figure_info,’color’);    subNum1 = length(xdata1);       open(‘./test_2.fig’)    figure_info=findall(gcf,’type’,’line’);     xdata2 = get(figure_info,’xdata’);    ydata2 = get(figure_info,’ydata’);    color2 = get(figure_info,’color’);    subNum2 = length(xdata2);       open(‘./test_3.fig’)    figure_info=findall(gcf,’type’,’line’);     xdata3 = get(figure_info,’xdata’);    ydata3 = get(figure_info,’ydata’); … 继续阅读