IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Java机器学习实战——SVD(奇异值分解)完整设计 -> 正文阅读

[人工智能]Java机器学习实战——SVD(奇异值分解)完整设计

一、认识

? ? ? ?奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。是很多机器学习算法的基石

1.1特征值和特征向量

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (注:特征值和特征向量的图来自网络)

?1.2.SVD的相关内容

? ? ? ?不做解释,需要先认识定义,然后做基本的向量运算,还有内容很多啊!

?

?

? 二 、设计java代码

package no.uib.cipr.matrix;

import com.github.fommil.netlib.LAPACK;
import org.netlib.util.intW;

public class SVD
{
  private final double[] work;
  private final int[] iwork;
  private final int m;
  private final int n;
  private final boolean vectors;
  private final JobSVD job;
  private final double[] S;
  private final DenseMatrix U;
  private final DenseMatrix Vt;
  
  public SVD(int m, int n)
  {
    this(m, n, true);
  }
  
  public SVD(int m, int n, boolean vectors)
  {
    this.m = m;
    this.n = n;
    this.vectors = vectors;
    
    this.S = new double[Math.min(m, n)];
    if (vectors)
    {
      this.U = new DenseMatrix(m, m);
      this.Vt = new DenseMatrix(n, n);
    }
    else
    {
      this.U = (this.Vt = null);
    }
    this.job = (vectors ? JobSVD.All : JobSVD.None);
    
    this.iwork = new int[8 * Math.min(m, n)];
    
    double[] worksize = new double[1];
    intW info = new intW(0);
    LAPACK.getInstance().dgesdd(this.job.netlib(), m, n, new double[0], 
      Matrices.ld(m), new double[0], new double[0], Matrices.ld(m), new double[0], 
      Matrices.ld(n), worksize, -1, this.iwork, info);
    
    int lwork = -1;
    if (info.val != 0)
    {
      if (vectors) {
        lwork = 3 * Math.min(m, n) * Math.min(m, n) + Math.max(
          Math.max(m, n), 4 * 
          Math.min(m, n) * Math.min(m, n) + 4 * 
          Math.min(m, n));
      } else {
        lwork = 3 * Math.min(m, n) * Math.min(m, n) + Math.max(
          Math.max(m, n), 5 * 
          Math.min(m, n) * Math.min(m, n) + 4 * 
          Math.min(m, n));
      }
    }
    else {
      lwork = (int)worksize[0];
    }
    lwork = Math.max(lwork, 1);
    this.work = new double[lwork];
  }
  
  public static SVD factorize(Matrix A)
    throws NotConvergedException
  {
    return new SVD(A.numRows(), A.numColumns()).factor(new DenseMatrix(A));
  }
  
  public SVD factor(DenseMatrix A)
    throws NotConvergedException
  {
    if (A.numRows() != this.m) {
      throw new IllegalArgumentException("A.numRows() != m");
    }
    if (A.numColumns() != this.n) {
      throw new IllegalArgumentException("A.numColumns() != n");
    }
    intW info = new intW(0);
    LAPACK.getInstance().dgesdd(this.job.netlib(), this.m, this.n, A.getData(), 
      Matrices.ld(this.m), this.S, this.vectors ? this.U.getData() : new double[0], 
      Matrices.ld(this.m), this.vectors ? this.Vt.getData() : new double[0], 
      Matrices.ld(this.n), this.work, this.work.length, this.iwork, info);
    if (info.val > 0) {
      throw new NotConvergedException(NotConvergedException.Reason.Iterations);
    }
    if (info.val < 0) {
      throw new IllegalArgumentException();
    }
    return this;
  }
  
  public boolean hasSingularVectors()
  {
    return this.U != null;
  }
  
  public DenseMatrix getU()
  {
    return this.U;
  }
  
  public DenseMatrix getVt()
  {
    return this.Vt;
  }
  
  public double[] getS()
  {
    return this.S;
  }
}

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 10:49:09  更:2021-08-02 10:50:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 14:34:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码