从一元线性回归拟合过程看机器学习与深度学习优劣

本文通过一元线性回归的深度学习实现(BP神经网络)与R语言的最小二乘法进行对比,探讨两者在拟合效果上的相似性和差异性。实验结果显示,尽管深度学习在迭代次数较多后能得到接近的R²值,但其计算量大,且存在解释性难题。作者提醒临床科研人员在选择方法时应考虑模型的可解释性和计算资源,强调机器学习的经典方法在临床建模中的优势。
摘要由CSDN通过智能技术生成

深度学习是一种模仿大脑神经元构造的算法,近年来具有较高的热度,尤其是在自然语言领域、视觉领域等。深度学习属于机器学习的一个分支,但随着在智能AI、自动汽车、人脸识别等多方面的大放异彩,其受到的关注度大大超过机器学习。作为非人工智能领域的门外汉们(例如我是医生行业),时常会在研究方法的选择上产生困扰,由于深度学习在网络上具有极高的话题,我们会不断放大其优点而不自主的忽视其缺点,导致产生选择偏倚。因此,这里我以一元线性回归方程拟合为例,对比两种方法的优劣,从而为大家的临床研究方法选择提供一定参考。

计算过程

数据集小样本相关数据集
(1)试验组计算过程
试验组使用深度学习的BP神经网络算法。模型采用torch的线性回归模型,优化器采用随机最速下降法(SGD),计算过程为初始化参数,生成一条回归线,通过模型进行拟合,反向传播更新参数,随后正向传播生成一条回归线。不断重复以上过程。在每次的迭代学习中选择全数据集。代码如下:

#定义torch的线性回归模型
class LinearRegression(torch.nn.Module):
    def __init__(self):
        super(LinearRegression, self).__init__()
        self.linear = torch.nn.Linear(1,1)
    def forward(self,x):
        return self.linear(x)
        
for layer in model.modules():
    if isinstance(layer, torch.nn.Linear):
        init.xavier_uniform_(layer.weight)
#准备       
model = LinearRegression() #模型
criterion = torch.nn.MSELoss() #损失函数MSE
optimizer = torch.optim.SGD(model.parameters(), 0.001) #优化器SGD
loss_holder = []
loss_value = np.inf 
#开始训练
num_epochs = 300
for i in range(num_epochs):
    input_data = x_train.unsqueeze(1)
    target = y_train.unsqueeze(1)
    out = model(input_data) #输出值
    loss = criterion(out, target) #损失值
    optimizer.zero_grad() #梯度归零
    loss.backward() #反向传播
    optimizer.step() #正向传播
    print("epoch:[{}/{}], loss:[{:.4f}]". format(i+1, num_epochs, loss.item()))
    #记录误差
    loss_holder.append([i, loss])
    #保存更新loss_value
    if i%2 == 0 and loss < loss_value :
        loss_value = loss
#计算R*2的值
from sklearn.metrics import r2_score
y_train2 = y_train.detach().numpy()
out2 = out.squeeze(1).detach().numpy()
print(r2_score(y_train2, out2))

在300次的迭代后,该模型的MSELoss最小为39.1854,对应的R2值为0.9575
在这里插入图片描述
在这里插入图片描述
在1000次迭代后,该模型的MSELoss最小为32.9948,对应的R
2值为0.9642.
在3000次迭代后,该模型的MSELoss最小为28.4738,对应的R2值为0.9691.
在10000次迭代后,从9800次开始,该模型的MSELoss维持在27.9156,不再变化,对应的R
2值为0.96975(0.9698).
在这里插入图片描述
在这里插入图片描述
此时模型训练完毕。
(2)对照组计算过程
对照组运行平台为R语言4.0.3版本,使用lm()方法。R语言中的lm法原理是应用了最小二乘法(Ordinary Least Square,OLS)来求解拟合曲线,即使所有观察值的残差平方和达到最小。具体计算过程如下:
先计算平方损失函数,然后求解平方损失函数的极值点,极值点则为偏导为0的点,从而计算出斜率和截距。运行如下:
在这里插入图片描述

讨论

从本文中可以看出,使用深度学习算法,MSELoss收敛后,其得到的结果(R**2)与R语言中最小二乘法计算结果一样,因此,可以认为两者最终形成了相同的拟合曲线。从本质来说,最小二乘法跟梯度下降法都是通过求导来求损失函数的最小值,都是在已知数据的框架内,使得估算值与实际值的总平方差尽量更小。略微有区别的是,最小二乘法是直接对Δ求导,找出全局最小,是非迭代法。而梯度下降法是一种迭代法,先给定一个β参数 ,然后向β下降最快的方向调整β ,在若干次迭代之后找到局部最小。
广义线性回归模型属于机器学习中无监督学习的方法之一,从本文中可以简单的认识到机器学习在临床医学中的应用,虽然本文没有使用常用的数据预处理方式。机器学习最主要的优势在于它的可解释性,在本文试验数据中,我们可以轻松的写出拟合曲线的模型公式:y=5.188x+8.314,此外还有p值协助验证该参数。
而在深度学习中,我们只能保存训练好的模型,然后调用模型预测新数据,但是我们没办法去描述这个模型的原理,这也被俗称为黑匣子。其次就是深度学习的计算量,本文数据十分简单,而BP算法也迭代了1万次才完全收敛,对于更大更多维的复杂数据,其需要的庞大算力也是可以预见的。
以上就是我最近在钻研深度学习产生的问题,并自己动手验证了下自己的想法。在最近的学习中,由于深入其中,总是会产生一种错觉,就是深度学习可以搞定任何预测问题。诚然,深度学习的潜力巨大,热度巨大,给各个领域注入了大剂量的多巴胺,营造出一派欣欣向荣、热火朝天的景象。但是作为一名临床科研人员,我认为我们在低头狂欢的同时,偶尔也须要抬头望天。事实上,在临床疾病领域,机器学习的潜力不亚于、甚至是超过深度学习,尤其是在临床建模方面。根据临床先验知识,提出假设,对原始数据进行预处理,或者用PCA对原始数据进行降维,随后在多种机器学习方法中,选择最优的算法建立临床模型。这种经典的研究方法是最有效的,也是最值得我们牢牢掌握的。机器学习算法就像金庸小说中的《九阴真经》,包含很多神奇招术(多种算法),诡异莫测,临场对战讲究四两拨千斤,精巧绝伦(选择合适算法);而深度学习就是那《九阳神功》,依靠醇厚的内力防御所有招式(求导收敛),即所谓“重剑无锋,大巧不工,后发先至,一招制胜”(增加隐藏层)。
当然,机器学习方法也有缺点,对特征值的要求较高。因此对于学有余力的同行,我的推荐是内外兼修,拳脚相加;而若精力不足,可能机器学习相较于深度学习会更适合我们临床科研者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clancy_wu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值