数据分析---SVD,特征值和特征向量
来源:互联网 发布:一级计算机考试软件 编辑:程序博客网 时间:2024/05/20 02:28
特征值和特征向量其实是线性代数里面的东西,好久之前学习的,差不多都忘光了,这里还是再复习下,慢慢拣回来。网上其实也有很多各种介绍,从基本的原理到几何解释,理解起来还是要一定的数学功底,不过慢慢理解了就没有那么难了。
这里举个例子来实作一番:
数据文件(input_data.txt)
1 1 1 1 1 1
1 1 1 1 1 1
1 0 0 0 0 1
1 0 1 1 0 1
1 0 1 1 0 1
1 0 1 1 0 1
1 0 1 1 0 1
1 0 1 1 0 1
1 0 1 1 0 1
1 0 1 1 0 1
1 0 1 1 0 1
1 0 1 1 0 1
1 0 1 1 0 1
1 0 1 1 0 1
1 0 1 1 0 1
1 0 0 0 0 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
看得出来,这是一个19*6的矩阵,那些为0的位置一起来看,是不是很像一个0,对了,没错,图片处理里面就是标准的0。
下面通过Java Jama来读取数据,并获得SVD:
import Jama.Matrix;
import Jama.SingularValueDecomposition;
public static List<String> readFromFile(String name) {
List<String> list = new ArrayList<String>();
BufferedReader bufferedreader;
try {
bufferedreader = new BufferedReader(new FileReader(name));
for (String sLine = bufferedreader.readLine(); sLine != null; sLine = bufferedreader.readLine()) {
if (sLine != null && sLine.trim().length() > 0)
list.add(sLine);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
public static void test() {
List<String> list = readFromFile("data/input_data.txt");
double d[][] = new double[19][6];
for (int i = 0; i < list.size(); i++) {
String str[] = list.get(i).split(" ");
for (int j = 0; j < str.length; j++) {
d[i][j] = Double.parseDouble(str[j]);
}
}
Matrix A = new Matrix(d);
System.out.print("A = ");
A.print(9, 6);
SingularValueDecomposition s = A.svd();
System.out.print("U = ");
Matrix U = s.getU();
U.print(9, 6);
System.out.print("Sigma = ");
Matrix S = s.getS();
S.print(9, 6);
System.out.print("V = ");
Matrix V = s.getV();
V.print(9, 6);
System.out.println("rank = " + s.rank());
System.out.println("condition number = " + s.cond());
System.out.println("2-norm = " + s.norm2());
}
输出的结果:
A =
1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
1.000000 0.000000 0.000000 0.000000 0.000000 1.000000
1.000000 0.000000 1.000000 1.000000 0.000000 1.000000
1.000000 0.000000 1.000000 1.000000 0.000000 1.000000
1.000000 0.000000 1.000000 1.000000 0.000000 1.000000
1.000000 0.000000 1.000000 1.000000 0.000000 1.000000
1.000000 0.000000 1.000000 1.000000 0.000000 1.000000
1.000000 0.000000 1.000000 1.000000 0.000000 1.000000
1.000000 0.000000 1.000000 1.000000 0.000000 1.000000
1.000000 0.000000 1.000000 1.000000 0.000000 1.000000
1.000000 0.000000 1.000000 1.000000 0.000000 1.000000
1.000000 0.000000 1.000000 1.000000 0.000000 1.000000
1.000000 0.000000 1.000000 1.000000 0.000000 1.000000
1.000000 0.000000 1.000000 1.000000 0.000000 1.000000
1.000000 0.000000 0.000000 0.000000 0.000000 1.000000
1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
U =
0.264074 0.360582 0.015672 -0.842474 0.297628 0.040678
0.264074 0.360582 0.015672 0.493462 0.738874 -0.102763
0.117205 -0.115724 0.687656 0.055357 0.060708 0.702318
0.228008 -0.164093 -0.066477 -0.000000 0.000000 -0.000000
0.228008 -0.164093 -0.066477 -0.000000 -0.000000 0.000000
0.228008 -0.164093 -0.066477 -0.000000 0.000000 0.000000
0.228008 -0.164093 -0.066477 -0.000000 0.000000 0.000000
0.228008 -0.164093 -0.066477 -0.000000 0.000000 0.000000
0.228008 -0.164093 -0.066477 -0.000000 0.000000 0.000000
0.228008 -0.164093 -0.066477 -0.000000 0.000000 0.000000
0.228008 -0.164093 -0.066477 -0.000000 0.000000 0.000000
0.228008 -0.164093 -0.066477 -0.000000 0.000000 0.000000
0.228008 -0.164093 -0.066477 -0.000000 0.000000 0.000000
0.228008 -0.164093 -0.066477 -0.000000 0.000000 0.000000
0.228008 -0.164093 -0.066477 -0.000000 0.000000 0.000000
0.117205 -0.115724 0.687656 -0.055357 -0.060708 -0.702318
0.264074 0.360582 0.015672 0.116337 -0.345501 0.020695
0.264074 0.360582 0.015672 0.116337 -0.345501 0.020695
0.264074 0.360582 0.015672 0.116337 -0.345501 0.020695
Sigma =
8.556853 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 2.621542 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 1.381226 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
V =
0.501455 -0.151688 0.474904 -0.585392 0.326890 -0.224632
0.154305 0.687729 0.056733 0.394036 0.525037 -0.262814
0.474060 -0.063401 -0.520814 -0.045296 0.342752 0.616822
0.474060 -0.063401 -0.520814 0.045296 -0.342752 -0.616822
0.154305 0.687729 0.056733 -0.394036 -0.525037 0.262814
0.501455 -0.151688 0.474904 0.585392 -0.326890 0.224632
rank = 3
condition number = 3.1414638785269248E17
2-norm = 8.556853007230833
用R来实作一番呢?哈哈,也是很简单的事情:
输入数据,通过R的数据编辑,输入数据
通过svd函数直接计算,结果也是一样的。
通过这个例子,对SVD有了更多的理解,至于SVD的应用场景,也是很容易想到的。
- 数据分析---SVD,特征值和特征向量
- 特征值 特征向量 奇异值分解 SVD
- 矩阵特征值和特征向量
- 特征值和特征向量
- 线性代数:特征值和特征向量
- 看图学特征值和特征向量
- 理解特征值和特征向量
- 特征值和特征向量
- soledede--特征值和特征向量
- 特征值和特征向量
- 特征值和特征向量
- 求解特征值和特征向量
- 特征值和特征向量
- 特征值和特征向量理解
- 特征值和特征向量
- 特征值和特征向量
- 特征值和特征向量
- 特征值和特征向量
- request各个方法,获取各种路径
- HDU 1420 Prepared for New Acmer
- hdu2544 最短路(三种基本最短路算法)
- eclipse导入系统签名
- c#操作xml文件
- 数据分析---SVD,特征值和特征向量
- ./configure,make,make install的作用
- 【百金轻】:心有弱禽怎挡寒风
- VS调试 查看数组所有内容
- 严格模式
- TCP状态知识总结(图解)
- CentOS下以RPM方式安装MySQL5.5
- Github开源项目之APIDOC
- 【HDU】 1180 诡异的楼梯