当前位置: 首页 > 编程日记 > 正文

生物学的机器学习:使用K-Means和PCA进行基因组序列分析 COVID-19接下来如何突变?...

作者 | Andre Ye

译者 | 孟翔杰

来源 | DeepHub IMBA

许多人没有想到,病毒就像地球上为生存而挣扎的其他生物一样,它们会进化或变异。

只要看一看人类病毒来源的蝙蝠携带的病毒RNA序列片段即可。

AAAATCAAAGCTTGTGTTGAAGAAGTTACAACAACTCTGGAAGAAACTAAGTT

…以及人类COVID-19病毒的RNA序列的摘录…

AAAATTAAGGCTTGCATTGATGAGGTTACCACAACACTGGAAGAAACTAAGTT

…显然,冠状病毒已改变其内部结构以适应其新宿主(更精确地说,冠状病毒内部结构的约20%发生了突变),但仍保持了足够的活力,以至于它仍然可以在起源物种体内存活。

实际上,研究表明COVID-19通过反复变异来提高它们的存活率。在抗击冠状病毒的斗争中,我们不仅需要找到消灭病毒的方法,还需要找到病毒如何突变以及如何遏制这些突变的方法。

在本文中,我将……

  • 提供RNA序列的简单解释

  • 使用K-Means创建基因组信息集群

  • 使用PCA可视化集群

    …并对我们执行的每个程序进行分析来获取经验。

什么是基因组序列?

如果您对RNA序列有基本的了解,请跳过此部分。

与“解码”相比,基因组测序通常是分析从样品中提取的脱氧核糖核酸(DNA)的过程。在每个正常细胞内有23对染色体,这些染色体容纳着DNA。

DNA的卷曲双螺旋结构使其可以展开为梯形。该梯形由成对的化学字母(称为碱基)制成。DNA中只有四种:腺嘌呤,胸腺嘧啶,鸟嘌呤和胞嘧啶。腺嘌呤仅与胸腺嘧啶结合,而鸟嘌呤仅与胞嘧啶结合。这些碱基分别用A,T,G和C表示。

这些碱基构成了指示生物体如何构建蛋白质的各种代码-实际上是控制病毒行为的DNA。

DNA转换为RNA再转换为蛋白质的过程

使用包括测序仪器和专用标签等专用设备,可以揭示特定片段的DNA序列。从中获得的信息将用于进一步的分析和比较,以使研究人员能够识别基因的变化过程,并将基因与疾病和表型以及潜在的药物靶细胞关联起来。

基因组序列是一串长长的“ A”,“ T”,“ G”和“ C”,代表生物体对环境的反应方式。通过改变DNA可以造成生物的突变。查看基因组序列是分析冠状病毒突变的有力方法。

了解数据

在Kaggle上找到的数据如下所示:

每行代表蝙蝠病毒的一种突变。首先,只需花一分钟就可以欣赏大自然的不可思议性-在数周之内,冠状病毒已经产生了262种自身突变,以提高自身存活率。

一些重要的列:

  • query acc.ver 代表原始病毒标识符。

  • subject acc.ver是病毒突变的标识符。

  • % identity 代表当前序列与原始病毒相同的百分比。

  • alignment length 表示序列中有多少个相同的标识符。

  • mismatches 代表突变和原始变异的数量。

  • bit score 表示衡量对齐程度的度量;分数越高,对齐越好。

    每列的一些统计度量(可以在Python中使用data.describe()方便地调用它):

查看% identity列,很有趣的是,该值最小约为77.6%。 % identity的标准差为7%。这个数值相当大,意味着存在广泛可能的突变。 bit score比较大的标准差支持这一观点-标准差大于平均值!

可视化数据的一种好方法是通过关联热图。每个单元代表一个特征与另一个特征之间的关联程度。

图中可以看到许多数据彼此高度相关。这是有道理的,因为大多数突变都是彼此不同的。需要注意的一件事是alignment lengthbit score高度相关。

使用K-Means创建突变聚类

K-Means是用于聚类的算法,它是机器学习中在特征空间中查找数据点并结合成组的一种方法。我们的K-Means的目标是找到突变簇,由此我们可以得出有关的突变性质以及如何解决突变的见解。

但是,我们仍然需要选择簇数k。尽管这就像在二维中绘制点一样简单,但在更高的维度中则无法实现(如果我们想保留最多的信息)。像肘法(elbow method)这样选择k的方法是主观且不准确的,因此,我们将使用轮廓法(silhouette method)。

轮廓法是针对k个聚类中心给出的聚类结果对数据适应程度的评分。Python中的sklearn库使实现K-Means和轮廓法变得非常简单。

似乎5个聚类中心是最合适的。现在,我们可以确定聚类中心。这些聚类中心是每个类别围绕的点,代表(在这种情况下)5种主要突变类型的数值评估。

注意:已对数据进行了标准化,以使它们全部缩放为相同的比例。否则,每列将不可比较。

此热图按列表示每个簇的属性。因为这些点是按比例缩放的,所以图中标注的数值在数量上没有任何意义。但是,可以比较每列中的标注值。您可以从视觉上了解每个突变簇的相对属性。如果科学家要开发疫苗,它应针对这些主要的病毒突变簇。

在下一节中,我们将使用PCA可视化数据。

PCA数据可视化

PCA(主成分分析法)是一种降维方法。它选择多维空间中的正交矢量来表示轴,从而保留了最多的信息(方差)。

流行的Python库sklearn可以用两行代码实现PCA。首先,我们可以检查数据的方差比。这是从原始数据集中保留的统计信息的百分比。在这种情况下,数据的方差比是0.9838548580740327,这已经很高了!我们可以放心,无论我们从PCA进行的任何分析都不会使数据失真。

每个新功能(主要组件)都是其他几列的线性组合。我们可以通过热图可视化其中一列对于相对的两个其他组件之一的重要性。

主要需要了解成分一具有较高分数的含义-在这种情况下,其特征具有更长的比对长度(更接近原始病毒),而成分2的主要特征具有更短的比对长度 (距离原始值更远)。这也反映在bit score的较大差异上。

显然,病毒突变有5种主要方式。我们可以从中获得许多信息。

其中四个突变位于成分一的左侧,一个突变位于右侧。成分一的特征是高alignment length。这意味着成分一的值越高则对齐长度越长(更接近原始病毒)。因此,成分一的值较低时在遗传上距离原始病毒较远。因此大多数病毒突变与原始病毒差异很大。因此,试图制造疫苗的科学家应该意识到该病毒会产生大量与原始病毒差异很大的突变。

 结论

使用K-Means和PCA,能够识别冠状病毒中的五个主要突变簇。研发冠状病毒疫苗的科学家可以利用聚类中心的信息获得有关每个聚类特征的知识。我们能够使用主成分分析在二维空间上可视化簇,并发现冠状病毒具有很高的突变率。这可能是它如此致命的原因。

【end】◆精彩推荐◆推荐阅读信息保留的二值神经网络IR-Net,落地性能和实用性俱佳 | CVPR 2020人生苦短,不光要用Python,还要在VSCode里用清华学霸组团的工业 AIoT 创企再获数千万融资:玩家应推动在边缘 AI 芯片上跑算法用Java开发自己的Kubernetes控制器,想试试吗?字节跳动武汉招聘 2000 人,距离大厂 Offer,你还差这篇 Java 干货!| 原力计划数字合约如何将所有权下放?如何使用脚本系统将交易转换为可编程的智能合约?答案就在这篇文章里!你点的每个“在看”,我都认真当成了AI

相关文章:

sql server时间转换

--getdate 获取当前时间select getdate()--dateadd 原有时间加: 2013-02-17 13:20:16 此时间加12个月 select dateadd(MONTH,12,2013-02-17 13:20:16) --返回:2014-02-17 13:20:16.000 (参数month可以改为 day,year等日期加相应…

cgdb安装与使用

官网:http://cgdb.github.io/ 安装 # wget http://cgdb.me/files/cgdb-0.6.7.tar.gz # tar -zvxf cgdb-0.6.7.tar.gz # cd cgdb-0.6.7 # ./configure --prefix/usr/local # make && make install 使用 1:cgdb分为上下两栏&#xff0c…

[MFC]多线程传参问题 [AfxBeginThread]

前言MFC中使用多线程比较简单,大家都推荐用AfxBeginThread来实现,但使用过程中确遇到传入this之后不能得到对象内部字段数据的问题。正文一、问题代码1.1 Test.h#pragmaonceclassCTest{public: CTest(void); ~CTest(void); voidThreadMethod…

学习Python,这22个包怎能不掌握?

作者 | Erik-Jan van Baaren译者 | 弯月,责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)以下为译文:如今全球各个行业内 Python 的使用状况怎么样呢?这个问题就是我写这篇文章的初衷。我找…

JSTL标签库的一些基础实例

如题所示&#xff0c;只是一些简单的入门实例&#xff0c;代码如下&#xff1a;<% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core"%…

旷视提Circle Loss,统一优化视角,革新深度特征学习范式 | CVPR 2020

作者 | 旷视研究院本文是旷视 CVPR 2020的被收录论文解读第。它提出用于深度特征学习的Circle Loss&#xff0c;从相似性对优化角度正式统一了两种基本学习范式&#xff08;分类学习和样本对学习&#xff09;下的损失函数。通过进一步泛化&#xff0c;Circle Loss 获得了更灵活…

收藏好玩的网站

1.输名字出照片 http://turnyournameintoaface.com/?name2.看google页面可以做成这样http://mrdoob.com/projects/chromeexperiments/google_gravity/3. 有趣的在线人脸变动物&#xff08;川剧中有变脸&#xff0c;其实你也可以滴&#xff01;&#xff09;http://youwild.org/…

GDB 格式化结构体输出

set print address set print address on 打开地址输出&#xff0c;当程序显示函数信息时&#xff0c;GDB会显出函数的参数地址。系统默认为打开的&#xff0c; show print address 查看当前地址显示选项是否打开。 set print array set print array on 打开数组显示&#xff…

Kinect For Windows V2开发日志九:侦测并绘制人体骨架

简介 在上一篇《侦测、追踪人体骨架》里&#xff0c;介绍了关节点的使用办法&#xff0c;这一篇记录将关节点与OpenCV结合的绘图方法。 代码 #include <iostream> #include <opencv2\imgproc.hpp> #include <opencv2\calib3d.hpp> #include <opencv2\high…

拨号连接或 ××× 连接的错误代码列表

本文列出了在使用Windows 2000、Windows XP 或 Windows Server 2003 作为客户机&#xff0c;建立拨号连接或 连接时可能收到的错误代码。注意&#xff1a;只有在尝试连接到正运行Windows 2000 或更高版本的路由和远程访问服务器时&#xff0c;才会看到编号高于 900 的错误代码…

“程序员数学不行,干啥都不行!”高级开发:90%都是瞎努力!

之前有很多读者留言向我们反馈&#xff1a;数学不好做算法优化&#xff0c;每次遇到不一样的问题就不会了&#xff0c;要是赶上面试基本就凉凉了。平时很难搞懂像数据结构、算法、复杂的语句等等&#xff0c;因为这些核心原理都是数学。而且光会基础数学远远不够&#xff0c;还…

Redis源码分析--lookupKey函数查看value值

lookupKey函数查看value值 robj *lookupKey(redisDb *db, robj *key) {dictEntry *de dictFind(db->dict,key->ptr);if (de) {robj *val dictGetVal(de);/* Update the access time for the ageing algorithm.* Dont do it if we have a saving child, as this will t…

PHP获取时间排除周六、周日的两个方法

//方法一&#xff1a; <?php $now time(); //指定日期用法 $now strtotime(2014-01-08) ; $day 3600*24; $total 12;$days array() ;for ($i2;$i<$total;$i) {$timer $now$day*$i;$num date("N",$timer)-2; //周一开始if($num>-1 and $num<3){if(c…

SMS2003 SP3+SQL Server2000 SP4部署(下)

<?xml:namespace prefix o />SMS2003 SP3SQL Server2000 SP4部署(下)<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />E.SMS2003安装在berlin上放入SMS2003光盘镜像&#xff0c;选择SMS2003出现SMS2003安装向导&#xff…

redis源码分析--zslRandomLevel位运算解析

与&运算 0376的二进制就是1111 1110&#xff0c;二进制的与运算规则是&#xff0c;只有两个数同时为1时&#xff0c;则结果才为1&#xff0c;只要有一个数为0&#xff0c;则结果就为0。比如1&11; 1&00; 0&10; 0&00;因此把一个字符与二进制1111 1110进行与…

从零开始构建:使用CNN和TensorFlow进行人脸特征检测

作者 | Shubham Panchal译者 | 孟翔杰来源 | DeepHub IMBA出品 | AI科技大本营&#xff08;rgznai100&#xff09;人脸检测系统在当今世界中具有巨大的用途&#xff0c;这个系统要求安全性&#xff0c;可访问性和趣味性&#xff01;今天&#xff0c;我们将建立一个可以在脸上绘…

scope重定义

.directive(myAttr, function() {return {restrict: E,scope: {customerInfo: info},template: Name: {{customerInfo.name}} Address: {{customerInfo.address}}<br> Name: {{vojta.name}} Address: {{vojta.address}}}; }); directive中的几个属性&#xff1a; restric…

基于轮廓调整的SOTA实例分割方法,速度达32.3fps | CVPR 2020

作者 | VincentLee来源 | 晓飞的算法工程笔记介绍实例分割是许多计算机视觉任务中的重要手段&#xff0c;目前大多数的算法都采用在给定的bbox中进行pixel-wise分割的方法。受snake算法和Curve-GCN的启发&#xff0c;论文采用基于轮廓的逐步调整策略&#xff0c;提出了Deep sna…

Redis运行流程源码解析

原文作者&#xff1a;凡趣科技 pesiwang 原文地址&#xff1a;http://blog.nosqlfan.com/html/4007.html 本文分析源码基于 Redis 2.4.7 stable 版本。 概述 Redis通过定义一个 struct redisServer 类型的全局变量server 来保存服务器的相关信息&#xff08;比如&#xff1a…

2010年5月blog汇总:OpenExpressApp、其他

OpenExpressApp 信息系统开发平台OpenExpressApp &#xff0d; 框架待完善工作事项信息系统开发平台OpenExpressApp &#xff0d; 报表模块支持ReportObjectView信息系统开发平台OpenExpressApp &#xff0d; 从compositewpf到MEF信息系统开发平台OpenExpressApp &#xff0d; …

注意!Linux glibc再曝漏洞,可导致Linux软件劫持

2019独角兽企业重金招聘Python工程师标准>>> glibc是GNU发布的libc库&#xff0c;即c运行库。它是Linux系统中最底层的API&#xff0c;几乎其它运行库都会依赖于glibc。 近日&#xff0c;Google和Red Hat的安全人员发现GNU C Library (glibc)中存在严重的安全漏洞&a…

redis常用命令参考

操作Redis数据库 下面我们来简单的操作一下数据库。在实例开启的情况下&#xff1a; 1、插入数据 redis 127.0.0.1:6379> set name wwl   OK 设置一个key-value对。 2、查询数据 redis 127.0.0.1:6379> get name   "wwl" 取出key所对应的value。 3、删除键…

Script:收集UNDO诊断信息

以下脚本可以用于收集Automatic Undo Management的必要诊断信息&#xff0c;以sysdba身份运行: spool Undo_Diag.out ttitle off set pages 999 set lines 150 set verify off set termout off set trimout on set trimspool onREM REM ----------------------------------…

又要头秃?2020年七大AI编程语言大盘点

作者 | Claire D译者 | 苏本如&#xff0c;编辑 | 伍杏玲来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;人工智能已成为我们日常生活不可或缺的一部分&#xff0c;它被广泛地应用到几百种实际场景中&#xff0c;极大地便利人们的工作和生活。随着近年来的发展&…

I.MX6 bq27441 driver hacking

/************************************************************************** I.MX6 bq27441 driver hacking* 声明&#xff1a;* 本文主要是记录对电池计量芯片bq27441芯片驱动注册过程进行代码跟踪。** 2016-2-…

PHP5.5的一点变化

之前一直使用eAccelerator&#xff0c;参考&#xff1a;PHP安装eAccelerator 注意PHP5.5以后暂时不能使用eAccelerator 原因&#xff1a;其中一个我知道的是eAccelerator中使用了&#xff1a; php_register_info_logo(EACCELERATOR_VERSION_GUID, "text/plain", (un…

虚拟机的操作系统的安装

虚拟机的操作系统的安装启动虚拟机进入下一步&#xff0c;按Enter键开始安装。按F8许可协议选则C创建分区再按C&#xff0c;将未划分的分区划分按ENTER继续&#xff0c;选择NTFS文件系统格式化磁盘分区写上姓名和单位&#xff0c;单击下一步直接点击关闭<?xml:namespace pr…

2020,国产AI开源框架“亮剑”TensorFlow、PyTorch

「AI技术生态论」 人物访谈栏目是CSDN发起的百万人学AI倡议下的重要组成部分。通过对AI生态专家、创业者、行业KOL的访谈&#xff0c;反映其对于行业的思考、未来趋势的判断、技术的实践&#xff0c;以及成长的经历。 2020年&#xff0c;CSDN将对1000人物进行访谈&#xff0c;形…

Centos下部署Solr 搜索引擎

一、环境准备&#xff1a;系统环境&#xff1a;centos 6.5tomcat 7.0.47jdk-7u9solr-4.7.0首先将软件包上传到/tmp目录下1、 jdk安装[rootsvn-server /]# cd /tmp/ [rootsvn-server /]#tar zxvf jdk-7u9-linux-x64.tar.gz[rootsvn-server /]#mv jdk1.7.0_09 /u…

Redis源码分析-TCMalloc

redis很多地方都在调用zmalloc函数 zmalloc在这里定义zmalloc.c void *zmalloc(size_t size) {void *ptr malloc(sizePREFIX_SIZE);if (!ptr) zmalloc_oom_handler(size); #ifdef HAVE_MALLOC_SIZEupdate_zmalloc_stat_alloc(zmalloc_size(ptr));return ptr; #else*((size_t…