矩阵特征值

PAT乙级题库“傻瓜”题解之计算谱半径

孤街醉人 提交于 2019-12-04 14:31:14
在数学中,矩阵的“谱半径”是指其特征值的模集合的上确界。换言之,对于给定的 n 个复数空间的特征值 { a ​ 1 ​​ + b ​ 1 ​​ i , ⋯ , a ​ n ​​ + b ​ n ​​ i },它们的模为实部与虚部的平方和的开方,而“谱半径”就是最大模。 现在给定一些复数空间的特征值,请你计算并输出这些特征值的谱半径。 输入格式: 输入第一行给出正整数 N( ≤ 10 000)是输入的特征值的个数。随后 N 行,每行给出 1 个特征值的实部和虚部,其间以空格分隔。注意:题目保证实部和虚部均为绝对值不超过 1000 的整数。 输出格式: 在一行中输出谱半径,四舍五入保留小数点后 2 位。 输入样例: 5 0 1 2 0 -1 0 3 3 0 -3 输出样例: 4.24 1 #include<iostream> 2 #include<cmath> 3 #include<stdio.h> 4 using namespace std; 5 int main() 6 { 7 int n; 8 cin>>n; 9 int numb[n][2]; 10 double max=0; 11 for(int i=0;i<n;i++) 12 { 13 cin>>numb[i][0]>>numb[i][1]; 14 double x=numb[i][0]*numb[i][0]+numb[i]

奇异分解(SVD)理论介绍

萝らか妹 提交于 2019-12-04 04:54:49
一、前言 奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,主要应用如下: 信息检索(LSA:隐性语义索引,LSA:隐性语义分析),分解后的奇异值代表了文章的主题或者概念,信息检索的时候同义词,或者说同一主题下的词会映射为同一主题,这样就可以提高搜索效率 数据压缩:通过奇异值分解,选择能量较大的前N个奇异值来代替所有的数据信息,这样可以降低噪声,节省空间。 推荐系统:主要是降噪,矩阵变换至低维空间(分解后还原的矩阵元素值作为原本缺失值的一种近似),方便计算(目前没有意识到它对推荐精确度的提升有什么具体作用)。 二、奇异值与特征值基础知识: 特征值分解的方法比较简单,有趣的是探究什么样的矩阵可以进行特征值分解以及矩阵进行特征值分解之后展现出的矩阵有意思的性质。特征向量矩阵S 是一个正交矩阵,一般写作 Q,也就是实对称矩阵的特征值分解可以写作: 首先,要明确的是,一个矩阵其实相当于一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的一个矩阵: 这其实是在平面上对一个轴进行的拉伸变换(如蓝色的箭头所示),在图中,蓝色的箭头是一个最主要的变化方向(变化方向可能有不止一个),如果我们想要描述好一个变换,那我们就描述好这个变换主要的变化方向就好了。 特征值分解也有很多的局限

c++使用Eigen库计算矩阵特征值

匿名 (未验证) 提交于 2019-12-03 00:27:02
Eigen 是一个方便使用的c++矩阵运算库,只要包含Eigen的源码头文件,就能使用。 下面的例子是计算矩阵的特征值特征向量,并把特征向量矩阵实部和虚部分开。 #include <iostream> #include <Eigen/Dense> using namespace std ; using namespace Eigen; int main() { Matrix3d A; //定义3*3 double 型矩阵 A << 1 , 2 , 3 , 5 ,- 5 , 3 , 4 , 6 , 9 ; cout << "Here is a matrix, A:" << endl << A << endl << endl; EigenSolver<MatrixXd> es(A); cout << "The eigenvalues of A are:" << endl << es.eigenvalues() << endl; MatrixXcd vect = es.eigenvectors(); //特征向量矩阵 cout << "复数形式输出:" << endl << vect << endl; MatrixXd realvect(vect.rows(), vect.cols()); MatrixXd imagvect(vect.rows(), vect.cols()); cout

对称矩阵的对角化

匿名 (未验证) 提交于 2019-12-03 00:19:01
对称矩阵的一些性质: 1:对称矩阵的特征值为实数 2:设 λ 1 λ 1 和 λ 2 λ 2 是对称矩阵 A A 的两个特征值, p 1 p 1 , p 2 p 2 是对应的特征向量,若 λ 1 ≠ λ 2 λ 1 ≠ λ 2 ,则 p 1 p 1 和 p 2 p 2 正交 定理: 设 A A Ϊ n n 阶对称矩阵,则必有正交矩阵 P P 使得, P 1 A P = P T A P = ∧ P 1 A P = P T A P = ∧ 其中 ∧ ∧ 是以 A A 的 n n 个特征值为对角元的对角矩阵 推论: 设 A A Ϊ n n 阶对称矩阵, λ λ 是 A A 的特征方程的 k k 重根,则矩阵 A λ E A λ E 的秩 R ( A λ E ) = n k R ( A λ E ) = n k ,从而对应的特征值 λ λ 恰好有 k k 个线性无关的特征向量。 文章来源: 对称矩阵的对角化

机器学习_数学基础

独自空忆成欢 提交于 2019-12-01 07:58:54
目录 数学基础知识 高等数学 线性代数 概率论和数理统计 数学基础知识 数据科学需要一定的数学基础,但仅仅做应用的话,如果时间不多,不用学太深,了解基本公式即可,遇到问题再查吧。 以下是以前考研考博时候的数学笔记,难度应该在本科3年级左右。 高等数学 1.导数定义: 导数和微分的概念 $f'({{x} {0}})=\underset{\Delta x\to 0}{\mathop{\lim }},\frac{f({{x} {0}}+\Delta x)-f({{x}_{0}})}{\Delta x}$ (1) 或者: $f'({{x} {0}})=\underset{x\to {{x} {0}}}{\mathop{\lim }},\frac{f(x)-f({{x} {0}})}{x-{{x} {0}}}$ (2) 2.左右导数导数的几何意义和物理意义 函数$f(x)$在$x_0$处的左、右导数分别定义为: 左导数:${{{f}'} {-}}({{x} {0}})=\underset{\Delta x\to {{0}^{-}}}{\mathop{\lim }},\frac{f({{x} {0}}+\Delta x)-f({{x} {0}})}{\Delta x}=\underset{x\to x_{0}^{-}}{\mathop{\lim }},\frac{f(x)-f({{x} {0}

Harris角点检测

帅比萌擦擦* 提交于 2019-11-30 21:22:09
Harris角点检测 1.角点概述 角点是图像很重要的特征,对图像图形的理解和分析有很重要的作用。角点在保留图像图形重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很高, 有效地提高了计算的速度,有利于图像的可靠匹配,使得实时处理成为可能。角点在三维场景重建运动估计,目标跟踪、目标识别、图像配准与匹配等计算机视觉领域起着非常重要的作用 。在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。从图像分析的角度来定义角点可以有以下两种定义: a. 角点可以是两个边缘的角点; b. 角点是邻域内具有两个主方向的特征点; 前者往往需要对图像边缘进行编码,这在很大程度上依赖于图像的分割与边缘提取,具有相当大的难度和计算量,且一旦待检测目标局部发生变化,很可能导致操作的失败。 早期主要有Rosenfeld和Freeman等人的方法,后期有CSS等方法。基于图像灰度的方法通过计算点的曲率及梯度来检测角点, 避免了第一类方法存在的缺陷,此类方法主要有Moravec算子、Forstner算子、Harris算子、SUSAN算子等。本文主要介绍的Harris角点检测的算法原理。 2. Harris角点检测基本原理 人眼对角点的识别通常是在一个局部的小区域或小窗口完成的。 如果在各个方向上移动这个特征的小窗口,窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点。

LDA

北战南征 提交于 2019-11-30 16:17:35
    在 主成分分析(PCA)原理总结 中,我们对降维算法PCA做了总结。这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总结。LDA在模式识别领域(比如人脸识别,舰艇识别等图形图像识别领域)中有非常广泛的应用,因此我们有必要了解下它的算法原理。     在学习LDA之前,有必要将其自然语言处理领域的LDA区别开来,在自然语言处理领域, LDA是隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA),他是一种处理文档的主题模型。我们本文只讨论线性判别分析,因此后面所有的LDA均指线性判别分析。 1. LDA的思想     LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。什么意思呢? 我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。     可能还是有点抽象,我们先看看最简单的情况。假设我们有两类数据 分别为红色和蓝色,如下图所示,这些数据特征是二维的,我们希望将这些数据投影到一维的一条直线,让每一种类别数据的投影点尽可能的接近

【机器学习】PCA

半腔热情 提交于 2019-11-30 13:35:14
目录 PCA 1. PCA最大可分性的思想 2. 基变换(线性变换) 3. 方差 4. 协方差 5. 协方差矩阵 6. 协方差矩阵对角化 7. PCA算法流程 8. PCA算法总结 PCA PCA 就是找出数据最主要的方面,用数据里最主要的方面来代替原始数据。 PCA 是最重要的降维方法之一,在数据压缩、消除冗余和数据噪音消除等领域都有广泛的应用。 1. PCA最大可分性的思想 ​ 最大可分性: 样本点在超平面上的投影尽可能的分开 2. 基变换(线性变换) ​ 欲获得原始数据新的表示空间,最简单方法是对原始数据进行基变换(线性变换)。 3. 方差 ​ 如何选择一个方向或者基才是最优的?基于PCA最大可分思想,我们要找的方向是 降维后损失最小 ,可以理解为 投影后的数据尽可能分得开 ,而分散程度可以用数学上的方差来表示,因为 方差越大数据也就越分散 。 4. 协方差 ​ 在高维变换中,我们希望基变换后选择的各个方向(或者基)是不相关的,这样才能表示更多的信息。数学上使用协方差表示相关性: \[ Cov(a,b) = \frac{1}{m} \sum_{i=1}^{m}a_ib_i \] 如果 \(Cov(a,b)=0\) ,则表示两个字段完全独立,这也是我们的 优化目标 。 5. 协方差矩阵 ​ 我们想达到的 目标( \(Cov(a,b)=0\) ) 与 字段内方差 及 字段间协方差

什么是卷积和池化

China☆狼群 提交于 2019-11-29 02:41:16
在传统的神经网络中,比如多层感知机( MLP ),其输入通常是一个特征向量,需要人工设计特征,然后将这些特征计算的值组成特征向量,在过去几十年的经验来看,人工找到的特征并不是怎么好用,有时多了,有时少了,有时选择的特征根本就不起作用(真正起作用的特征在浩瀚的未知里面)。这就是为什么在过去卷积神经网络一直被 SVM 等完虐的原因。 如果有人说,任何特征都是从图像中提取的,那如果把整副图像作为特征来训练神经网络不就行了,那肯定不会有任何信息丢失!那先不说一幅图像有多少冗余信息,单说着信息量就超级多。。。 假如有一幅 1000*1000 的图像,如果把整幅图像作为向量,则向量的长度为 1000000 ( 10^6 )。在假如隐含层神经元的个数和输入一样,也是 1000000 ;那么,输入层到隐含层的参数数据量有 10^12 ,什么样的机器能训练这样的网络呢。所以,我们还得降低维数,同时得以整幅图像为输入(人类实在找不到好的特征了)。于是,牛逼的卷积来了。接下来看看卷积都干了些啥。 什么叫卷积? 卷积层是用一个固定大小的矩形区去席卷原始数据,将原始数据分成一个个和卷积核大小相同的小块,然后将这些小块和卷积核相乘输出一个卷积值(注意这里是一个单独的值,不再是矩阵了)。 卷积的本质就是用卷积核的参数来提取原始数据的特征,通过矩阵点乘的运算,提取出和卷积核特征一致的值,如果卷积层有多个卷积核

1063 计算谱半径 (20 分)

十年热恋 提交于 2019-11-29 00:26:48
题目: 1063 计算谱半径 (20 分) 在数学中,矩阵的“谱半径”是指其特征值的模集合的上确界。换言之,对于给定的 n 个复数空间的特征值 { , },它们的模为实部与虚部的平方和的开方,而“谱半径”就是最大模。 现在给定一些复数空间的特征值,请你计算并输出这些特征值的谱半径。 输入格式: 输入第一行给出正整数 N( ≤ 10 000)是输入的特征值的个数。随后 N 行,每行给出 1 个特征值的实部和虚部,其间以空格分隔。注意:题目保证实部和虚部均为绝对值不超过 1000 的整数。 输出格式: 在一行中输出谱半径,四舍五入保留小数点后 2 位。 输入样例: 5 0 1 2 0 -1 0 3 3 0 -3 输出样例: 4.24 思路: 简单题,按着题目要求做就行。开根号用sqrt()函数,幂级计算用pow(底数,指数)。 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <cctype> 4 #include <iostream> 5 #include <sstream> 6 #include <cmath> 7 #include <algorithm> 8 #include <string> 9 #include <stack> 10 #include <queue> 11 #include <vector> 12