如何实现恰当的拟合

本文探讨了神经网络中隐藏层数量与神经元数量的选择问题。通过对比不同规模网络的表现,文章指出更大的网络可以通过正则化等手段有效避免过拟合,并提供了如L2正则化等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、选择合适的隐藏层数目

首先我们需要注意到当我们增加层数和神经元数目的时候,神经网络的性能也会有所提升。因为神经元可以协同作用表达出不同的函数来对数据进行表示。比如说假设我们在二维空间中有一个二值的分类问题,我们可以训练3个不同的神经网络,每个神经网络都包含一个隐含层,但是隐含层中包含的神经元数目不一样,我们来看一下分类器的分类效果: 


在上图中,我们看到包含更多神经元的神经网络能够表达更加复杂的函数。但是这既好又不好,好是因为可以对更复杂的数据进行分类,不好是因为它容易对训练数据过拟合(overfitting)。比如说隐层包含20个神经元的那个图,它虽然把所有的数据都分对了但是把整个平面分成了红绿相间、相互脱节的小区域,看上去很不平滑;而3个神经元的图,它能够从大方向上去分类数据,而把一些被绿色点包围的红色点看成是异常值、噪声(outliers)。实际中这能够使得模型在测试数据上有更好的泛化能力。 

基于上述讨论,貌似当数据不太复杂的时候,我们可以选用小一点的神经网络来预防overfitting?不不不,这是不对滴,我们可以选择其他更好的方法来避免过拟合(比如L2正则化,dropout,增加噪声等,我们后面再讨论)。实际中用这些方法避免过拟合比减少神经元的个数要更好。比如说我们可以看看不同的正则强度是如何控制20个隐含神经元的过拟合的: 


总的来说就是你不能因为害怕过拟合就使用小一点的神经网络,相反如果你的计算机性能允许,你应该用大的神经网络,然后通过一些正则的方法来控制overfitting.

参考文献:

1.https://blog.youkuaiyun.com/u014365862/article/details/52710698

### Python 曲线拟合方法 #### 使用 `numpy.polyfit` 进行多项式拟合 对于简单的多项式拟合,可以使用 NumPy 提供的 `polyfit` 函数。该函数通过最小二乘法来寻找最佳拟合系数。 ```python import numpy as np import matplotlib.pyplot as plt # 原始数据点 x = np.array([0, 1, 2, 3, 4]) y = np.array([1, 3, 2, 5, 8]) # 执行二次多项式拟合 coefficients = np.polyfit(x, y, deg=2) # 构建用于绘图的新 x 轴坐标 x_new = np.linspace(min(x), max(x), num=len(x)*10) # 计算对应的 y 值 y_new = np.polyval(coefficients, x_new) plt.scatter(x, y, label="原始数据", color='blue') plt.plot(x_new, y_new, label=f"{int(coefficients[0])}x² + {int(coefficients[1])}x + {int(coefficients[2])}", color='red') plt.legend() plt.show() ``` 此代码片段展示了如何利用 `np.polyfit()` 对给定的数据集执行二次项拟合并绘制结果图表[^1]。 #### 使用 `scipy.optimize.curve_fit` 自定义模型拟合 当需要更复杂的非线性关系时,则可借助 SciPy 的 `curve_fit` 功能来进行参数估计。下面是一个关于高斯分布的例子: ```python from scipy.optimize import curve_fit import math def gaussian(x, a, b, c): """ 高斯函数 """ return a * np.exp(-(x-b)**2 / (2*c**2)) # 测试用的数据点 test_x = np.linspace(-10, 10, 100) test_y = gaussian(test_x, 2.5, 1., 1.) + np.random.normal(size=test_x.size)/10. popt, pcov = curve_fit(gaussian, test_x, test_y) print(f"最优参数: {popt}") plt.figure(figsize=(8,6)) plt.scatter(test_x, test_y, s=10, alpha=.5, marker='o', label="带噪声的数据") plt.plot(test_x, gaussian(test_x,*popt),'g--',label="拟合后的曲线") plt.title('Gaussian Fit Example') plt.xlabel('X Axis Label') plt.ylabel('Y Axis Label') plt.legend() plt.grid(True) plt.show() ``` 上述例子说明了怎样应用 `curve_fit` 来调整预设形式的概率密度函数至实际观测值上,并展示最终效果[^2]。 #### 注意事项与常见问题解决办法 有时可能会遇到拟合失败的情况,这可能是由于初始猜测不合理或者目标方程不适合当前数据等原因造成的。此时应该仔细检查输入数据的质量以及所选模型是否恰当[^3]。 另外,在配置开发环境过程中也需要注意版本兼容性和路径设置等问题,确保正确加载所需的第三方库文件[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值