求矩阵的秩

,已知r(A)=2,则参数x,y分别是

解:任意三阶子式=0,有二阶子式≠0,但是这些子式比较多,可以使用初等变换,因为初等变换不改变矩阵的秩,可以将矩阵通过初等行(列)变换,化为行阶梯矩阵,有几行不等于0,秩就是几。

行列式的转换

                              

  • Am×nx=0只有零解 <=> r(A)=n

    •   特别地,A是n×n时,则Am×nx=0只有零解 <=> |A|≠0
  • Am×nx=0有非零解 <=> r(A)<n
    •   特别地,A是n×n时,则Am×nx=0有非零解 <=> |A|=0
    •   若m<n(方程少未知数多),则Am×nx=0有非零解
  • 若Am×nx=0有非零解 ,则其线性无关的解有n-r(A)个
  • 若ξ1,ξ2,...,ξt 都是Ax=0的解,则k1ξ1+k2ξ2+...+ktξt仍是Ax=0的解
  • Ax=0的基础解系(能够用它的线性组合表示出该方程组的任意一组解)
  • ①ξ1,ξ2,...,ξt 是Ax=0的解;
  • ②ξ1,ξ2,...,ξt 线性无关;
  • ③ξ1,ξ2,...,ξt 可以表示Ax=0的任一解。或者证明出①②后,再证出t=n-r(A)
  • 则称ξ1,ξ2,...,ξt 是Ax=0的基础解系

特征值和特征向量的求法:

特征值和特征向量的定义如下:

其中A是一个n×n的矩阵,x 是一个n维向量,则我们说λ是矩阵A的一个特征值,而 x 是矩阵A的特征值λ所对应的特征向量。
如果我们求出了矩阵A的n个特征值λ1≤λ2≤...≤λn,以及这n个特征值所对应的特征向量{w1,w2,...wn},如果这n个特征向量线性无关,那么矩阵A就可以用下式的特征分解表示:

其中W是这n个特征向量所张成的n×n维矩阵,并对n个特征向量标准化,而Σ为这n个特征值为主对角线的n×n维矩阵。若A为实对称矩阵,另有

同时W的n个特征向量为标准正交基,注意到要进行特征分解,矩阵A必须为方阵。

类似于这样的分解:

奇异值分解

奇异值分解是一种矩阵因子分解方法,是线性代数概念,但在统计学习中被广泛使用,成为其重要工具。
应用:主成分分析、潜在语义分析
任意一个m×n的,都可以表示为三个矩阵的乘积(因子分解)形式,分别是m阶正交矩阵、由降序排列的非负对角线元素组成的m×n矩形对角矩阵和n阶正交矩阵,称为该矩阵的奇异值分解。
矩阵的奇异值分解一定存在,但不唯一。奇异值分解可以看做矩阵数据压缩的一种方法。

矩阵的奇异值分解是指,将一个非零的m×n实矩阵A,A∈Rm×n,表示为以下三个实矩阵乘积形式的运算,即进行矩阵的因子分解:

其中U是m阶正交矩阵,V是n阶正交矩阵,Σ是由降序排列的非负的对角元素组成的m×n矩形对角矩阵,满足:

UΣVT 称为矩阵A的奇异值分解,σi 称为矩阵A的奇异值,U的列向量称为左奇异向量,V的列向量称为右奇异向量。

注意奇异值分解不要求矩阵A是方阵

奇异值分解实例

给定一个5×4的矩阵

它的奇异值分解由三个矩阵的乘积UΣVT 给出,矩阵U,Σ,VT 分别为

矩阵Σ是对角矩阵,对角线外的元素都是0,对角线上的元素非负,按降序排列。矩阵U和矩阵V是正交矩阵,它们与各自的转置矩阵相乘是单位矩阵,即

矩阵的奇异值分解不是唯一的。在此例中如果选择U为

而Σ和V不变,那么UΣVT 也是A的一个奇异值分解

SVD也是对矩阵进行分解,但是和特征分解不同,SVD并不要求要分解的矩阵为方阵。假设我们的矩阵A是一个m×n的矩阵,那么我们定义矩阵A的SVD为:

其中U是一个m×m的矩阵,Σ是一个m×n的矩阵,除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值,V是一个n×n的矩阵。下图可以很形象的看出上面SVD的定义:

下面是使用特征值分解实现的PCA算法:

# 将数据转换到上述K个特征向量构建的新空间中
import numpy as np def PCA(X, k):
m_samples, n_features = X.shape
# 减去平均数
mean = np.array([np.mean(X[:, i]) for i in range(n_features)])
normX = X - mean
# 计算协方差矩阵
scatter_matrix = np.dot(np.transpose(normX), normX)
# 计算协方差矩阵的特征值和特征向量
eig_val, eig_vec = np.linalg.eig(scatter_matrix)
# 将特征值和特征向量组成一个元组
eig_pairs = [(np.abs(eig_val[i]), eig_vec[:, i]) for i in range(n_features)]
# 将特征值和特征向量从大到小排序
# 默认为升序,reverse = True降序
eig_pairs.sort(reverse=True)
# #保留最大的K个特征向量
ft = []
for i in range(k):
ft.append(list(eig_pairs[i][1]))
data = np.dot(normX, np.array(ft).T)
return data from sklearn.datasets import load_iris
iris = load_iris()
features = iris.data
labels = iris.target
features = PCA(features,k=2)
import matplotlib.pyplot as plt
plt.scatter(features[:,0],features[:,1],c=labels,cmap=plt.cm.RdYlBu)
plt.show()

通过SVD实现PCA分解:

import numpy as np
# 实现PCA对鸢尾花数据进行降维 def PCA(data, k=2):
data = data - np.mean(data)
cov = np.cov(data.T)
u, s, v = np.linalg.svd(cov)
u_reduce = u[:, :k] # 取前k个特征向量
v_reduce = v[:k,:]
# 这两种算法都可以对数据进行降维
Z = np.dot(data,u_reduce)
ZZ = np.dot(data,v_reduce.T)
return Z
from sklearn.datasets import load_iris
iris = load_iris()
features = iris.data
labels = iris.target
print(features.shape)
features = PCA(features,k=2)
print(features.shape)
import matplotlib.pyplot as plt
plt.scatter(features[:,0],features[:,1],c=labels,cmap=plt.cm.RdYlBu)
plt.show()

机器学习-特征值,svd分解的更多相关文章

  1. 机器学习之SVD分解

    一.SVD奇异值分解的定义 假设是一个的矩阵,如果存在一个分解: 其中为的酉矩阵,为的半正定对角矩阵,为的共轭转置矩阵,且为的酉矩阵.这样的分解称为的奇异值分解,对角线上的元素称为奇异值,称为左奇异矩 ...

  2. 机器学习Python实现 SVD 分解

    这篇文章主要是结合机器学习实战将推荐算法和SVD进行对应的结合 不论什么一个矩阵都能够分解为SVD的形式 事实上SVD意义就是利用特征空间的转换进行数据的映射,后面将专门介绍SVD的基础概念.先给出p ...

  3. 机器学习中的矩阵方法04:SVD 分解

    前面我们讲了 QR 分解有一些优良的特性,但是 QR 分解仅仅是对矩阵的行进行操作(左乘一个酉矩阵),可以得到列空间.这一小节的 SVD 分解则是将行与列同等看待,既左乘酉矩阵,又右乘酉矩阵,可以得出 ...

  4. 【机器学习】推荐系统、SVD分解降维

    推荐系统: 1.基于内容的实现:KNN等 2.基于协同滤波(CF)实现:SVD → pLSA(从LSA发展而来,由SVD实现).LDA.GDBT SVD算是比较老的方法,后期演进的主题模型主要是pLS ...

  5. SVD分解技术详解

    版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...

  6. 【线性代数】6-7:SVD分解(Singular Value Decomposition-SVD)

    title: [线性代数]6-7:SVD分解(Singular Value Decomposition-SVD) categories: Mathematic Linear Algebra keywo ...

  7. 简单易学的机器学习算法—SVD奇异值分解

    简单易学的机器学习算法-SVD奇异值分解 一.SVD奇异值分解的定义     假设M是一个的矩阵,如果存在一个分解: 其中的酉矩阵,的半正定对角矩阵,的共轭转置矩阵,且为的酉矩阵.这样的分解称为M的奇 ...

  8. SVD分解的理解[转载]

    http://www.bfcat.com/index.php/2012/03/svd-tutorial/ SVD分解(奇异值分解),本应是本科生就掌握的方法,然而却经常被忽视.实际上,SVD分解不但很 ...

  9. SVD分解技术数学解释

    SVD分解 SVD分解是LSA的数学基础,本文是我的LSA学习笔记的一部分,之所以单独拿出来,是因为SVD可以说是LSA的基础,要理解LSA必须了解SVD,因此将LSA笔记的SVD一节单独作为一篇文章 ...

随机推荐

  1. 访问类的私有属性(RTTI和模仿类2种方法)

    如何访问类的私有属性? 下面以 TPathData 为例,它有一个私有属性 PathData,储存了每一个曲线点,但一般无法修改它,需要利用下面方法,才能访问修改(若有更好的方法,歡迎分享): 一.利 ...

  2. shell多线程之进程间通信

    # 这是一个简单的并发程序,有如下要求: # .有两个程序a和b,希望他们能并发执行,以节约时间 # .a和b都是按照日期顺序执行,但b每日程序的前提条件是当日a的程序已经执行完毕 #解决方案: # ...

  3. js与原生进行交互

    由于最近做的项目我作为web前端要和原生开发者合作,所以就去踩了踩坑. 这个功能是在h5页面上点击按钮关闭当前页面. function click_fn() { var u = navigator.u ...

  4. (Demo分享)利用原生JavaScript-ScrollLeft-实现做轮播广告通知

    轮播广告通知整体思路: 1.首先文字的移动利用了JAVA script 中ScrollLeft的知识点: 2.在设置一条一模一样的新闻,利用无缝轮播图滚动的原理让新闻无缝滚动. 3.使用了自执行匿名函 ...

  5. PowerDesigner16.5 有用地址

    http://blog.csdn.net/keenweiwei/article/details/32720427

  6. Spring Framework 条件装配 之 @Conditional

    Spring Framework 条件装配 之 @Conditional 前言 了解SpringBoot的小伙伴对Conditional注解一定不会陌生,在SpringBoot项目中,Conditio ...

  7. HDU 5616:Jam's balance(背包DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=5616 题意:有n个物品,每个重量为w[i],有一个天平,你可以把物品放在天平的左边或者右边,接下来m个询问,问是 ...

  8. NEST 6.X升级到7.X

    升级比对可访问 NEST 6.X升级到7.X 查看 ElasticClient-CreateIndex 升级前代码,NEST版本6.6.0 ICreateIndexResponse response ...

  9. concat的应用

    今天遇到一个问题,有一张车辆信息表,一张车辆品牌表,他们之间的品牌进行关联, 但是车辆信息表中品牌的名称较长,而品牌表名称较短.例如:车辆表:东风标致:品牌表:标致. 为了达到两种表的“模糊关联”. ...

  10. C++11/14笔记

    目录 语言层面 模板表达式中的空格 nullptr和std::nullptr_t 自动推导类型----auto 一致性初始化----Uniform Initialization 初始化列表(initi ...