機器學習 求一維線性迴歸
(飛槳AI Studio)
python 程式碼:
# 檢視當前掛載的資料集目錄, 該目錄下的變更重啟環境後會自動還原
# View dataset directory.
# This directory will be recovered automatically after resetting environment.
!ls /home/aistudio/data
# 檢視工作區檔案, 該目錄下的變更將會持久儲存. 請及時清理不必要的檔案, 避免載入過慢.
# View personal work directory.
# All changes under this directory will be kept even after reset.
# Please clean unnecessary files in time to speed up environment loading.
!ls /home/aistudio/work
#匯入所需包
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
#樣本資料(Xi,Yi),需要轉換成陣列(列表)形式
Xi=np.array([162,165,159,173,157,175,161,164,172,158]) #身高資料
Yi=np.array([48,64,53,66,52,68,50,52,64,49])#體重資料
可以推得
#根據最小二乘法的解析解求解最優權值w和b
w=0
b=0
m=len(Xi)
#請補全最小乘法的程式碼
#求w
#遍歷x陣列求x的平均值
sumx=0
for i in range (m):
sumx=sumx+Xi[i]
xba=sumx/m
#分別求w的分子和分母
wz=0
wm=0
x2=0
for i in range (m):
wz=wz+Yi[i]*(Xi[i]-xba)
x2=x2+Xi[i]*Xi[i]
wm=x2-sumx*sumx/m
w=wz/wm
#求解b
for i in range (m):
b=b+(Yi[i]-w*Xi[i])
b=b/m
#輸出求得的w和b的最優解
print("w=",w,"b=",b)
此步執行得:
w= 1.0595238095237538 b= -117.79761904760
#畫樣本點
plt.figure(figsize=(8,6)) ##指定影像比例: 8:6
plt.scatter(Xi,Yi,color="red",label="Sample data",linewidth=2)
#畫擬合直線
x=np.linspace(150,180,80) #在150-180直接畫80個連續點
y=w*x+b ##函式式
plt.plot(x,y,color="blue",label="Fitting Curve",linewidth=2)
plt.legend() #繪製圖例
plt.xlabel('橫軸:身高(釐米)', fontproperties = 'simHei', fontsize = 12)
plt.ylabel('縱軸:體重(公斤)', fontproperties = 'simHei', fontsize = 12)
plt.show()