dx = [28, 26, 28, 27, 27, 20, 26, 22, 23, 19, 26, 23, 25, 21, 20, 18, 24, 19, 24, 25] # 気温
dy = [111, 97, 102, 105, 108, 74, 116, 92, 112, 88, 116, 101, 93, 74, 87, 71, 94, 67, 105, 99] # 販売数
# 假設直線 y = 0
a = 0.0 # 斜率
b = 0.0 # x軸距
# 差的平方和
min_res = 0.0
for i in range(20):
y = a * dx[i] + b
min_res += (dy[i]-y)**2 #差的平方和
print(min_res)
Homework
使用 numpy 改寫:min_res += (dy[i]-y)**2 #差的平方和
目前的 a, b 找出來的直線,誤差夠小嗎?不夠的話該怎麼辦?
利用亂數
學習使用亂數生成 7個數字
import random
for i in range(7):
print(random.random())
利用亂數找出迴歸直線
畫流程圖分析
//
使用亂數,找出 a, b
import random
for i in range(500000):
# 微小的變動量
wa = (random.random() - 0.5) * 0.001
wb = (random.random() - 0.5) * 0.001
# 差的平方和, 目標是要讓誤差最小
res = 0
for j in range(20):
y = (a + wa) * dx[j] + (b + wb)
res += (dy[j] - y)**2
# 更新值
if res < min_res:
min_res = res # 誤差res 比之前小的話, 就更新
a = a + wa # 新的斜率
b = b + wb # 新的距離
print(a, b, min_res)