600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 机器学习笔记 - 特征向量和特征值

机器学习笔记 - 特征向量和特征值

时间:2022-03-29 18:01:08

相关推荐

机器学习笔记 - 特征向量和特征值

一、特征向量和特征值

1、概念简述和应用

(1)概念简述

矩阵的特征向量是矩阵理论上的重要概念之一,它有着广泛的应用。特征值和特征向量是数据科学领域的核心。

它到底有什么用?

简而言之,特征向量和特征值的概念用于确定一组重要变量(以向量的形式)以及沿不同维度(基于方差的关键维度)的尺度,以便以更好的方式分析数据。

一个线性变换通常可以由其特征值和特征向量完全描述。非常概括地说,线性映射的特征值是由变换引起的失真的度量,特征向量告诉您失真的方向。 这对于降维PCA(主成分分析)非常有用。

一个简单的例子是特征向量在变换中不改变方向。

(2)一些应用

想很直观的说明特征向量和特征值的意义,不是很好说明,所以可以看以下应用场景以加强理解。

1、机械工程

特征值和特征向量允许我们“减少”线性运算以分离、更简单的问题。 例如,如果对“塑性”物品施加应力,则可以将变形分解为“主要方向”——变形最大的方向。 主方向的向量就是特征向量,每个主方向的变形百分比就是对应的特征值。

2、石头勘探

石油公司经常使用特征值分析来勘探石油。 油、泥土和其他物质都是会产生具有不同特征值的线性系统,因此特征值分析可以很好地指示石油储量的位置。 石油公司在一个地点周围放置探测器,以接收一辆用于震动地面的巨大卡车产生的波浪。当波穿过地面中的不同物质时,它们会发生变化。对这些波的分析将指引可能的钻探地点。

2、矩阵和线性变换

我们可以将矩阵视为线性变换。当我们将矩阵应用于向量时(计算矩阵与向量的点积),我们最终会得到向量的转换版本。

1、有如下矩阵A和向量v

A = np.array([[-1, 3], [2, -2]])v = np.array([[2], [1]])

2、首先定义一个可视化函数

def plotVectors(vecs, cols, alpha=1):"""Plot set of vectors.Parameters----------vecs : array-likeCoordinates of the vectors to plot. Each vectors is in an array. Forinstance: [[1, 3], [2, 2]] can be used to plot 2 vectors.cols : array-likeColors of the vectors. For instance: ['red', 'blue'] will display thefirst vector in red and the second in blue.alpha : floatOpacity of vectorsReturns:fig : instance of matplotlib.figure.FigureThe figure of the vectors"""plt.figure()plt.axvline(x=0, color='#A9A9A9', zorder=0)plt.axhline(y=0, color='#A9A9A9', zorder=0)for i in range(len(vecs)):x = np.concatenate([[0,0],vecs[i]])plt.quiver([x[0]],[x[1]],[x[2]],[x[3]],angles='xy', scale_units='xy', scale=1, color=cols[i],alpha=alpha)

3、可视化向量v

plotVectors([v.flatten()], cols=['#1190FF'])plt.ylim(-1, 4)plt.xlim(-1, 4)

4、下面就是可视化的向量v

5、计算矩阵和向量点积,并可视化

Av = A.dot(v)print(Av)plotVectors([v.flatten(), Av.flatten()], cols=['#1190FF', '#FF9A13'])plt.ylim(-1, 4)plt.xlim(-1, 4)

6、可以看到原始向量(蓝色)和变换后的向量(黄色)

3、公式

教材上的定义:设A是n阶矩阵,如果数λ和n维非零列向量α使关系式 Aα=λα,成立,那么数λ称为矩阵A的特征值,非零向量α称为A的对应于特征值λ的特征向量。

就是说对于方阵A,以下等式成立。

4、可视化示例1

设有如下矩阵和特征向量

矩阵:

特征向量:

根据公式Av=λv,我们有

然后又λv=

这表示v是A的特征向量。另外,相应的特征值是 λ=6。

python代码及可视化

A = np.array([[5, 1], [3, 3]])v = np.array([[1], [1]])Av = A.dot(v)orange = '#FF9A13'blue = '#1190FF'plotVectors([Av.flatten(), v.flatten()], cols=[blue, orange])plt.ylim(-1, 7)plt.xlim(-1, 7)

矩阵的特征向量不会改变方向

5、可视化示例2

设有如下矩阵和特征向量

矩阵:

特征向量:

根据公式Av=λv,我们有

然后可知λv=

这表示v是A的特征向量。另外,相应的特征值是 λ=2。

python代码及可视化

A = np.array([[5, 1], [3, 3]])v = np.array([[1], [-3]])Av = A.dot(v)orange = '#FF9A13'blue = '#1190FF'plotVectors([Av.flatten(), v.flatten()], cols=[blue, orange])plt.ylim(-1, 7)plt.xlim(-1, 7)

另一个特征向量及其变换

二、如何计算特征值和特征向量?

1、计算特征值

1、已知方程。

2、右侧乘以一个单位矩阵。

3、变换。

4、如果v不为0,根据行列式。

5、带入并求解。

6、即有。

7、计算

8、得到如下方程

9、求解得到两个特征值。

2、计算特征向量

现在我们知道了特征值,让我们找到它们匹配的特征向量。

1、已知方程。

2、带入。

3、相乘后,我们得到这两个等式:

4、变换后可得

5、任何一个方程都表明 y = 4x,所以特征向量是它的任何非零倍数:

6、

7、得到特征向量。

同理可以计算得到-7对应的特征向量。

三、更多示例

1、三维矩阵1

1、设有矩阵

2、首先计算A - λI:

3、得到三次方程方括号内的部分是二次方程。

4、求解根为-1,2,8

5、继续求特征值-1匹配的特征向量

6、得到方程,简化为

7、所以 x = 0,并且 y = -z,所以特征向量是这个的任何非零倍数:

8、同理可求特征值2和8对应的特征向量。

2、三维矩阵2

1、设有矩阵

2、首先计算A - λI:

3、计算行列式可得:

(λ-4)(λ-4)(λ+7) + (-2)(9)(-5) +(5)(-3)(-6) - (5)(λ-4)(-5) - (-2)(-6)(λ+7) - (λ-4)(9)(-3)=0

4、化简可得

5、所以得到特征值

6、继续求特征值1匹配的特征向量

7、求得方程组3x+2y-5z = 0;6x+3y-9z=0; 5x+3y-8z=0;

8、求得特征矩阵

9、同理可求特征值0匹配的特征向量=0

10、求得方程组4x+2y-9z = 0;6x+4y-9z=0; 5x+3y-7z=0;

11、求得特征矩阵

3、三角函数矩阵

1、设有矩阵

2、旋转30度

3、可得矩阵

4、

5、

6、计算行列式

7、

8、求解得

9、继续求特征值匹配的特征向量

10、我们的到两个方程简化可得

11、得到或

四、在Python中查找特征值和特征向量

Numpy 提供了一个返回特征向量和特征值的函数。

A = np.array([[5, 1], [3, 3]])np.linalg.eig(A)

打印结果如下

(array([6., 2.]), array([[ 0.70710678, -0.31622777],[ 0.70710678, 0.9486833 ]]))

结果中的第一个数组是特征值,第二个数组是对应的特征向量。我们可以看到特征值与上两个例子的相同:6 和 2。

当λ=6时,特征向量为

当λ=2时,特征向量为

这里的特征向量跟上面的两个例子里的、不同,因为它们的缩放比例与上面的示例中给出的缩放比例不相同。

对于特征值来说,有无穷多个对应于它的特征向量。

比如对于矩阵来说,特征向量,有如下公式成立,最终特征值还是2。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。