蛋白二级结构预测(ANN神经网络、BP算法)

本文介绍了利用ANN神经网络和BP算法进行蛋白质二级结构预测的过程,包括前言、蛋白质二级结构预测的介绍以及程序实现的详细步骤。作者强调了程序从底层构建,包括神经网络、数据处理、错误检查、预测和结果展示。此外,还涉及数据的爬取和处理,用于预测未知蛋白质序列的二级结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

蛋白二级结构预测(ANN神经网络、BP算法)

前言

​ 给我们上这部分课程的老师是包家立包老师,同时我也在上包老师的另一门课——计算生物学,也因此对这部分内容了解的也更多一些。对包老师也接触的更多,老师非常负责,也是少有的讲课还写板书的几位。在他的课上学到了很多关于计算的底层原理,算一算可能学了半本信息论、贝叶斯公式、神经网络和隐含马尔可夫的模型和应用。希望以后还有机会继续向老师学习。

蛋白质二级结构预测

​ 蛋白质的二级结构指的是氨基酸链中对应的每个氨基酸的结构,主要分为八类H、B、E、G、I、T、S、Blank。实际上在做的时候只采用三级分类:H、E、C,分别代表helix , sheet , coil。我们要做的就是通过海量的数据(已知的蛋白序列和其对应的二级结构)进行机器学习,把神经网络的模型完善,也就是将每个神经元的权值调整到最合适。使得对二级结构未知的蛋白质序列能够实现较高准确度的预测。

程序

​ 近一周多来花了很多时间也可能是所有清醒的时间在做这个程序,和网上的很多程序不一样之处在于完全是从底层写起的,从神经网络的构建,数据的存储以及运算时采用的方式都是靠基本数学运算和函数的循环以及条件判断来实现的。也正是全部靠自己做才能在一周多的时间里对python由门外汉开始慢慢学着做出"细致"的程序,对机器学习有了更多的认识,也让我选了一门下学期的人工智能。对于我来说,写程序不是最终的目的,终究只是一个实现方法罢了,不想日后成为一个分析工具,只为了完成任务,却失去了自己发现问题和解决问题的冲动。

​ 先将程序的主页面放上来,其中由详尽的页面注释。

在这里插入图片描述

​ 接下来附上我的程序代码,在每一步中都注释的尽可能详尽,希望能帮到和此前的我一样迷惑的人。

import math
import numpy as np
import tkinter as tk 
from tkinter import *
import tkinter.messagebox
# tkinter 是制作python图形界面的一个工具,程序以图形界面为主体,把具体的功能以函数的形式插入
import webbrowser
# webbrower 能让我们的程序和系统的软件交互,通过浏览器打开PDB的数据网页时会用到

window = tk.Tk()
window.title('蛋白二级结构预测')
# window 是创建的窗口的变量名,title是程序名

# 定义图形界面中会用到的控件和程序中会用到的全局变量
e=[None]*10 # 输入&Text
l=[None]*10 # 标签
b=[None]*10 # 按钮
lb=[None]*10 # 选择列表

# 定义一些全局变量,因为这些将会被用在我们的函数中,另外如果希望在函数中的修改返回到全局变量,需要声明
results = {
   }
进度=0
预测结果=0
urls=''

# 这个部分定义了页面中的所有标签,提供必要的指示信息
l[0] = Label(window, text='Dataset:CB513', font=('Arial', 14), bg='gold', width=20, height=2,relief='ridge').grid(row=0,column=1,sticky="e")
l[1] = Label(window, text='By 建豪 3170103102', font=('Arial', 14), bg='gold', width=20, height=2,relief='ridge').grid(row=0,column=2,sticky="e")
l[2] = Label(window, text="蛋白序号:", font=('Arial', 12)).grid(row=2,column=2)
l[3] = Label(window, text="损失(loss):", font=('Arial', 12)).grid(row=2)
l[4] = Label(window, text="预测结果:", font=('Arial', 12)).grid(row=6)
l[5] = Label(window, text="预测序号:", font=('Arial', 12)).grid(row=4)
l[6] = Label(window, text='蛋白的氨基酸序列:', font=('Arial', 12)).grid(row=4,column=2,columnspan=2)
l[7] = Label(window, text='蛋白的二级结构序列:', font=('Arial', 12)).grid(row=6,column=2,columnspan=2)
l[8] = Label(window, text='学习进度:', font=('Arial', 12)).grid(row=7,column=0)

# 列表框的作用在于能够提供一个选择,返回的是数值,一共23个蛋白质,其中的数据就是seq.txt中的后23个蛋白质
lb[0] = Listbox(window,height=4,selectforeground="red")
lb[0].grid(row=4, column=1)
for i in range(1,23):
    lb[0].insert('end',i)

# Entry是单行输入的,能够很方便的提供返回值,返回的都是字符串,所以当要求的是数字类型时需要转化
# 而Text是多行文本的显示,还不了解能否作为输入,注意Text的行列定位和python平时用的不大一样,行从1开始,# # 而列从0开始
# 要注意的是grid不能直接写在定义的语句的同一行,否则会导致读写时发生报错,所以需要定义、位置、插入三个分开# 写。占多行或者多列需要用columnspan或者rowspan。

e[1] = Entry(window)
e[2] = Entry(window)
e[3] = Entry(window)
e[4] = Entry(window)
e[5] = Text(window, width=40, height=5)
e[6] = Text(window, width=40, height=5)
e[7] = Entry(window)
e[8] = Text(window, width=40, height=6)
e[1].grid(row=2, column=3, padx=10, pady=10)
e[2].grid(row=2, column=1, padx=10, pady=10)
e[3].grid(row=6, column=1, padx=10, pady=10)
e[4].grid(row=5, column=1, padx=10, pady=10)
e[5].grid(row=5, column=2, columnspan=2)
e[6].grid(row=7, column=2, columnspan=2)
e[7].grid(row=7, column=1, padx=10, pady=10)
e[8].grid(row=9, column=2, columnspan=2)
e[1].insert(0, '2CDV')
e[2].insert(0, '0.3~0.9,预留值为0.5')
e[3].insert(0, 预测结果)
e[5].insert(END, 'APKAPADGLKMDKTKQPVVNHSTHKAVKCGDCHHPVNGKENYQKCATAGCHDNMDKKDKSAKGYYHAMHDKGTKFKSCVGCHLETAGADAAKKKELTGCKGSKCHS')
e[7].insert(0, '%.2f'  % (进度 * 100) + '%')
e[8].insert(END, '  左侧:学习过程和指定蛋白的预测过程。请先选择loss后开始学习。然后选择希望预测的蛋白序号,将会给出预测的成功率。          右边:利用了爬虫技术能够将网页上的数据download到本地,并且利用左边的学习模型进行预测。')
输入氨基酸序列=e[5].get(1.0,1.555)

# b中定义了一系列功能按钮,会触发'commend'里面的函数,注意,函数如果加上了()则会直接运行一遍。所以应该去# 掉()。此处可以将位置和定义写在一起。
b[1] = Button(window, text='查询', font=('Arial',12), width=10, command=chaxun,  relief='ridge',cursor='hand2',bg='orange').grid(row=8,column=0, sticky='w', padx=10, pady=5)
b[2] = Button(window, text='预测', font=('Arial',12), width=10, command=yuceknow,relief='ridge',cursor='hand2',bg='orange').grid(row=9,column=1, sticky='e', padx=10, pady=5)
b[3] = Button(window, text='清空', font=('Arial',12), width=10, command=shanchu, relief='ridge',cursor='hand2').grid(row=8,column=1, sticky='e', padx=10, pady=5)
b[4] = Button(window, text='学习', font=('Arial',12), width=10, command=study,   relief='ridge',cursor='hand2',bg='orange').grid(row=9,column=0, sticky='w', padx=10, pady=5)
b[5] = Button(window, text='Add' , font=('Arial',12), width=3, command=tianjia, relief='ridge',cursor='hand2').grid(row=5,column=0, sticky='e', padx=10, pady=5)
b[6] = Button(window, text='submit',font=('Arial',12),width=10,command=pachong, relief='ridge',cursor='hand2',bg='orange').grid(row=3,column=2, padx=10, pady=5)
b[7] = Button(window, text='预测', font=('Arial',12), width=10, command=yuceunkw,relief='ridge',cursor='hand2',bg='orange').grid(row=3,column=3, padx=10, pady=5)

window.mainloop()

​ 以上是关于界面的部分,接下来将给出按钮对应的函数部分,包括了具体的功能实现代码。

​ 数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值