- 博客(80)
- 收藏
- 关注
原创 金麟岂是池中物:逻辑斯蒂回归算法及实现
金麟岂是池中物,一遇风云便化龙 逻辑斯蒂回归是很常见的的算法模型,见下图: 而对于Mnist数据集,我们是使用多项逻辑斯蒂回归,具体公式见下图: 而在具体的使用过程中,我们通常是用softmax回归,如下图所示:而损失函数如下,我们要做的就是尽可能让损失函数变小 对于损失函数的优化,我们用梯度下降法,进行迭代。算法实现如下:...
2021-06-20 10:52:32
501
1
原创 欲与天公试比高:决策树算法及实现
恭贺我国神舟十二号载人飞船成功发射!数风流人物,还看今朝!!!emsp;老规矩,决策树的数学推导部分再次不在赘述,因为决策树是一种非常直观的算法。其中需要注意的地方是特征选择,涉及到了信息增益。算法的描述如下图: 但是在具体的实现过程中是有一内内难度的。关键是在于数据集的处理,我们仍用Mnist数据集的话,它有28*28=784个特征,但是选择一个特征后,我们如何对数据进行划分?比如选择了第一个特征,此特征下的数据取值为0~255,那我们如何划分?二分?还是三分?四分?或者第一个特征二分,第二.
2021-06-18 21:10:37
190
原创 毕竟眉湖六月中:朴素贝叶斯算法及实现
毕竟眉湖六月中,风光不与四时同。 图书馆路上随手拍的正文: 我们都对贝叶斯理论了解一二,但啥是朴素贝叶斯?何谓朴素?见下图: 以下是朴素贝叶斯算法的流程: 但在实际的运用中,我们使用的数据集有可能是偏倚的或者数据集包含的实例较少。简单的来说,当我们通过掷筛子来统计每个点数的频率来判断这个骰子是否被动过手脚。当我们测试了六次,发现三点出现频率为0,那么就说这个骰子被动了手脚,显然这是不准确的,这就需要我们在掷筛子前,令所有点数出现的频率不为0,来避免此种状况的出现。 在朴素贝叶斯
2021-06-06 23:46:09
275
5
原创 月落星稀天欲明:k邻近算法及实现
月落星稀天欲明,孤灯未灭梦难成。 失眠怎么办?当然是码代码喽!本次实现的是k邻近算法,先来个基础版本的,数据集还是Mnist,具体算法的数学描述,直接搬运《统计学习方法》的相关章节(主要是欧氏距离和投票表决)如下:import numpy as npdef output_label(data_train,input,k): data_input=np.tile(input,(data_train.shape[0],1)) data_dis=data_input-data_train
2021-06-01 10:04:06
119
原创 雨送黄昏花已落:感知机算法及实现
湛湛眉湖去,冥冥细雨来。 感知机是二类分类模型,属于判别模型。其主要是求出将训练数据进行线性划分的分离超平面。方法是基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。具体的数学推导过程,可以参考《统计学习方法》一书,这里不再赘述。下面是基于上次手写数字的Mnist数据集的感知机算法代码。import numpy as npclass perceptron: def __init__(self,train,test,train_label,test_label,lear
2021-05-28 09:57:45
76
原创 偷得浮生半日闲:手写数字的识别
本次我们利用拟利用三层神经网络来识别手写数字,利用http://pjreddie.com/projects/mnist-in-csv/提供的训练数字和测试数字,来进行网络的训练。隐藏层设置为100个节点,学习率设置为0.3,并将全部数据集训练5次。最终得到正确率为import numpyimport scipy.specialclass network: def __init__(self,input_nodes,hidden_nodes,output_nodes,learn):
2021-05-21 10:38:40
664
原创 偷得浮生半日闲:三层神经网络的python实现
在做毕设的时候,忙里偷闲,结合之前文章中的神经网络的入门推导,用python实现了三层神经网络,本次的代码构建了一个神经网络的类。import numpyimport scipy.specialclass network: def __init__(self,input_nodes,hidden_nodes,output_nodes,learn): self.inodes=input_nodes self.hnodes=hidden_nodes
2021-05-18 11:09:42
245
原创 求生存系列:神经网络的入门级别推导
这篇博文将详细介绍神经网络以及它的python实现,主要参考书是《Python神经网络编程》。 神经网络是由现代神经科学的基础理论上发展出来的,旨在反应人脑结构及功能的一种数学模型。在如今的年代,计算机可以以相当的速度,在一秒钟内进行4位数甚至十位数的相加,其运算的速度是远远超于人脑的运算速度的。但是在之前的时候,让计算机准确的识别一幅照片是非常困难的,但是人脑可以迅速的识别一幅照片,这提示着计算机仍然不够智能,需要我们设计出一种新的算法来使得计算机变得更加智能。这时,根据人脑神经元结构,科学家们设计了
2021-04-06 21:19:30
156
原创 求生存系列:序言
收到拟录取几天了,宣布考研也告一段落,打算写一些复盘和未来的计划。 首先是备考的复盘。备考是2020年三月底正式开始的。前期的备考时斗志满满的,因为自从参加过数学建模后,我便喜欢上了数学,特别是二月份看了国外的《introduction to linear algebra》便彻底打消了对数学的一点点的畏惧感。所以如果考研需要考数学一,我很推荐先看看这本书。建议看英文原版,既为线代打基础,又加强英语的阅读能力。从三月到六月,每天大部分时间都分给了数学,每一天都有满满的收获感。由于2020的特殊,三月到八月
2021-04-05 11:10:54
156
3
原创 平地起高楼之漫谈长非编码RNA
平地起高楼之漫谈长非编码RNA 关于长非编码,我还记得当时在生物化学课上,刘老师专门拿出了半节课向我们介绍长非编码RNA。正好当时也做了笔记,于是结合笔记和网上查阅的资料,简要的写写长非编码RNA。主要思路是介绍长非编码RNA以及相关的数据库,最后在介绍一波由北大开发的预测的工具——CPC。 基因组被誉为“人类组装说明书”,自从人类基因组计划完成后,人们发现基因仅是由四种碱基组成,它是如此的简单,但又是如此的神秘。其中编码区域仅占基因组的2.9%,可知基因组中由大量不编码的区域,这些区域仍转录成RNA,
2021-03-19 22:10:08
676
原创 平地起高楼之生信一百年
啥是生信?生信能干啥? 天天嘴里嚷嚷着要做生信,也通过一系列自学,获得了一丢丢的成就感。但生信是咋来的?啥是生信?生信都干点啥? 综合网上的资料以及北大生物信息中心的课程,来从头梳理梳理生信这个东西。 首先,我们先了解了解它的历史。因为生信与分子生物学、计算机科学是密不可分的,所以生信的发展历程与分子生物学、计算机科学的发展有关。1945年:第一台计算机"ENIAC"诞生。 1950到1960年:沃森克里克的DNA双螺旋结构的惊天问世,开启了分子生物学的时代,生物学的研究深入到了分子的层面。第
2021-03-19 21:48:49
165
原创 蛋白质相互作用系列:GN快速算法
通过前两篇博客,我们知道GN算法的时间复杂度并不理想,当网络中包含上千个顶点时,这个算法会耗费大量时间。鉴于此,Newman(2004)[1]描述了一个快速算法。经测试,该算法能很好的分析生成的网络和真实世界的网络,并比原先算法快了近千倍! 快速算法的时间复杂度为O((m+n)n),当时稀疏网络时是O(n2),其中m是顶点数,n是边数。此算法是凝聚法的一种,并且是基于模块度Q。既然Q值越大,则划分的社区结构越好,那么可不可以将一个网络所有的划分情况都罗列出来,然后计算Q值,找出Q值最大的那种划分情况,这
2021-02-25 15:17:58
371
原创 蛋白质相互作用系列:GN算法
随着酵母双杂交、基于质谱的串联亲和纯化、蛋白质芯片等高通量生物实验方法的发展和文本挖掘技术在蛋白质相互作用预测中的广泛应用,所以蛋白质相互作用数据库日益丰富 ,并形成了越来越多的蛋白质相互作用网络(PPI)。 所以面对大量可用的PPI网络数据,如何快速、有效地识别各种具有生物学功能的功能模块(也称蛋白质复合物)就成为蛋白质组学研究中一项极为关键的科学问题。并且在校期间的一个科研项目就正是关于蛋白质相互作用,所以决定结合目前的文献,新开一个蛋白质相互作用的系列,用来介绍相关的内容。 传统挖掘网络结构的方
2021-02-23 14:32:26
827
原创 改进:利用拓扑熵进行基因预测
本文将引入入拓扑熵来预测DNA序列中的编码片段。因为在利用上文思路进行预测时,发现结果很不理想。。。。。上文的代码逻辑是寻找到全部可能到orf,并设置一个长度的阈值,凭借此筛选出长度大于此阈值的orf,然后对筛选出的orf引入香农熵进行预测。但是根据返回的结果发现,最终预测出来的序列的长度总是接近于阈值的长度。也就是说,如果我设置阈值为100,那么它返回结果片段长度就是100附近,阈值是1000,它返回结果片段长度就是1000附近。据此现象,我们意识到了一个重要的问题:比较不同长度的序列的碱基分布随机度用
2020-09-07 21:19:07
476
原创 一次探索:基于香农熵预测DNA中编码序列,python实现。
由前面的博客介绍可知,我们用熵来衡量系统的混沌度。写到这里,我突然想起了《三体》对低熵体和高熵体的精彩描述:宇宙的熵在升高,有序度在降低,像平衡鹏那无边无际的黑翅膀,向存在的一切压下来,压下来。可是低熵体不一样,低熵体的熵还在降低。有序度还在上升,像漆黑海面上升起的磷火,这就是意义,最高层的意义,比乐趣的意义层次要高 。 很佩服大刘的文笔,能把硬核的知识描写的如此有诗意。 在前些日子,我读到了一篇有些年头的论文《THE USE OF ENTROPY TO CHARACTERIZE CODING
2020-05-15 22:49:51
1428
原创 双序列比对之重复匹配算法以及C++实现
双序列比对之重复匹配算法 在看此篇文章之前,建议先看一看我之前写的NW算法和SW算法(近期准备将这两篇文章在重新写一下,主要添加一些内容。) 重复匹配算法是迥异于之前介绍的全局比对和局部比对算法。如果我们将要比对的两个序列命名为序列1,它为AWGHEEBAWGRBZ,序列2为PEAWG。全局比对之后的结果可能为 HE—AWGEBAWGRBZAWG —PEAWG-----------...
2020-04-08 21:03:57
2023
2
原创 数据结构与算法之素数的筛选
数据结构与算法之素数的筛选 素数筛选,顾名思义就是给你一堆数,然后让你找到其中的素数。直观的思路就是针对一个数n,从2开始枚举,一直枚举到n-1。显然这个思路的算法复杂度接近了O(nn),对大规模数据显然是不可接受的。所以我们得优化这个思路,看能否进一步减低算法时间复杂度。 我们以数字5为例,我们想知道5是否是素数,那么我们从2开始枚举,发现5%2!=0,故继续枚举到3,5%3!=0,故继...
2020-03-20 21:28:04
182
原创 数据结构与算法之归并、快速排序
数据结构与算法之归并、快速排序 这是排序问题中的两个重要且基础的排序算法。之所以拿来一起介绍使用为他俩有着异曲同工之妙,只要理解了归并排序,就知道了快排是咋回事的了。 归并排序就是从局部无序变有序,最后全局无序变有序。基本思想就是先俩俩一组,通过合并排序,保证组内有序后,我们在将相邻的两组合并排序(将两组链接并排序)成为新的一组。然后再合并排序,再依次循环,直到一组的长度是整个待排序数组的...
2020-03-20 21:27:02
119
原创 数据结构与算法之二分法
数据结构与算法之二分法万物皆可分 二分法应该是我们熟悉的内容,因为在初高中的数学课堂中均会设计到二分的思想。比如,我们求某一无理数的近似值,就是通过二分法。比如求2\sqrt{2}2的近似值,范围在[1,2]内。显然我们可以先取中点3/2,显然3/2的平方大于2,故在取区间[1,3/2]然后依次操作,直至区间长度达到所需的精度。double eps=1e-5;int f(double...
2020-03-20 21:24:12
655
原创 数据结构与算法之散列
数据结构与算法之散列 其实在之前的算法练习题中已经使用到了散列(hash)这一思想,那就是以空间换时间。 举例:现有整数集合M,还有一个输入的整数集合N,且M,N均小于等于10 的5次方。那么,我想知道集合N中的哪些整数出现在了集合M中? 分析:一般的思路肯定是拿两个集合的数一个个比较,即用两个嵌套的循环实现。则此种的算法时间复杂度为O(n*m)。那么我们是否有办法使得时间复杂度从O(n...
2020-03-05 11:43:26
129
原创 数据结构与算法之两句话讲懂递归
数据结构与算法之两句话讲懂递归`声明:并不是全文就两句话,而是全文围绕两句话。 人理解循环,神理解递归。 这句话是在网上偶尔看到的,出处在哪已经找不到了。当时对这句话深以为然,因为初次接触递归时,感觉递归非常的难以理解。总觉得递归非常的神秘莫测,非常的抽象。其实不然,递归本质上是一种特殊的循环写法。可以这样说,只要你懂得循环的思想,你就能把握递归的精髓。“人理解循环,神理解递归。”你要...
2020-03-05 11:39:48
213
原创 从拉格朗日乘数法到最大熵再到基因表达分析
从拉格朗日乘数法到最大熵再到基因表达分析 前言:本文将简要的介绍一下拉格朗日乘数法,并填一下上篇文章挖的坑(证明当为均匀分布时,熵值达到最大。) ,最后简要介绍熵在基因表达分析中的应用。 首先是拉格朗日乘数法的简要介绍。主要以二元函数为例。(大部分参考一篇文献,文献见末尾[1]^{[1]}[1]) 拉格朗日乘数法是求解条件极值问题的一大利器。在《高等数学》同济版中是这样介绍的:“考虑如下的...
2020-02-01 14:31:35
628
1
原创 从jensen不等式到相对熵的非负性性
从jensen不等式到相对熵的非负性性 前言:在上上次博客我们证明观测到的归一化的频率就是最大似然估计的解时,我们用到了相对熵恒大于等于0的性质,那么本文就当是扩展一下知识,主要以证明和介绍为主。 首先我们简要介绍一下熵的概念。“熵”这一概念并不仅仅存在于物理化学中,还应用于信息论中。熵是结果不确定度的一种度量。shannon熵定义为:H(x)=−∑iP(xi)logP(xi)H ( x...
2020-01-30 11:12:41
1717
原创 双序列比对的基础之PAM矩阵
双序列比对的基础之PAM矩阵 PAM矩阵的记分方法是基于蛋白序列中单点可接受(point accepted mutation, PAM)的概念,通过对蛋白质进化模式的研究而建立的。 PAM矩阵是由Dayhoff等人构建了与71个家族的序列关联的假想系统发育树,其中每对序列间的差异不超过它们残基总数的15%,用简约法建树,统计相似序列比对中的替换发生率来得到的。即,构建一个序列间相似度很高(通常...
2020-01-27 17:22:08
6357
原创 双序列比对的理论基础之建造替换矩阵的合理性证明
双序列比对的理论基础之建造替换矩阵的合理性证明 前言:如果对最大似然估计没有概念的话,可以看看我之前写的《似然,似然,似是而然》 结合前几篇文章我们大致的了解了计分矩阵的流程:对某以蛋白质家族进行多序列对比,然后按某一阈值(等同残基比)进行聚类,之后将匹配的无空位的区域划分为block,然后统计各个block中残基之间的联配的频率,用归一化的频率估计概率,进行最大似然估计,估计出在自然界中各残...
2020-01-26 17:59:42
333
原创 似然,似然,似是而然!
似然,似然,似是而然!1.1 似然是蛤?在统计学中,似然和概率可是两码事。 概率:在已知的模型下,某事件发生的可能性。 似然:在未知的模型下,发生了一系列的事件,有这些事件的结果去估计该未知模型的相关参数(条件)。 举一个小例子可能会更形象。现在我有一枚标准的硬币,我将它抛在了空中,这时我想知道它落地时是正面朝上的可能性是多少?毫无疑问,因为该硬币是标准的,正面和反面朝上的概率是~~ 五...
2020-01-21 17:58:31
304
原创 双序列比对的基础(2)之替换(计分)矩阵系列
双序列比对的基础(2)之替换(计分)矩阵系列 主要以BLOSUM矩阵与PAM矩阵的介绍为主。 声明:该部分书中内容介绍有点少,所以我上网搜索到几篇文献和和国外大学的相关课件(从一个研究生博主处获得)。那本篇文章就先介绍BLOSUM矩阵吧 BLOck SUBstitution Matrix:BLOSUM矩阵。 详细的来说,它们来自一组蛋白质家族中联配上的无空位区域,这些蛋白家族源于BL...
2020-01-17 19:11:49
4919
4
原创 双序列比对的理论基础(一)
双序列比对的理论基础(一)比对的具体流程:1使用字符串模拟生物序列,那么两条序列的相似性比对可看成两个字符串的对齐,运用特定的算法搜索所有可能的比对方案。2 采用具有生物学意义的打分机制(替换矩阵),衡量算法的比对结果,获得最优比对。1.1 字符模型的建立。两条序列x和y;长度分别为m和n;xi 表示序列x中的第i个字符。yi 表示序列y中的第i个字符。这些字符全部来自字母表Ω=...
2020-01-15 09:39:49
1972
原创 Smith-Waterman算法C++实现
哇。生物专业的复习月可不是盖的,十几门的专业课,并且是纯背的。。。。提前一个月开始复习,复习吐了,写个博客调节调节。。本次介绍的局部双序列对比算法,也就是SW算法。基本上的话,只要学了NW算法也就差不多理解了SW算法了。这个算法顾名思义,就是找到最佳的局部片段。注意这个最佳,怎末实现。这个最佳可以翻译为,从所有的比对情况中,截取得分最高的片段。当一个比对情况形成时,也就是这个情况的计分值不...
2019-12-20 22:07:15
1368
原创 创建了一个Github账号。
咱创建了个仓库,里面的博客项目下将有咱CSDN以往博客,以后更新也会同步更新。能去Github点个星就再好不过了。项目入口
2019-11-19 19:33:20
93
原创 Neddle-Wunch算法的C++实现
生物信息课要求每人准备一个ppt,介绍生物信息学领域的相关内容。所以我脑海中瞬间浮现了NW算法与遗传算法。正好一个是计算机技术解决生物问题,一个是生物学思想指导的算法。接下来大部分时间用来NW算法的代码了,发现写着还是有点难度的,毕竟这么久没有写代码了。NW算法的核心就是动态规划,结合设定的罚分矩阵,思路挺容易的,就是实现的时候,要记得走过的最优路径,并且最后显示出来。 课上的讲解,效果其实...
2019-10-29 19:18:29
780
5
原创 基本的pso算法
PSO算法中的微粒飞行规则类似于鸟类的运动,从而使得整个微粒群的运动表现出与鸟类觅食类似的特性,进而用于求解复杂的优化问题,该算法的基本思想是通过群体中之间的协作和信息共享来寻找最优解。基本流程:初始化种群和速度—>计算适应度值—>找到个体的极值和种群的极值——>速度更新和个体更新—>计算适应度值—>更新个体极值和种群的极值—>判断是否满足终止条件(如果是否...
2019-09-04 20:16:42
791
原创 智能优化算法之模拟退火算法
详细的代码解释及背景,过几天再进行补充%模拟退火算法%问题背景是tsp问题,有100个旅游景点。并且假设距离矩阵d已经给出。%d已知sum=inf;for j=1:1000 S=[1,1+randperm(100),102]; temp=0; for i=1:101; temp=temp+d(S(i),S(i+1)); en...
2019-09-02 20:59:54
279
原创 改良圈算法(matlab+算法过程实例)
改良圈算法的目的是得到一个较好的初始解。在遗传算法中就应用到了该算法。首先,本文介绍改良圈的背景是TSP问题(旅行商问题),可参加《数学建模算法与应用》。改良圈算法是基于最邻近算法的。比如,我们地图上有1,2,3,4这四个点,我们首选初始路径不妨为1->2->3->4。假设他们的权值矩阵是w,则初始路径的距离总和为w12+w23+w34,我们如果想要走最短的路径,可以让计...
2019-08-13 10:19:02
6220
5
原创 遗传算法及其matlab实现
遗传算法,模拟达尔文的自然选择和遗传学的机理的生物进化的计算模型。其实,遗传算法用到生物学的知识不多,一些中学的生物知识就足以应付。 其实,接触遗传算法是有一种熟悉的感觉。因为假期涉猎了机器学习,其中接触的第一个相关的算法就是梯度下降算法。(有关这个算法,以后再记录),这个算法的作用就是通过求偏导,使梯度不断下降,最终达到了一个局部的最优解。但是问题来了,在很多工业生产实践中,通常是不可微...
2019-08-09 15:33:11
886
原创 轮盘赌算法以及matlab的实现
轮盘赌算法其实是一种选择算法。原理其实很简单,通常运用于遗传算法与蚁群退火算法等。如遗传算法中的个体的选择。总之,用处很大。下面介绍,轮盘赌的基本原理。运用的情景:一个公司进行考核淘汰员工,有员工四位,其为公司创造的价值分别是900,200,80,100.公司老板突发奇想不想进行末位淘汰,而是想要产生随机数进行统计,通过产生1000次的随机数,来看看,那位员工被淘汰。首先,我们应知道个体的...
2019-08-07 21:02:44
8524
3
原创 常用的数据结构之弗洛伊德算法
弗洛伊德算法是解决一个顶点到图中一个顶点的最短路径问题。通常适用于一对顶点间的最小路径.。void Floyd(Mgraph g,path[maxsize]){ int A[maxsize][maxsize]; for(int i=0;i<g.n;i++){ for(int j=0;j<g.n;j++){ A[i][j]=g.edges[i][j]; path...
2019-06-16 21:08:40
614
原创 动态规划之编辑距离
给定两个字符串,一个是字符串a,一个是字符串b。可以对字符串b进行增加元素,删除元素,或者将一个字符改成另一个字符,问最少可以进行多少步操作,将字符串b完全变成字符串a。分析:其实编辑距离问题就是序列比对算法。其可以看作是Needle-wunsh算法的简化形式。通过引入打分矩阵进行操作。下面我们进行具体的分析。当a[i-1]==b[j-1]时,我们直接让dp[i][j]=dp[i-1][j...
2019-06-12 21:13:01
179
原创 动态规划之回文串
题目:例如给定一个字符串:“trit",你只可进行插入任何一个字符,问最少插入多少个字符使之变成回文串?例如本个例子只需要再插入一个r即可。思路分析:此题目一开始思索了很久,最后看了题解,才恍然大悟。该题应根据回文串的特性,进行倒着分析。即如果是回文串的话,那么这个串颠倒过来后,应该与原来字符串相等,即他两个的最大公共子序列的长度为该字符串的长度。那么,在原来字符串不是回文串的情况下,...
2019-06-04 21:06:07
885
原创 动态规划之删除最少的元素
问题描述给定有 n 个数的 A 序列:A1,A2,A3…An 。对于这个序列,我们想得到一个子序列 Ap1,Ap2⋯Api⋯Apm(1≤p1< p2<⋯pi<⋯< pm≤n),满足 Ap1≥Ap2≥⋯≥Api≤⋯≤Apm 。从 A 序列最少删除多少元素,可以得到我们想要的子序列。输入格式第一行输入一个整数 n,代表 A 序列中数字的个数。第二个输入 n 个整数,...
2019-06-01 11:00:08
633
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人