动物心率与体重的模型

动物消耗的能量p主要用于维持体温,而体内热量通过其表面积S散失,记动物体重为w,则\(P \propto S \propto w^{\alpha}\)。又\(P\)正比于血流量\(Q\),而\(Q=wr\),其中\(q\)是动物每次心跳泵出的血流量,\(r\)为心率。假设\(q\)与\(r\)成正比,于是\(P \propto wr\)。于是有\(r \propto w^{\alpha-1}=w^a\),有\(r=kw^a+b\)。

import numpy as np
import matplotlib.pyplot as plt
import torch
import math
%matplotlib inline
r=np.array([[670],[420],[205],[120],[85],[70],[72],[38]])
w=np.array([[25],[200],[2000],[5000],[30000],[50000],[70000],[450000]])
plt.plot(w,r,'bo')
x_sample = np.arange(85, 450000, 0.1)
bottom_range = [1,2,3,4,5]
color = ['red','green','pink','black','blue']
for i in range(5):
y_sample = 5000*x_sample**(-1/bottom_range[i])
plt.plot(x_sample, y_sample, color[i],label='real curve')

由上图的预模拟,考虑\(r\)的指数为\(-1\),\(-\frac{1}{2}\),\(-\frac{1}{3}\),\(-\frac{1}{4}\),\(-\frac{1}{5}\),从中选取误差最小的

from torch.autograd import Variable
from torch import nn
from torch import optim
import math #生成目标函数 构建数据集
x_train = w
x_train = torch.from_numpy(x_train).float()
x_train = Variable(x_train) y_train = torch.from_numpy(r).float()
y_train = Variable(y_train) #构建模型
class poly_model(nn.Module):
def __init__(self,bottom):
super(poly_model,self).__init__()
self.k = nn.Parameter(torch.randn(1))
self.b = nn.Parameter(torch.zeros(1))
self.bottom = bottom def forward(self,x):
out = (x)**(-1/self.bottom)*self.k+self.b
return out
for i in range(5):
print("exponential is -1/%d"%(bottom_range[i]))
model = poly_model(bottom_range[i])
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(),lr=1e-3) # 更新参数
for j in range(150000):
output = model(x_train)
loss = criterion(output,y_train)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if(j%50000 == 0):
print(loss.item())
if(loss.item() < 1e-3): break print(model.parameters())
y_pred = model(x_train) plt.plot(x_train.data.numpy()[:, 0], y_pred.data.numpy(), label='fitting curve', color=color[i])
plt.plot(w, r, label='real curve', color='orange')

经过150000轮预训练,我们得到如下图,表中为曲线颜色对应的指数

指数 颜色 误差
-1/1 41184
-1/2 绿 10599
-1/3 1195
-1/4 360
-1/5 468

其中误差最小的项为\(-\frac{1}{4}\)

这里可以做一些交叉熵验证找一个最佳的learning rate代码就不贴了 随机生成学习率即可,经过100次验证 我得到的最佳学习率是0.20485,收敛的很快

model = poly_model(4)
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(),lr=0.20485)
for j in range(50001):
output = model(x_train)
loss = criterion(output,y_train)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if(j%50000 == 0):
print(loss.item())
y_pred = model(x_train)
plt.plot(x_train.data.numpy()[:, 0], y_pred.data.numpy(), label='fitting curve', color=color[i])
plt.plot(w, r, label='real curve', color='orange')

打印模型参数

param = list(model.parameters())
print(param)
[Parameter containing:
tensor([1591.8446], requires_grad=True), Parameter containing:
tensor([-33.6434], requires_grad=True)]

通过交叉验证,使用0.20485的学习率学习50000轮后,最终模型为\(r=1591.84w^{-\frac{1}{4}}-33.64​\),均方误差为304.288

动物 实际心率 预测心率 偏差
田鼠 670 680 +10
家鼠 420 390 -30
205 204 -1
小狗 120 155 +35
大狗 85 87 +2
70 72 +2
72 63 -9
38 27 -11

Pytoch机器学习乱玩(一):数学建模作业,体重与心率的更多相关文章

  1. BITED数学建模七日谈之七:临近比赛时的准备工作

    经过前面六天的文章分享,相信大家对数学模型的相关准备.学习都有了更新的认识,希望大家能从中有所收获,以便更高效地准备比赛和学习数学模型,本文是数学建模经验谈的最后一天:临近比赛的准备工作,希望在临近比 ...

  2. 2019年美国大学生数学建模竞赛(MCM/ICM) E题解题思路

    这也许是我大学生涯最后一次参加数学建模比赛了吧,这次我们选择的问题是E题,以下是我们解题时候的一些思路.很多不易体现的项目产生对环境造成影响的指标可以由一些等同类型的指标来代替,如土地.森林植被被破环 ...

  3. “GANs”与“ODEs”:数学建模的终结?

    在本文中,我想将经典数学建模和机器学习之间建立联系,它们以完全不同的方式模拟身边的对象和过程.虽然数学家基于他们的专业知识和对世界的理解来创建模型,而机器学习算法以某种隐蔽的不完全理解的方式描述世界, ...

  4. Python小白的数学建模课-15.图论基本概念

    图论中所说的图,不是图形图像或地图,而是指由顶点和边所构成的图形结构. 图论不仅与拓扑学.计算机数据结构和算法密切相关,而且正在成为机器学习的关键技术. 本系列结合数学建模的应用需求,来介绍 Netw ...

  5. python 版 mldivide matlab 反除(左除)《数学建模算法与程序》Python笔记

    今天在阅读数学建模的时候看到了差分那章 其中有一个用matlab求线性的代码,这里我贴出来 这里我送上 Python代码 In [39]: import numpy as np ...: from s ...

  6. 在数学建模中学MATLAB

    为期三周的数学建模国赛培训昨天正式结束了,还是有一定的收获的,尤其是在MATLAB的使用上. 1. 一些MATLAB的基础性东西: 元胞数组的使用:http://blog.csdn.net/z1137 ...

  7. BITED数学建模七日谈之六:组队建议和比赛流程建议

    今天进入数学建模经验谈第六天:组队建议和比赛流程建议 数学模型的组队非常重要,三个人的团队一定要有分工明确而且互有合作,三个人都有其各自的特长,这样在某方面的问题的处理上才会保持高效率. 三个人的分工 ...

  8. BITED数学建模七日谈之五:怎样问数学模型问题

    下面进入数学建模经验谈第五天:怎样问数学模型问题 写这一篇的目的主要在于帮助大家能更快地发现问题和解决问题,让自己的模型思路有一个比较好的形成过程. 在我们学习数学模型.准备比赛的时候,经常会遇到各种 ...

  9. BITED数学建模七日谈之四:数学模型分类浅谈

    本文进入到数学建模七日谈第四天:数学模型分类浅谈 大家常常问道,数学模型到底有哪些,分别该怎么学习,这样能让我们的学习有的放矢,而不至于没了方向.我想告诉大家,现实生活中的问题有哪些类,数学模型就有哪 ...

随机推荐

  1. Phoenix(SQL On HBase)

    1.简介 Phoenix是一个HBase框架,可以通过SQL的方式来操作HBase. Phoenix是构建在HBase上的一个SQL层,是内嵌在HBase中的JDBC驱动,能够让用户使用标准的JDBC ...

  2. python 黑魔法收集--已结

    awesome python 中文大全 Fabric , pip, virtualenv 内建函数好文 awesome python 奇技淫巧 一句话求阶乘 from functools import ...

  3. H5_0002:微信分享设置

    1,非公众号的链接,设置分享的预览图片. 先打开页面,在收藏页面,最后在收藏界面长按 “转发” ,即可在链接上出现预览图片.

  4. 1. Nagios和 NagiosQL安装及配置

    目录 1. Nagios 和 NagiosQL简介 2. Nagios+NagiosQL搭建环境说明 3. Nagios.Nagios-plugins和NagiosQL的安装 4. 配置NagiosQ ...

  5. jvm经典文章整理

    Java中JVM虚拟机详解 Java GC的那些事(上)(博主还有很多文章都很经典) CMS垃圾收集器介绍

  6. “不能在dropdownlist中选择多个项

    DropDownList.ClearSelection(); DropDownList.SelectedItem.Text = "value值";

  7. 全排列递归算法(元素有重复与无重复,C++实现)

    元素无重复: 如:2,5,8,9. 思路:用递归的方法解决,对于2589,先输出所有以2开头的排列,然后输出5开头的排列.....(此处称为递归操作A).以2开头的排列中,第一位是2,后面的是589, ...

  8. 记一次Java动态代理实践【首发自高可用架构公众号】

    1. 背景 最近在做数据库(MySQL)方面的升级改造.现状是数据库同时被多个应用直连,存在了一些问题: 有大量的重复代码,维护成本较高,也不优雅: 出现SQL语句质量的问题无法很快定位到是哪个应用导 ...

  9. class和style属性

    值类型: 1.表达式计算出的字符串结果或者字符串. 2.对象(表达式或者对象名,建议采用对象名) key为className,值的真假控制这个name的有无. //class <div v-bi ...

  10. C# - 设计模式 - 模板模式

    模板模式 问题场景 咖啡和茶派生于抽象类饮料,咖啡和茶都具有烧水的方法,所以可以将烧水的方法提取到抽象类饮料中去实现,而咖啡具有一个向杯子加咖啡粉的方法,茶具有一个向杯子加茶叶的方法,看起来两个方法是 ...