最小二乘法求線性回歸的python實現


原文:
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/qq_38003892/article/details/84495172

1 核心思想
通過最小化方差,使得擬合結果無限接近目標結果。

2 通過一元線性方程舉例說明

3 通過python實現一元線性擬合

import matplotlib.pyplot as plt
import random

# 用於存儲x,y擬合數據
x = []
y = []
# 數據個數
n = 10
# 隨機生成x,y
for i in range(n):
    x.append(random.randint(0, 9))
    y.append(random.randint(0, 9))
print(x, y)
# 根據推到出來的公式計算k,b
sum_xy = 0
sum_x = 0
sum_y = 0
sum_xx = 0
for i in range(n):
    sum_xy += x[i] * y[i]
    sum_x += x[i]
    sum_y += y[i]
    sum_xx += x[i] ** 2
print(sum_xy, sum_x, sum_y, sum_xx)
k = (n * sum_xy - sum_x * sum_y) / (n * sum_xx - sum_x ** 2)
b = sum_y / n - k * sum_x / n
print(k, b)
# 根據x計算擬合的y值
new_y = []
for i in range(n):
    new_y.append(k * x[i] + b)
# 畫出原始數據點以及擬合好的直線
plt.title("Least squares")
plt.xlim(right=10, left=0)
plt.ylim(top=10, bottom=0)
plt.xlabel("x")
plt.ylabel("y")
plt.plot(x, new_y, color='black')
plt.scatter(x, y, color='red')
plt.show()

運行結果(因為數據時隨機生成的每次代碼運行結果都會不同)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM