惯性力偶矩公式中j_机器学习实战:逻辑回归在医疗中的应用

本文应用场景

本文将使用一批患者的心脏检查样本数据(附件中的 StatlogHeart.csv 文件),让程序学习这些样本数据,来得到一个较好的心脏病预测模型。下面的表 1 中摘取了一小部分这些患者心脏检查样本数据:

表 1. 部分患者心脏检查样本数据

9bb6719f0c91981219e2b45a72718dfb.png

在表 1 中,每行是一个样本,除最后一列外,前面的列都是患者的相关检查数据,最后一列是医生检查结果,1 代表无心脏病,2 代表患有心脏病,我们要让机器学习这些样本后得到一个模型,这个模型可以输入样本表格之外的数据,预测出患者是否会患有心脏病及其概率大小。有很多实现这样的二分类预测的模型算法,如逻辑回归、支持向量机和神经网络等,本文通过比较基本的逻辑回归算法来实现,后续文章中会介绍通过神经网络等算法来解决稍微复杂的问题。

逻辑回归简介

首先我们简单介绍下逻辑回归(Logistic Regression),逻辑回归是机器学习中一个非常常见的模型,在实际生产环境中也会经常被使用,常用于数据挖掘、疾病自动诊断和经济预测等领域。例如,探讨引发疾病的危险因素,并根据危险因素预测疾病发生的概率等。逻辑回归最常用于分类,主要用于两分类问题(即输出只有两种,分别代表两个类别),并且能够指明每个分类事件发生的概率。通过表 1 的数据,我们的目标是建立一个逻辑回归模型,如下图 1 所示:

图 1. 逻辑回归

d7582a5bb5f0d2b9b751c1d4dede65ec.png

当输入患者的心脏检查数据 x,能够预测其是否患有心脏病及其概率,假设其模型公式为 y = f(x),则对于逻辑回归,通过函数 f 运算后,y 应该是一个介于 0 和 1 之间的值,越趋于 1,则可能是有心脏病的,并且其对应的 y 值就是发生的概率,反之越趋于 0,则是没有心脏病的事件发生的概率大。

建立逻辑回归模型的步骤

我们按照以下三个基本步骤,来分析和建立逻辑回归模型:

  • 构造假设函数(即 H 函数)

  • 构造损失函数(即 J 函数)

  • 通过某种方法使得损失函数最小,并求得此时的参数θ

构造假设函数

我们的目标是类似预测心脏病发生的概率这样的二分类模型,即要么发生(发生概率趋于 1),要么不发生(发生概率趋于 0)。Sigmoid 函数就能很好的实现这个目的,Sigmoid 函数形式为:

adc834893780198ea140ea1a3f57207e.png

这个函数的图形如下图 2 所示,是一个 S 型曲线,随着自变量 z 的变化,因变量 g 的值在 0 到 1 之间。

图 2. Sigmoid 函数曲线

2d1d11e7f980b42a7d419e46a75672ea.png

Sigmoid 函数将输入 z 转化为一个 0 到 1 之间的数,正好对应为概率的值,g(z)越趋近于 1,表示结果为 1 的概率越大,且概率值就等于 g(z),反之,当 g(z)越趋近于 0,表示结果为 0 的概率越大,且概率值等于 1- g(z)。有了 Sigmoid 函数,我们可以构造预测函数了,在上一篇文章《机器学习代码实战:使用线性回归检测水泥质量》中,我们介绍了有多个自变量的线性回归的公式可表示为:

36bd389c98a7f0047ae636e0c77c71f7.png

而本文介绍的逻辑回归,同样有多个自变量 x,即患者的各项检查数据,以及一个偏移量 b,但由于要实现二分类,不能像线性回归那样直接将 x 与参数θ的点积作为结果,而是将点积作为自变量带入到 Sigmoid 函数中计算出 y 值,则计算出的结果为 0 到 1 之间的数,即概率的值。将偏移量 b 合并到参数θ中用 71ec8262df0c4a06d6a43692267bee38.png 表示,并且多加一个对应的自变量 (da07b4b33d4bc22d8b210129627e5af2.png恒等于 1),则自变量 x 与参数θ用向量分别表示为:

370d083efac236b863f9812e0d18b269.png

那么,逻辑回归的假设函数为:

0e55e82265d1988f78ed089c312e68df.png

这个假设函数就是我们的模型函数了,我们希望有一组参数θ,带入到这个模型后,使得输入的样本 x 经过计算后,得到的结果尽可能的趋近于实际结果 y 的值(1 或者 0),为了使这个模型预测的概率尽量准确,接下来要构造损失函数来计算模型预测的准确性。

构造损失函数

线性回归中我们使用了最小二乘法来构造损失函数,在逻辑回归中道理类似,我们期望通过假设函数计算后的结果与实际结果值(1 或者 0)尽可能的接近,则该假设函数的参数就是我们想要的一组参数。而与实际结果值越接近,就代表值为 1 或者 0 的概率应该尽量最大,所以将问题转化为概率来讨论,上面的假设函数 h 的值即表示结果取 1 的概率,对于结果为 1 和 0 的概率分别为:

103dc6ed07cffc00dbb03fa72915bd4d.png

将这两个公式合二为一:

ca3ec3376288be588cb38b5e3b3f8f09.png

这里将两个公式合二为一非常巧妙,使得原本要求 2 个概率的问题转变为只需求 1 个概率,这样能简化后续的计算。如前所述,我们要求一组参数θ使得概率 P 最大,而似然函数就用来求参数θ的,所以对上述公式取似然函数就得到一个初始的损失函数:

90efea2aafbf063ffa4d98ee6d544ab0.png

为了在简便后续求导的过程,再对上述公式取对数似然函数,这不会影响计算结果:

c2c35d61c11871b2f1724e0adc28fa81.png

则最终的损失函数为:

ed84d5e3f83721e14d45bfe19a3af98e.png

这里的 J(θ)就是最终的损失函数,与线性回归的区别是,这里是要求θ,使得 J(θ)即概率最大。对于曲线的极值,通过求偏导数为 0 解出θ。通过这个函数对所有样本进行计算,得到一个概率 J(θ),这个概率也称为损失。如前文所说,我们要让这个概率值尽量最大能得到模型公式最好的一组参数,也就是求 max J(θ)。

梯度下降求θ

在前篇文章《机器学习代码实战:使用线性回归检测水泥质量》中已经介绍了梯度下降(Gradient Descent),在逻辑回归中,我们同样可以使用梯度下降来求解最优的一组θ。具体方法,就是对上面公式 J(θ)中的参数求偏导数,得到这个参数对应维度最陡峭的方向,在乘以一个步长 a,就求出每次参数移动的大小:

9c29b348a1a9be40322a32bde683ee8d.png

完成上述公式的求导,最终得到每次迭代的参数更新公式:

2637b335193545247906bacb3312f47e.png

其中,设 m 为样本条数,n 为每条样本的特征数,并且 0≤i≤m, 0≤j≤n。

公式中的 a 称为步长或者学习率,要注意几点:

  • 每次迭代只对参数有比较小的更新,要经过多次迭代才能得到最终理想的参数。

  • 如果步长太大,可能会在最低点附近徘徊,所以训练模型的时候要注意调整步长。

  • 这个方法让你走到的不一定是整个曲面的最低点,可能只是局部最小,所以往往要考虑起点。

740fa667974f5e3cbe91862e188e7790.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答您的问题。 首先,我们需要了解铰支梁的基本性质和挠曲方程。铰支梁是一种结构,通常由两个支座连接,其至少一个支座是铰接的,使得梁的端点可以自由旋转。在多个集力、集力偶矩作用下,铰支梁的挠曲方程可以表示为: EI(d^4y/dx^4) = q(x) - F(x) - M(x) 其,E是弹性模量,I是截面矩,y是梁的挠曲距离,x是梁的长度方向,q(x)是分布载荷,F(x)是集力的作用力,M(x)是集力偶矩的作用力矩。 接下来,我们可以使用MATLAB的ODE45函数来求解挠曲方程的解析解。具体步骤如下: 1. 定义挠曲方程,包括弹性模量、截面矩、分布载荷、集力和集力偶矩; 2. 使用ODE45函数求解方程的解析解; 3. 绘制挠曲曲线。 下面是一个示例代码: ```matlab % 定义参数 L = 10; % 梁的长度 E = 200e9; % 弹性模量 I = 2.5e-6; % 截面矩 q = @(x) 1e3; % 分布载荷 F = @(x) [0;0;0;0]; % 集力 M = @(x) [0;0;0;0]; % 集力偶矩 % 定义挠曲方程 odefun = @(x,y) [y(2); y(3); y(4); q(x)/E/I-F(x)/E/I-M(x)/E/I*L^2/12]; % 定义边界条件 bcfun = @(ya,yb) [ya(1); ya(2); yb(1); yb(2)]; % 求解方程 xspan = [0 L]; init = [0; 0; 0; 0]; [x,y] = ode45(odefun,xspan,init,bcfun); % 绘制挠曲曲线 plot(x,y(:,1)); xlabel('Length of Beam'); ylabel('Deflection'); title('Deflection Curve of Hinge Beam with Concentrated Loads'); ``` 请注意,上述代码仅为示例,您需要根据您的实际情况进行修改。例如,您需要根据实际情况定义载荷、支座位置等参数。 希望这可以帮助到您。如果您还有其他问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值