1维线性回归
机器学习 求一维线性回归
(飞桨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()
![]()