碎碎笔记01

1. 多元线性回归

通过现有数据,总结出数据所对应的线性方程的斜率与截距
f ( x 1 , x 2 , . . . , x n ) = w 1 x 1 + w 2 x 2 + . . . + w n x n + b f(x_1, x_2, ..., x_n) = w_1x_1 + w_2x_2 + ... + w_nx_n + b f(x1,x2,...,xn)=w1x1+w2x2+...+wnxn+b

  • w:斜率
  • b:截距

1.1 基本概念

1.1.1 简单线性回归

算法其实就是公式,简单线性回归属于一个算法,对应公式如下:
y = w x + b y = wx +b y=wx+b

公式中的y是目标变量,即未来要预测的值(因变量),x是影响y的因素(自变量),w,b是公式上的参数,即要求的模型。

如上述:w其实就是斜率,b就是截距

所以,如果模型就出来了,未来影响y的值的因素只有x一个,所以就叫做:简单线性回归

1.1.2 最优解

  • 真实值:一般用y表示;
  • 预测值:把已知的x带入到公式里,与猜测出来的w,b计算得到,一般用 y ^ \hat y y^表示;
  • 误差:预测值与真是值之间的误差,一般用 ε \varepsilon ε表示;
  • 最优解:尽可能找到一个模型,使整体误差最小,整体误差通常用Loss表示。
  • Loss:整体误差,通过损失函数Loss function计算得到。

1.1.3 多元线性回归

现实中,影响结果y的因素通常有多个,这时,x就从一个变成n个, x 1 , x 2 , . . . , x n x_1, x_2, ..., x_n x1,x2,...,xn同事简单线性回归的公式也就不适用了。多元线性回归公式如下:
y ^ = w 1 x 1 + w 2 x 2 + . . . + w n x n + b \hat y= w_1x_1 + w_2x_2 + ... + w_nx_n + b y^=w1x1+w2x2+...+wnxn+b

截距b也可以用 w 0 w_0 w0表示
y ^ = w 1 x 1 + w 2 x 2 + . . . + w n x n + w 0 \hat y= w_1x_1 + w_2x_2 + ... + w_nx_n + w_0 y^=w1x1+w2x2+...+wnxn+w0
y ^ = w 1 x 1 + w 2 x 2 + . . . + w n x n + w 0 ∗ 1 \hat y= w_1x_1 + w_2x_2 + ... + w_nx_n + w_0 * 1 y^=w1x1+w2x2+...+wnxn+w0∗1

使用向量来表示, X X X代表所有变量,使一维向量; W W W表示所有系数(包含 w 0 w_0 w0),是一维向量,根据向量惩罚规律,可以写成如下表示:
y ^ = W T X \hat y = W^T X y^=WTX
A = [ w 1 w 2 . . . w n ] ⋅ [ x 1 , x 2 , . . . , x n ] A = \left[\begin{array}{} w_1\\w_2\\...\\w_n \end{array}\right] \cdot \left[\begin{array}{}x_1,x_2, ..., x_n\end{array}\right] A= w1w2...wn ⋅[x1,x2,...,xn]

1.2 正规方程

1.2.1 最小二乘法公式:

J ( θ ) = 1 2 ∑ i = 1 n ( h θ ( x i ) − y i ) 2 J(\theta) = \frac1 2 \sum_{i=1}^n(h_\theta(x_i) - y_i)^2 J(θ)=21∑i=1n(hθ(xi)−yi)2

把 θ \theta θ换成 W W W更容易理解
J ( W ) = 1 2 ∑ i = 1 n ( h W ( x i ) − y i ) 2 J(W) = \frac1 2 \sum_{i=1}^n(h_W(x_i) - y_i)^2 J(W)=21∑i=1n(hW(xi)−yi)2

  • 公式里的 y i y_i yi是真实值
  • h W ( x i ) h_W(x_i) hW(xi)是预测值,即计算得到的值
  • 相减后平方得到方差
  • 方差求和,得到最小值,计算出W
    那么 h W ( x i ) h_W(x_i) hW(xi)就是方程/算法/模型,就是 y ^ \hat y y^

1.2.2 最小二乘法矩阵表示

最小二乘法 可以讲误差方程转化为有确定解的代数方程(其方程式数目正好等于未知数的个数),从而可以求解出这些未知数。这个有确定姐的代数方程组称为最小二乘法估计的正规方程 ,公式如下:
θ = ( X T X ) − 1 X T y \theta = (X^TX)^{-1}X^Ty θ=(XTX)−1XTy 或者 W = ( X T X ) − 1 X T y W = (X^TX)^{-1}X^Ty W=(XTX)−1XTy,其中 θ , W \theta,W θ,W是方程的解!

1.2.3 推导公式

使用矩阵表示最小二乘法:
J ( w ) = 1 2 ∑ i = 0 n ( h w ( x i ) − y ) ( h w ( x i ) − y ) ⟹ J(w) = \frac 1 2 \sum_{i=0}^n(h_w(x_i) - y)(h_w(x_i) - y) \Longrightarrow J(w)=21∑i=0n(hw(xi)−y)(hw(xi)−y)⟹

J ( w ) = 1 2 ( X w − y ) T ( X w − y ) J(w) = \frac 1 2 (Xw - y)^T(Xw - y) J(w)=21(Xw−y)T(Xw−y)

  • 因为 ( h w ( x i ) − y ) (h_w(x_i) - y) (hw(xi)−y)在第一个式子里,其实是多组数据,因为角标 i i i代表了任意多个 x x x的值。
  • 多组数据可以看成是数组,矩阵
  • 他们独立平方后求和,就可以转换成矩阵运算
  • 因为矩阵内积的结果,也是求和
举例解释上面的内容

假设: ( h w ( x i ) − y ) (h_w(x_i) - y) (hw(xi)−y) 的值分别是: 1 , 2 , 3 1,2,3 1,2,3

用 J ( w ) = 1 2 ∑ i = 0 n ( h w ( x i ) − y ) 2 J(w) = \frac 1 2 \sum_{i=0}^n(h_w(x_i) - y)^2 J(w)=21∑i=0n(hw(xi)−y)2计算得到的结果是:1+4+9

用矩阵表示上述内容: [ 1 2 3 ] \left[\begin{array}{}1\\2\\3\end{array}\right] 123 ,为了得到相同的结果,使用 [ 1 , 2 , 3 ] ⋅ [ 1 2 3 ] \left[\begin{array}{}1,2,3\end{array}\right]\cdot \left[\begin{array}{}1\\2\\3\end{array}\right] [1,2,3]⋅ 123 就能得到1 + 4 + 9

于是就得到了上面的第二个式子 J ( w ) = 1 2 ( X w − y ) T ( X w − y ) J(w) = \frac 1 2 (Xw - y)^T(Xw - y) J(w)=21(Xw−y)T(Xw−y)

多元一次方程举例
  1. 二元一次方程
    { x + y = 14 2 x − y = 10 \begin{cases} x + y = 14\\2x - y = 10 \end{cases} {x+y=142x−y=10

通过线性代数的solve方法求解

  • linalg:线性代数工具包
  • solve(a, b):求解线性矩阵方程或线性标量方程组。
    计算确定的"精确"解"x",即完整解
    秩,线性矩阵方程ax = b
python 复制代码
import numpy as np

X = np.array([[1, 1], [2, -1]])
y = np.array([14, 10])
result = np.linalg.solve(X, y)
print(result)
bash 复制代码
[8. 6.]

得到的结果是x=8,y=6

那么此时的x,y需要看成 w 1 w_1 w1, w 2 w_2 w2 ,

也就得到了方程: f ( x 1 , x 2 ) = 8 x 1 + 6 x 2 f(x_1, x_2) = 8x_1 + 6x_2 f(x1,x2)=8x1+6x2

将上面方程的特征值,也就是方程里未知数x,y的系数[1,1],[2, -1]带入方程,就能够得到 { f ( 1 , 1 ) = 8 + 6 = 14 f ( 2 , − 1 ) = 16 − 6 = 10 \begin{cases}f(1, 1) = 8 + 6 = 14\\ f(2, -1) = 16 - 6 = 10\end{cases} {f(1,1)=8+6=14f(2,−1)=16−6=10

通过正规方程 W = ( X T X ) − 1 X T y W = (X^TX)^{-1}X^Ty W=(XTX)−1XTy也可以求解到方程的解

python 复制代码
import numpy as np

X = np.array([[1, 1], [2, -1]])
y = np.array([14, 10])
# (X^TX)
a = X.T.dot(X)
# (X^TX)^{-1}
at = np.linalg.inv(a)
# (X^TX)^{-1}X^Ty$
result = at.dot(X.T).dot(y)
print(result)
bash 复制代码
[8. 6.]
  1. 三元一次方程
    { x − y + z = 100 2 x + y − z = 80 3 x − 2 y + 6 z = 256 \begin{cases} x - y + z = 100\\ 2x + y - z = 80 \\ 3x - 2y + 6z = 256 \end{cases} ⎩ ⎨ ⎧x−y+z=1002x+y−z=803x−2y+6z=256
    同样先提取出系数矩阵 [ 1 , − 1 , 1 2 , 1 , − 1 3 , − 2 , 6 ] \left[\begin{array}{}1, -1, 1\\ 2, 1, -1\\ 3, -2, 6 \end{array}\right] 1,−1,12,1,−13,−2,6 ,真实值矩阵 [ 100 80 256 ] \left[\begin{array}{}100\\ 80\\ 256 \end{array}\right] 10080256
    代码计算过程省略。。。

[!IMPORTANT]

方程里的x,y,z对应的是特征值的 w 1 , w 2 , w 3 w_1, w_2, w_3 w1,w2,w3

x, y, z的系数,对应的是测试组数据

等号右边的数值,对应的是真实值

1.2.3 八元一次方程举例

{ 14 x 2 + 8 x 3 + 5 x 5 + − 2 x 6 + 9 x 7 + − 3 x s = 339 − 4 x 1 + 10 x 2 + 6 x 3 + 4 x 4 + − 14 x 5 + − 2 x 6 + − 14 x 7 + 8 x s = − 114 − 1 x 1 + − 6 x 2 + 5 x 3 + − 12 x 4 + 3 x 5 + − 3 x 6 + 2 x 7 + − 2 x s = 30 5 x 1 + − 2 x 2 + 3 x 3 + 10 x 4 + 5 x 5 + 11 x 6 + 4 x 7 + − 8 x s = 126 − 15 x 1 + − 15 x 2 + − 8 x 3 + − 15 x 4 + 7 x 5 + − 4 x 6 + − 12 x 7 + 2 x s = − 395 11 x 1 + − 10 x 2 + − 2 x 3 + 4 x 4 + 3 x 5 + − 9 x 6 + − 6 x 7 + 7 x s = − 87 − 14 x 1 + 4 x 3 + − 3 x 4 + 5 x 5 + 10 x 6 + 13 x 7 + 7 x s = 422 − 3 x 1 + − 7 x 2 + − 2 x 3 + − 8 x 4 + − 6 x 6 + − 5 x 7 + − 9 x s = − 309 \begin{cases}14x_2 + 8x_3 + 5x_5 + -2x_6 + 9x_7 + -3x_s = 339\\ -4x_1+10x_2+6x_3 +4x_4 +-14x_5 + -2x_6 +-14x_7 + 8x_s = -114\\ -1x_1 + -6x_2 +5x_3 +-12x_4 + 3x_5 + -3x_6 + 2x_7 + -2x_s = 30\\ 5x_1+-2x_2+3x_3+10x_4 +5x_5 +11x_6+4x_7 +-8x_s = 126\\ -15x_1+-15x_2+-8x_3+-15x_4+7x_5+-4x_6 +-12x_7 + 2x_s =-395\\ 11x_1+-10x_2+-2x_3 + 4x_4 +3x_5 + -9x_6 +-6x_7 + 7x_s = -87\\ -14x_1+ 4x_3+-3x_4 + 5x_5 +10x_6 +13x_7 + 7x_s = 422\\ -3x_1+-7x_2+-2x_3 +-8x_4+-6x_6 +-5x_7 +-9x_s = -309\end{cases} ⎩ ⎨ ⎧14x2+8x3+5x5+−2x6+9x7+−3xs=339−4x1+10x2+6x3+4x4+−14x5+−2x6+−14x7+8xs=−114−1x1+−6x2+5x3+−12x4+3x5+−3x6+2x7+−2xs=305x1+−2x2+3x3+10x4+5x5+11x6+4x7+−8xs=126−15x1+−15x2+−8x3+−15x4+7x5+−4x6+−12x7+2xs=−39511x1+−10x2+−2x3+4x4+3x5+−9x6+−6x7+7xs=−87−14x1+4x3+−3x4+5x5+10x6+13x7+7xs=422−3x1+−7x2+−2x3+−8x4+−6x6+−5x7+−9xs=−309

上面八元一次方程对应的X数据

[ 0 , 14 , 8 , 0 , 5 , − 2 , 9 , − 3 − 4 , 10 , 6 , 4 , − 14 , − 2 , − 14 , 8 − 1 , − 6 , 5 , − 12 , 3 , − 3 , 2 , − 2 5 , − 2 , 3 , 10 , 5 , 11 , 4 , − 8 − 15 , − 15 , − 8 , − 15 , 7 , − 4 , − 12 , 2 11 , − 10 , − 2 , 4 , 3 , − 9 , − 6 , 7 − 14 , 0 , 4 , − 3 , 5 , 10 , 13 , 7 − 3 , − 7 , − 2 , − 8 , 0 , − 6 , − 5 , − 9 ] \left[\begin{array}{} 0, 14, 8, 0 ,5 ,-2, 9 ,-3\\ -4, 10 ,6 ,4 ,-14, -2, -14 ,8\\ -1,-6, 5, -12, 3 ,-3, 2, -2\\ 5 ,-2 ,3 ,10 ,5 ,11 ,4 ,-8\\ -15, -15, -8, -15 ,7, -4, -12 ,2\\ 11, -10, -2 ,4, 3 ,-9 ,-6 ,7\\ -14, 0 ,4, -3 ,5, 10 ,13 ,7\\ -3, -7 ,-2 ,-8, 0, -6, -5 ,-9\end{array}\right] 0,14,8,0,5,−2,9,−3−4,10,6,4,−14,−2,−14,8−1,−6,5,−12,3,−3,2,−25,−2,3,10,5,11,4,−8−15,−15,−8,−15,7,−4,−12,211,−10,−2,4,3,−9,−6,7−14,0,4,−3,5,10,13,7−3,−7,−2,−8,0,−6,−5,−9

#对应的y

[339, -114, 30, 126, -395, -87, 422, -309]

1.2.3.1 使用np的linalg写正规方程解答
python 复制代码
import numpy as np

X = np.array(
    [[0, 14, 8, 0, 5, -2, 9, -3],
     [-4, 10, 6, 4, -14, -2, -14, 8],
     [-1, -6, 5, -12, 3, -3, 2, -2],
     [5, -2, 3, 10, 5, 11, 4, -8],
     [-15, -15, -8, -15, 7, -4, -12, 2],
     [11, -10, -2, 4, 3, -9, -6, 7],
     [-14, 0, 4, -3, 5, 10, 13, 7],
     [-3, -7, -2, -8, 0, -6, -5, -9]])
y = np.array([339, -114, 30, 126, -395, -87, 422, -309])
# (X^TX)
a = X.T.dot(X)
# (X^TX)^{-1}
at = np.linalg.inv(a)
# (X^TX)^{-1}X^Ty$
result = at.dot(X.T).dot(y)
print(result)
bash 复制代码
[ 1.  5. 15.  3.  8.  4. 17. 12.]

得到的结果就是各个特征值的斜率,也就是特征方程的 W W W

方程就是:$f(x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_9, x_8) = $

1.2.3.2 sklearn库使用正规方程
python 复制代码
import numpy as np

# linear:线性,model:算法,模型,
# LinearRegression:线性回归
from sklearn.linear_model import LinearRegression

X = np.array(
    [[0, 14, 8, 0, 5, -2, 9, -3],
     [-4, 10, 6, 4, -14, -2, -14, 8],
     [-1, -6, 5, -12, 3, -3, 2, -2],
     [5, -2, 3, 10, 5, 11, 4, -8],
     [-15, -15, -8, -15, 7, -4, -12, 2],
     [11, -10, -2, 4, 3, -9, -6, 7],
     [-14, 0, 4, -3, 5, 10, 13, 7],
     [-3, -7, -2, -8, 0, -6, -5, -9]])
y = np.array([339, -114, 30, 126, -395, -87, 422, -309])

model = LinearRegression()
# X:训练数据,y:真实值
# fit:训练,拟合,找到X与y之间的规律
model.fit(X, y)
# coef_:方程的解(系数,斜率,W,\theta)
W = model.coef_
print(W)
bash 复制代码
[ 3.45714358  6.90856568 10.8264159   0.44734523  6.86091921  6.24871714
 17.47728367 12.78738885]

很明显,计算得到的结果与linalg 正规方程的结果不一致。

稍安勿躁,将X矩阵的第一行数据带入到结果中计算,观察一下结果。

python 复制代码
3.45714358*0 + 6.90856568*14 + 10.8264159*8 + 0.44734523*0 + 6.86091921*5 + 6.24871714*(-2) + 17.47728367*9 + 12.78738885*(-3)

结果是:324.07179497000004,与真实值339比较接近

继续上面代码

python 复制代码
print('是否计算截距:', model.fit_intercept) # 是否计算截距
print('截距的值:', model.intercept_) # 截距的值

会得到:

是否计算截距: True
截距的值: 14.92820500839805

model.fit(X, y)方法,默认的fit_intercept值是True,

当fit_intercept=True是,不通过正规方程求解

创建模型时,将fit_intercept设置成False,代码底层执行时会按照正规方程解法执行。就可以得到与正规方程相同过的结果

python 复制代码
model = LinearRegression(fit_intercept=False)
[ 1.  5. 15.  3.  8.  4. 17. 12.]
是否计算截距: False
截距的值: 0.0

1.2.4 带截距的线性方程

将上面解方程的结果[ 1. 5. 15. 3. 8. 4. 17. 12.]

凹凸性

一元函数

  • 凸函数:二阶导数>0
    f ( x ) = x 2 f(x) = x^2 f(x)=x2的二阶导数是 2,>0
  • 凹函数:二阶导数<0

驻点,拐点

驻点:增减性的交替点

拐点:凹凸性的交替点

脑补 f ( x ) = s i n x f(x) = sinx f(x)=sinx

在 π/2,π3/4是驻点

在 π位置,是拐点

雅可比矩阵

多元函数的一阶偏导数矩阵
y = f ( x ) y=f(x) y=f(x),其中x是n维向量,表示有n哥未知数,即n个自变量,y是k维的向量,表示函数对应关系计算返回k个因变量

y i = f ( x i ) y_{i}=f(x_{i}) yi=f(xi),其中 x i x_{i} xi和每个 y i y_{i} yi都是相关的,也就是每个 y i y_{i} yi是单独从 x i x_{i} xi映射过来的函数。

函数 f ( x ) f(x) f(x)的雅可比矩阵就是每个 y i y_{i} yi分别对每个 x i x_{i} xi求偏导,然后构成的矩阵叫做雅可比矩阵
[ ∂ y 1 ∂ x 1 ∂ y 1 ∂ x 2 . . . ∂ y 1 ∂ x n ∂ y 2 ∂ x 1 ∂ y 2 ∂ x 2 . . . ∂ y 2 ∂ x n . . . . . . . . . . . . ∂ y k ∂ x 1 ∂ y k ∂ x 2 . . . ∂ y k ∂ x n ] \left[ \begin{array}{cc} \frac{\partial y_{1}}{\partial x_{1}} & \frac{\partial y_{1}}{\partial x_{2}} & ... & \frac{\partial y_{1}}{\partial x_{n}} \\ \frac{\partial y_{2}}{\partial x_{1}} & \frac{\partial y_{2}}{\partial x_{2}} & ... & \frac{\partial y_{2}}{\partial x_{n}} \\ ... & ... & ... & ...\\ \frac{\partial y_{k}}{\partial x_{1}} & \frac{\partial y_{k}}{\partial x_{2}} & ... & \frac{\partial y_{k}}{\partial x_{n}} \end{array} \right] ∂x1∂y1∂x1∂y2...∂x1∂yk∂x2∂y1∂x2∂y2...∂x2∂yk............∂xn∂y1∂xn∂y2...∂xn∂yk

雅可比矩阵示例

{ y 1 y 2 } ⟹ y 1 = x 1 2 + 3 x 1 x 2 + 2 x 3 y 2 = 2 x 2 − 2 x 1 x 2 + x 3 2 ⟹ { x 1 x 2 x 3 } \begin{Bmatrix} y_{1} \\ y_{2} \end{Bmatrix} \Longrightarrow \begin{array}{} y_{1} = x_{1}^2 + 3x_{1}x_{2} + 2x_{3}\\ y_{2} = 2x_{2} - 2x_{1}x_{2} + x_{3}^2\end{array} \Longrightarrow \begin{Bmatrix} x_{1}\\ x_{2}\\ x_{3} \end{Bmatrix} {y1y2}⟹y1=x12+3x1x2+2x3y2=2x2−2x1x2+x32⟹⎩ ⎨ ⎧x1x2x3⎭ ⎬ ⎫

自变量 x 1 , x 2 , x 3 x_{1}, x_{2}, x_{3} x1,x2,x3根据函数 f ( x ) f(x) f(x)映射为因变量 y 1 , y 2 y_{1}, y_{2} y1,y2,那么 y 1 y_{1} y1是 x 1 , x 2 , x 3 x_{1}, x_{2}, x_{3} x1,x2,x3的函数, y 2 y_{2} y2也是 x 1 , x 2 , x 3 x_{1}, x_{2}, x_{3} x1,x2,x3的函数,那么函数 f ( x ) {f(x)} f(x)的雅可比矩阵如下:

6.Hessian矩阵

多元函数的二阶偏导数矩阵,一般是对称矩阵
[ ∂ 2 y 1 ∂ 2 x 1 ∂ 2 y 1 ∂ x 1 x 2 . . . ∂ 2 y 1 ∂ 2 x 1 x n ∂ 2 y 2 ∂ x 2 x 1 ∂ 2 y 2 ∂ 2 x 2 . . . ∂ y 2 ∂ x 2 x n . . . . . . . . . . . . ∂ 2 y k ∂ x n x 1 ∂ 2 y k ∂ x n x 2 . . . ∂ 2 y k ∂ 2 x n ] \left[ \begin{array}{cc} \frac{\partial^2 y_{1}}{\partial^2 x_{1}} & \frac{\partial^2 y_{1}}{\partial x_{1}x_{2}} & ... & \frac{\partial^2 y_{1}}{\partial^2 x_{1}x_{n}} \\ \frac{\partial^2 y_{2}}{\partial x_{2}x_{1}} & \frac{\partial^2 y_{2}}{\partial^2 x_{2}} & ... & \frac{\partial y_{2}}{\partial x_{2}x_{n}} \\ ... & ... & ... & ...\\ \frac{\partial^2 y_{k}}{\partial x_{n}x_{1}} & \frac{\partial^2 y_{k}}{\partial x_{n}x_{2}} & ... & \frac{\partial^2 y_{k}}{\partial^2 x_{n}} \end{array} \right] ∂2x1∂2y1∂x2x1∂2y2...∂xnx1∂2yk∂x1x2∂2y1∂2x2∂2y2...∂xnx2∂2yk............∂2x1xn∂2y1∂x2xn∂y2...∂2xn∂2yk

7.极致判定法则

实对称矩阵正定负定判定

实对称矩阵A正定负定判定条件:

  1. 对于任意向量 v ⃗ ≠ 0 \vec{v} \neq 0 v =0,都有 v ⃗ T A v ⃗ > 0 \vec{v}^TA\vec{v} > 0 v TAv >0,那么A就是正定矩阵;
  2. 对于任意向量 v ⃗ ≠ 0 \vec{v} \neq 0 v =0,都有 v ⃗ T A v ⃗ < 0 \vec{v}^TA\vec{v} < 0 v TAv <0,那么A就是负定矩阵;

实对称矩阵A负定,代码演示:

python 复制代码
import numpy as np

A = np.array([[-2, -3, -1], 
              [-3, -6, -4], 
              [-1, -4, -5]])
v = np.array([3, 5, 6])
print('给定向量任意向量v:', v)
print('求解矩阵A正定判定条件结果是:', v.T.dot(A).dot(v))
bash 复制代码
给定向量任意向量v: [3 5 6]
求解矩阵A正定判定条件结果是: -714

实对称矩阵A正定,代码演示:

python 复制代码
import numpy as np

A = np.array([[5, 1, -4], 
              [1, 3, -2], 
              [-4, -2, 7]])
v = np.array([-5, 2, -3])
print('给定向量任意向量v:', v)
print('求解矩阵A正定判定条件结果是:', v.T.dot(A).dot(v))
bash 复制代码
给定向量任意向量v: [-5  2 -3]
求解矩阵A正定判定条件结果是: 84

根据特征值正负判定矩阵正定与否

  • 对称矩阵A的特征值全部 > 0 \gt0 >0,A是正定矩阵
  • 对称矩阵A的特征值全部 < 0 \lt0 <0,A是负定矩阵
  • 对称矩阵A的特征值有的 > 0 \gt0 >0,有的 < 0 \lt0 <0是不定矩阵
  • 对称矩阵A的特征值有的 ≥ 0 \geq0 ≥0,A是半正定矩阵
  • 对称矩阵A的特征值有的 ≤ 0 \leq0 ≤0,A是半负定矩阵
python 复制代码
import numpy as np

A = np.array([[5, 1, -4], 
              [1, 3, -2], 
              [-4, -2, 7]])
w, v = np.linalg.eig(A)
print('矩阵的特征向量是:', v, '\n特征值是:', w)
bash 复制代码
矩阵的特征向量是: [[-0.58123713 -0.60851363 -0.54025416]
 [-0.27299496 -0.4796241   0.83392714]
 [ 0.76657495 -0.63219608 -0.11265418]] 
特征值是: [10.74515039  1.63251546  2.62233415]

上面代码得出的A的特征值都是正数,所以A是正定矩阵。

那么:什么是特征值呢?特征值eigenvalue与特征向量eigenvector

8. 二次型

相关推荐
cwtlw1 小时前
CSS学习记录20
前端·css·笔记·学习
汇能感知1 小时前
光谱相机的工作原理
经验分享·笔记·科技·相机
紫罗兰盛开1 小时前
分布式调度框架学习笔记
笔记·学习
汇能感知1 小时前
光谱相机在农业中的具体应用案例
经验分享·笔记·科技
地球空间-技术小鱼2 小时前
YUM(Yellowdog Updater, Modified)和DNF(Dandified YUM)简介
linux·运维·服务器·笔记·学习
小码的头发丝、2 小时前
Java进阶学习笔记|面向对象
java·笔记·学习
Purple Coder3 小时前
第6章 图论
笔记
胡西风_foxww4 小时前
【ES6复习笔记】数值扩展(16)
前端·笔记·es6·扩展·数值
Somnus陳5 小时前
软考架构师笔记-计算机系统组成-1
笔记·系统架构
LuH11246 小时前
【论文阅读笔记】IC-Light
论文阅读·笔记