基于STM32单片机智能药盒定时器吃药喂水喂食器无线蓝牙APP设计DIY-T012
2026/7/21 8:09:15
平均值的公式:
平均值 = 所有数之和 ÷ 数的个数Python实现:
数据=[1,3,5,7,9]总和=0forxin数据:总和+=x 平均值=总和/len(数据)print(平均值)# 输出 5.0更简洁的写法:
数据=[1,3,5,7,9]平均值=sum(数据)/len(数据)print(平均值)# 输出 5.0平方的含义:一个数乘以它自己。
x=5平方=x*xprint(平方)# 输出 25为什么模型训练要用平方?
假设真实值是5,模型预测值是3,误差是2。
如果用绝对值:|3 - 5| = 2
如果用平方:(3 - 5)² = (-2)² = 4
平方的好处:
举例对比:
| 误差 | 绝对值 | 平方 |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 2 | 4 |
| 3 | 3 | 9 |
| 10 | 10 | 100 |
可以看到,平方对大误差的惩罚明显更重。
这是所有线性模型的根基。
示例:
def直线方程(x,w,b):"""计算直线上的点"""returnw*x+b# w=2, b=1 时forxinrange(5):y=直线方程(x,2,1)print(f"x={x}, y={y}")输出:
x=0, y=1 x=1, y=3 x=2, y=5 x=3, y=7 x=4, y=9importmatplotlib.pyplotasplt x_values=[0,1,2,3,4,5]# 不同的wplt.figure(figsize=(12,5))plt.subplot(1,2,1)forwin[0.5,1,2,3]:y=[w*xforxinx_values]plt.plot(x_values,y,label=f"w={w}, b=0")plt.xlabel("x")plt.ylabel("y")plt.title("不同w的效果(b=0)")plt.legend()plt.grid(True)# 不同的bplt.subplot(1,2,2)forbin[-2,0,2,4]:y=[1*x+bforxinx_values]plt.plot(x_values,y,label=f"w=1, b={b}")plt.xlabel("x")plt.ylabel("y")plt.title("不同b的效果(w=1)")plt.legend()plt.grid(True)plt.tight_layout()plt.savefig("/tmp/w_b_visualization.png")print("图表已保存到 /tmp/w_b_visualization.png")scores=[85,92,78,95,88]# 方法1:手动计算total=0forsinscores:total+=s avg1=total/len(scores)# 方法2:用sum函数avg2=sum(scores)/len(scores)print(f"平均分:{avg1}")print(f"验证:{avg2}")真实值=[1,3,5,7,9]预测值=[1.5,2.8,5.2,6.9,9.5]# 计算每个预测的误差平方误差平方列表=[]for真实,预测inzip(真实值,预测值):误差=预测-真实 误差平方=误差**2误差平方列表.append(误差平方)print(f"真实={真实}, 预测={预测}, 误差={误差:.2f}, 误差平方={误差平方:.2f}")# 计算均方误差mse=sum(误差平方列表)/len(误差平方列表)print(f"\n均方误差(MSE):{mse:.4f}")# 在纸上或代码中,画出以下三条直线,观察它们的区别# 1. y = 0*x + 1 (水平线)# 2. y = 1*x + 0 (45度斜线)# 3. y = 2*x + 1 (更陡的斜线)forw,bin[(0,1),(1,0),(2,1)]:print(f"\nw={w}, b={b}时:")forxinrange(5):y=w*x+bprint(f" x={x}, y={y}")下节课将学习数据准备:如何组织训练数据、特征与标签的概念。