Fisher最优分割算法(附带MATLAB程序与java程序)

本文介绍了Fisher最优分割算法,并提供了MATLAB和Java两种编程语言的实现代码示例。
摘要由CSDN通过智能技术生成

matlab程序如下:

function [LP,J]=lp(X)
%  LP对有序样品向量X进行最优分割
%  语法 LP=lp(X)
%  X─从小到大排列的有序数据向量
%  LP─分类损失函数值
%  J─最优分割点

n=length(X);
D=zeros(n,n);
LP=zeros(n,n-1);
J=zeros(n,n-1);
for i=1:n-1
    for j=2:n
        if(i<j)
            sx=0;
            d=0;
            for t=i:j
                sx=sx+X(t);
            end
            meanx=sx/(j-i+1);
            for k=i:j
                d=d+(X(k)-meanx).^2;
            end
            D(j,i)=d;
        end
    end
end
for k=2:n-1
    for p=3:n
        if(k<p)
            min=9999;
            minj=0;
            if(k==2)
                for j=2:p
                    temp=D(j-1,1)+D(p,j);
                    if(temp<min)
                        min=temp;
                        minj=j;
                    end
                end
            else
                for j=k:p
                    temp=LP(j-1,k-1)+D(p,j);
                    if(temp<min)
                        min=temp;
                        minj=j;
                    end
                end
            end
            LP(p,k)=min;
            J(p,k)=minj;
        end
    end
end
LP=LP(end,:);
J = unique([unique(J(:,2))',unique(J(end,:))]);

java程序如下:

 /**
     * fisher最优分割算法
     *
     * @param pair 样本对
     * @return 聚类结果
     */
    private static List<List<String>> fisher(Map<String, Double> pair) {
   
        //1、对样本序列排序
        List<Double> collect = pair.values().stream().sorted().collect(Collectors.toList());
        //2、fisher最优分割,获取最优分割点
        Set<Integer> fisher = fisher(collect);
        ArrayList<List<String>> category = new ArrayList<>();
        //3、拿到最优分割点,遍历拿到所有的聚类
        List<Integer> collect2 = new ArrayList<>(fisher);
        for (int i = 0; i < fisher.size() 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值