python中在實(shí)現(xiàn)一元線性回歸時(shí)會(huì)使用最小二乘法,那你知道最小二乘法是什么嗎。其實(shí)最小二乘法為分類回歸算法的基礎(chǔ),從求解線性透視圖中的消失點(diǎn),m元n次函數(shù)的擬合,包括后來(lái)學(xué)到的神經(jīng)網(wǎng)絡(luò),其思想歸根結(jié)底全都是最小二乘法。本文向大家介紹python中的最小二乘法。
一、最小二乘法是什么
最小二乘法Least Square Method,做為分類回歸算法的基礎(chǔ),有著悠久的歷史(由馬里·勒讓德于1806年提出)。
二、最小二乘法實(shí)現(xiàn)原理
通過(guò)最小化誤差的平方和尋找數(shù)據(jù)的最佳函數(shù)匹配。
三、最小二乘法功能
利用最小二乘法可以簡(jiǎn)便地求得未知的數(shù)據(jù),并使得這些求得的數(shù)據(jù)與實(shí)際數(shù)據(jù)之間誤差的平方和為最小。
最小二乘法還可用于曲線擬合。其他一些優(yōu)化問(wèn)題也可通過(guò)最小化能量或最大化熵用最小二乘法來(lái)表達(dá)。
四、最小二乘法兩種視角描述:“多線→一點(diǎn)”視角與“多點(diǎn)→一線”視角
1、已知多條近似交匯于同一個(gè)點(diǎn)的直線,想求解出一個(gè)近似交點(diǎn):尋找到一個(gè)距離所有直線距離平方和最小的點(diǎn),該點(diǎn)即最小二乘解;
2、已知多個(gè)近似分布于同一直線上的點(diǎn),想擬合出一個(gè)直線方程:設(shè)該直線方程為y=kx+b,調(diào)整參數(shù)k和b,使得所有點(diǎn)到該直線的距離平方之和最小,設(shè)此時(shí)滿足要求的k=k0,b=b0,則直線方程為y=k0x+b0。
實(shí)例擴(kuò)展:
最小二乘法矩陣
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
def calc_left_k_mat(k):
"""
獲得左側(cè)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):
"""
計(jì)算右側(cè)矩陣
: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):
"""
計(jì)算x列表中的k次方和
:param x: 點(diǎn)集合的x坐標(biāo)
:param k: k值
:return:
"""
sum = 0
for i in x:
sum += i ** k
return sum
def get_left_mat_with_x(k_mat, k):
"""
將 左側(cè)k矩陣運(yùn)算得到左側(cè)新的矩陣
: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):
"""
將 右側(cè)k矩陣運(yùn)算得到右側(cè)新的矩陣
: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):
"""
融合兩個(gè)矩陣
: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]
# 計(jì)算原始左側(cè)K矩陣
left_k_mat = calc_left_k_mat(k)
print("原始左側(cè)K矩陣")
print(left_k_mat)
# 計(jì)算原始右側(cè)K矩陣
right_k_mat = calc_right_k_mat(k)
print("原始右側(cè)k矩陣")
print(right_k_mat)
# 計(jì)算左側(cè) k 矩陣
new_left_mat = get_left_mat_with_x(k_mat=left_k_mat, k=k)
# 計(jì)算右側(cè) k 矩陣
new_right_mat = get_right_mat_with(right_k_mat=right_k_mat)
print("計(jì)算后左側(cè)K矩陣")
print(new_left_mat)
print("計(jì)算后右側(cè)側(cè)K矩陣")
print(new_right_mat)
print("-----" * 10)
# 融合兩個(gè)矩陣 左側(cè) 矩陣每一行增加 右側(cè)矩陣的對(duì)應(yīng)行
new_all = fuse_mat(new_left_mat, new_right_mat)
print("完整矩陣")
print(new_all)
到此這篇關(guān)于python中最小二乘法詳細(xì)講解的文章就介紹到這了,更多相關(guān)python中最小二乘法如何理解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Python實(shí)現(xiàn)曲線擬合的最小二乘法
- 最小二乘法及其python實(shí)現(xiàn)詳解
- python實(shí)現(xiàn)最小二乘法線性擬合
- Python最小二乘法矩陣
- Python 普通最小二乘法(OLS)進(jìn)行多項(xiàng)式擬合的方法
- Python基于最小二乘法實(shí)現(xiàn)曲線擬合示例
- Python中實(shí)現(xiàn)最小二乘法思路及實(shí)現(xiàn)代碼
- python中matplotlib實(shí)現(xiàn)最小二乘法擬合的過(guò)程詳解
- 利用Python實(shí)現(xiàn)最小二乘法與梯度下降算法