Python----机器学习(线性回归:前向传播和损失函数)

一、前向传播

        前向传播是指在一个机器学习算法中,从输入到输出的信息传递过程,具体 来说,就是在数据输入后,经过一系列的运算后得到结果的过程。

1.1、前向计算

1.2、单点误差

        由上图可知,当w等于0的时候“拟合”这些散点的效果并不好,而在拖动的过程中发现w的值为1的时候与散点的拟合程度相对不错

        从图中可以看出,我们无法通过一条直线将所有的点都囊括进来,于是只能找一条线,让这些点到直线 的距离尽可能的小。点到直线的距离并不用复杂的距离公式来表示,而是通过在x值相同的 情况下,线上x对应的y与点的y值之间的差来表示。

1.3、损失函数:均方差

导入模块

import numpy as np
import matplotlib.pyplot as plt

数据聚集输入

data = np.array(
    [
        [0.8,1.0],
        [1.7,0.9],
        [2.7,2.4],
        [3.2,2.9],
        [3.7,2.8],
        [4.2,3.8],
        [4.2,2.7]
    ])
#将特征和标签(需要拟合的目标)分离
x_data=data[:,0]
y_data=data[:,1]

前向计算

#y=w*x+b
w=0.9
b=0
y_hat=w*x_data+b

单点误差

e=y_data-y_hat
print(e)

 均方误差(损失函数)

e_=(np.mean((y_data-y_hat)**2))
print(e_)

 图像绘制

fig=plt.figure(figsize=(10,5))
ax1=fig.add_subplot(1,2,1)
ax2=fig.add_subplot(1,2,2)
# 装饰坐标轴
ax1.set_xlim(0,5)
ax1.set_xlim(0,6)
ax1.set_xlabel("x axis label")
ax1.set_ylabel("y axis label")
# 绘制数据集散点
ax1.scatter(x_data,y_data,color='b')
# 计算并绘制拟合线
y_lower=w*0+b
y_upper=w*5+b
ax1.plot([0,5],[y_lower,y_upper],color='r',linewidth=3)
# 左侧图点到线的竖直线(距离)
for i,j,k in zip(x_data,y_data,y_hat):
    ax1.plot([i,i],[j,k],color='g',linestyle='-')

# 绘制右侧w和e的曲线
w_values=np.linspace(0,3,100)
e_values=[np.mean(y_data-(w_value*x_data+b))**2 for w_value in w_values]
# 在曲线上绘制w的点
ax2.plot(w_values,e_values,color='g',linestyle='-')
ax2.plot(w,e_,marker='o',color='r')
plt.show()

完整代码

import numpy as np  # 导入 NumPy 库用于数值计算  
import matplotlib.pyplot as plt  # 导入 Matplotlib 库用于数据可视化  

# 1. 数据聚集输入  
data = np.array(  # 定义一个二维 NumPy 数组,包含 x 和 y 的数据点  
    [  
        [0.8, 1.0],  
        [1.7, 0.9],  
        [2.7, 2.4],  
        [3.2, 2.9],  
        [3.7, 2.8],  
        [4.2, 3.8],  
        [4.2, 2.7]  
    ])  
# 将特征和标签(需要拟合的目标)分离  
x_data = data[:, 0]  # 提取 x 数据  
y_data = data[:, 1]  # 提取 y 数据  

# 2. 前向计算  
# y = w * x + b  
w = 0.9  # 初始化权重(斜率)  
b = 0  # 初始化偏置(截距)  
y_hat = w * x_data + b  # 计算预测的 y 值  

# 3. 单点误差  
e = y_data - y_hat  # 计算每个点的误差(真实值与预测值之差)  
print(e)  # 打印误差数组  

# 4. 均方误差(损失函数)  
e_ = np.mean((y_data - y_hat) ** 2)  # 计算均方误差(MSE)  
print(e_)  # 打印均方误差  

# 5. 图像绘制  
fig = plt.figure(figsize=(10, 5))  # 创建一个图形对象,设置图形尺寸  
ax1 = fig.add_subplot(1, 2, 1)  # 左侧子图  
ax2 = fig.add_subplot(1, 2, 2)  # 右侧子图  

# 装饰坐标轴  
ax1.set_xlim(0, 5)  # 设置 x 轴范围  
ax1.set_ylim(0, 6)  # 设置 y 轴范围(注意原语句是设置 x 轴,已更正为 y 轴)  
ax1.set_xlabel("x axis label")  # x 轴标签  
ax1.set_ylabel("y axis label")  # y 轴标签  

# 绘制数据集散点  
ax1.scatter(x_data, y_data, color='b')  # 绘制数据点,蓝色表示  

# 计算并绘制拟合线  
y_lower = w * 0 + b  # 计算拟合线在 x=0 时的 y 值  
y_upper = w * 5 + b  # 计算拟合线在 x=5 时的 y 值  
ax1.plot([0, 5], [y_lower, y_upper], color='r', linewidth=3)  # 绘制拟合线,红色表示  

# 左侧图点到线的竖直线(距离)  
for i, j, k in zip(x_data, y_data, y_hat):  
    ax1.plot([i, i], [j, k], color='g', linestyle='-')  # 绘制每个数据点到拟合线的竖直距离,绿色表示  

# 绘制右侧w和e的曲线  
w_values = np.linspace(0, 3, 100)  # 创建一个从 0 到 3 的权重值数组(100个点)  
e_values = [np.mean(y_data - (w_value * x_data + b)) ** 2 for w_value in w_values]  # 计算每个 w 值对应的均方误差  

# 在曲线上绘制w的点  
ax2.plot(w_values, e_values, color='g', linestyle='-')  # 绘制 w 与均方误差的关系曲线  
ax2.plot(w, e_, marker='o', color='r')  # 在曲线中标记当前 w 值和对应的均方误差,红点表示  

plt.show()  # 展示绘图结果  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值