之前總是先上手一些比較高階的神經網路演算法,cnn,rnn等。可是總覺得有些知識原理總是羈絆著我進一步理解。這才意識到基礎的重要性。所以,就一點一點的從基礎數學最小二乘法開始。這裡用到的就是咱們小學或初中學到的知識。我們也都知道深度學習就是矩陣的各種計算。所以這裡我們將那些知識和大學的線性代數進行簡單結合。
我們先了解向量之間的投影
比如這張圖
已知:這是2維空間,a[3, 1], b[1, 3], 求b到a最短距離的點(也就是b到a的投影p的向量)。
我們可以先用a來表示p:p = a*x = [3, 1].t * x (x 是 a的線性組合的係數,是個變數,就是我們要求的實數)
若使bp距離最短,則使||p - b||^2最小就行,即 使||a*x - b||^2最小。
化解:||a*x - b||^2 = (a*x)^2 - 2ab*x + b^2
對之求導並使之等於0,求最小值x
得:2a^2x - 2ab = 0
即a^2x = ab
因為這是矩陣運算,左成a^2的逆
則寫成x = (a^2)^(-1) * ab
則p = a * x = a * (a^2)^(-1) * ab
**實現
注意區別點乘和叉乘
給定一堆點,求一條線來擬合這些點
比如有n個點(x1, y1), ..., (xn, yn)
我們選取特徵函式 y = ax^2 + bx + c
(特徵函式的選取可以任意函式,根據經驗選取特徵函式,比如也可以是y = ax^2 + bx + csinx + de^2 + f 等 )
那我們就有以下矩陣表示:
**實現:
import numpy as np
from matplotlib import pyplot as plt
x = np.linspace(-1, 1, 100)
y = 2.3*x*x + 3.5*x + 0.04
y_ = y + np.random.rand(len(x)) - 0.5
a =
times = 2
for i in range(times+1):
a = np.array(a).t
b = y_.reshape(y_.shape[0], 1)
w = np.linalg.inv(a.t.dot(a)).dot(a.t).dot(b)
pred_y = a.dot(w)
print(w)
plt.scatter(x, y_)
plt.plot(x, y, 'k-')
plt.plot(x, pred_y, 'r-')
plt.show()
結果係數輸出:
黑線為理想曲線,紅色為擬合曲線。
這樣看,效果還是可以的。
最小二乘法 一
最小二乘法 又稱 最小平方法 是一種數學優化技術。它通過最小化誤差的平方和尋找資料的最佳函式匹配。利用最小二乘法可以簡便地求得未知的資料,並使得這些求得的資料與實際資料之間誤差的平方和為最小。最小二乘法還可用於曲線擬合。其他一些優化問題也可通過最小化能量或最大化熵用最小二乘法來表達。為了更好的理解這...
最小二乘法
include stdafx.h include include const int n 2 const int m 5 int sgn double x void lss double g n 1 int xm,int xn,double x m double p,double w m lss函式...
最小二乘法
在研究兩個變數之間的關係時,可以用回歸分析的方法進行分析。當確定了描述兩個變數之間的回歸模型後,就可以使用最小二乘法估計模型中的引數,進而建立經驗方程.簡單地說,最小二乘的思想就是要使得觀測點和估計點的距離的平方和達到最小.這裡的 二乘 指的是用平方來度量觀測點與估計點的遠近 在古漢語中 平方 稱為...