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

一、特征向量和特征值

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-like
        Coordinates of the vectors to plot. Each vectors is in an array. For
        instance: [[1, 3], [2, 2]] can be used to plot 2 vectors.
    cols : array-like
        Colors of the vectors. For instance: ['red', 'blue'] will display the
        first vector in red and the second in blue.
    alpha : float
        Opacity of vectors

    Returns:

    fig : instance of matplotlib.figure.Figure
        The 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。

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/124243609
今日推荐