lda(linear discriminant analysis)线性判别分析算法代码

做文本聚类分析,采用了pca等降维效果都不好,于是决定采用有监督的学习算法lda,网络找代码,找到一个看不懂如何降维,于是自己改写,代码如下:

package lda;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.commons.math3.linear.EigenDecomposition;
import org.apache.commons.math3.linear.LUDecomposition;
import org.apache.commons.math3.linear.MatrixUtils;
import org.apache.commons.math3.linear.RealMatrix;
import org.apache.commons.math3.linear.RealVector;

import Jama.Matrix;

public class LDA
{
    private double[][] groupRataTengah;
    private double[][] kovarianGlobal;
    private double[] probabilitas;
    private ArrayList<Integer> groupList = new ArrayList<Integer>();
    static int hasil;
    static double f1, f2, f3;
    private HashMap _map = new HashMap();
    private RealVector[] _top2vec = new RealVector[2];
    public LDA()
    {

    }
    /**
     *
     * @param d 聚类结果数组
     * @param g 聚类的类别标识,和前面的d关系一致
     * @param p
     */
    public LDA(double[][] d, int[] g, boolean p)
    {
 // memeriksa apakah data dan kelompok array mempunyai ukuran yang sama
 if (d.length != g.length)
     return;

 double[][] data = new double[d.length][d[0].length];// panjang data(i)
           // dan fitur(j)
 for (int i = 0; i < d.length; i++)
 {
     for (int j = 0; j < d[i].length; j++)
     {
  data[i][j] = d[i][j];
     }
 }
 int[] group = new int[g.length];
 for (int j = 0; j < g.length; j++)
 {
     group[j] = g[j];
 }

 double[] rataTengah;
 double[][][] kovarian;

 // memisahkan berdasarkan grup atau kelas
 for (int i = 0; i < group.length; i++)
 {
     if (!groupList.contains(group[i]))
     {
  groupList.add(group[i]);
     }
 }

 // membagi data ke dalam subset
 ArrayList<double[]>[] subset = new ArrayList[groupList.size()];
 for (int i = 0; i < subset.length; i++)
 {
     subset[i] = new ArrayList<double[]>();
     for

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值