python中在實現一元線性回歸時會使用最小二乘法,那你知道最小二乘法是什麼嗎。其實最小二乘法為分類回歸演算法的基礎,從求解線性透檢視中的消失點,m元n次函式的擬合,包括後來學到的神經網路,其思想歸根結底全都是最小二乘法。本文向大家介紹python中的最小二乘法。
最小二乘法least square method,做為分類回歸演算法的基礎,有著悠久的歷史(程式設計客棧由馬里勒讓德於2023年提出)。
www.cppcns.com通過最小化誤差的平方和尋找資料的最佳函式匹配。
利用最小二乘法可以簡便地求得未知的資料,並使得這些求得的資料與實際資料之間誤差zpuea的平方和為最小。
最小二乘法還可用於曲線擬合。其他一些優化問題也可通過最小化能量或最大化熵用最小二乘法來表達。
1、已知多條近似交匯於同乙個點的直線,想求解出乙個近似交點:尋找到乙個距離所有直線距離平方和最小的點,該點即最小二乘解;
2、已知多個近似分布於同一直線上的點,想擬合出乙個直線方程:設該直線方程為y=kx+b,調整引數k和b,使得所有點到該直線的距離平方之和最小,設此時滿足要求的k=k0,b=b0,則直線方程為y=k0x+b0。
例項擴充套件:
最小二乘法矩陣
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
def calc_left_k_mat(k):
"""獲得左側k矩陣
:param k:
:return:
"""k_mat =
for i in range(k + 1):
now_line =
for j in range(k + 1):
now_line.append(j + i)
k_mat.append(now_line)
return k_mat
def calc_right_k_mat(k):
"""計算右側矩陣
:param k:
:return:
"""k_mat =
for i in range(k + 1):
k_mat.append([i, i + 1])
return k_mat
def pow_k(x, k):
"""計算x列表中的k次方和
:param x: 點集合的x座標
:param k: k值
:return:
"""sum = 0
for i in x:
sum += i ** k
return sum
def get_left_mat_with_x(k_mat, k):
"""將 左側k矩陣運算得到左側新的矩陣
:param k_mat:
:param k:
:return:
"""left_mat =
for kl in k_mat:
now_data =
for k in kl:
now_data.append(pow_k(x, k))
left_mat.append(now_data)
return left_mat
def get_right_mat_with(right_k_mat):
"""將 右側k矩陣運算得到右側新的矩陣
:param right_k_mat:
:return:
"""right_mat =
for i in range(len(right_k_mat)):
sum = 0
for xl, yl in zip(x, y):
a = (xl ** right_k_mat[i][0]) * (yl ** right_k_mat[i][1])
sum += a
right_mat.append(sum)
return right_mat
def fuse_mat(left, right):
"""融合兩個矩陣
:param left:
:param right:
:return:
"""new_mat =
for i in range(len(left)):
asd =程式設計客棧 np.append(left[i], right[i])
new_mat.append(list(asd))
return new_mat
if __name__ == '__main__':
k = 3
x = [1, 2, 3]
y = [1, 2, 3]
# 計算原始左側k矩陣
left_k_mat = calc_left_k_mat(k)
p程式設計客棧rint("原始左側k矩陣")
print(left_k_mat)
# 計算原始右側k矩陣
right_k_mat = calc_right_k_mat(k)
print("原始右側k矩陣")
print(right_k_mat)
# 計算左側 k 矩陣
new_left_mat = get_left_mat_with_x(k_mat=left_k_mat, k=k)
# 計算右側 k 矩陣
new_right_mat = get_right_mat_with(right_k_mat=right_k_mat)
print("計算後左側k矩陣")
print(new_left_mat)
print("計算後右側側k矩陣")
print(new_right_mat)
print("-----" * 10)
# 融合兩個矩陣 左側 矩陣每一行增加 右側矩陣的對應行
new_all = fuse_mat(new_left_mat, new_right_mat)
print("完整矩陣")
print(new_all)
python最小二乘法擬合圓 最小二乘法擬合圓
有一系列的資料點 我們知道這些資料點近似的落在乙個圓上。依據這些資料預計這個圓的引數就是乙個非常有意義的問題。今天就來講講怎樣來做圓的擬合。圓擬合的方法有非常多種,最小二乘法屬於比較簡單的一種。今天就先將這樣的。我們知道圓方程能夠寫為 x?xc 2 y?yc 2 r2 通常的最小二乘擬合要求距離的平...
python最小二乘法擬合圓 最小二乘法擬合圓
有一系列的資料點 我們知道這些資料點近似的落在乙個圓上。依據這些資料預計這個圓的引數就是乙個非常有意義的問題。今天就來講講怎樣來做圓的擬合。圓擬合的方法有非常多種,最小二乘法屬於比較簡單的一種。今天就先將這樣的。我們知道圓方程能夠寫為 x?xc 2 y?yc 2 r2 通常的最小二乘擬合要求距離的平...
python 最小二乘法 最小二乘法原理和推導過程
對於有誤差的統計值,我們一般都是採用均值作為使用值。但是這種使用均值代替的方式是不是合理?為什麼不用中位數 幾何平均數什麼的?這需要乙個解釋。1.什麼是二乘?對於 一列數字,比如10.1 10.3 9.7 9 9 10.5來說,我們要採用乙個數字y來替代他們。要求是這些數與y的差異要達到最小。在數學...