问题一难度较低,主要是找出对生物活性最具有显著影响的分子描述符,具有影响意味着该分子描述符与生物活性的相关性越高,因此可以构建相关性分析模型来分别计算各分子描述符与生物活性的关系,找出相关性最大的20个变量即可。目前有同学说用皮尔逊系数做的结果并不是很好,这是因为皮尔逊系数主要适用于单调线性变化的数据,而题目中的数据并没有明显的单调性质,因此得到的结果可能并不好,这时候建议大家可以试一下灰色关联分析模型,他是根据因素之间发展趋势的相似或相异程度,亦即“灰色关联度”,作为衡量因素间关联程度的一种方法。
灰色关联分析代码如下
%数据替换为自身研究数据,代码会自动去除量纲
clear;clc;
load data.mat;
r = size(data,1);
c = size(data,2);
%第一步,对变量进行预处理,消除量纲的影响
avg = repmat(mean(data),r,1);
data = data./avg;
%定义母序列和子序列
Y = data(:,1); %母序列
X = data(:,2:c); %子序列
Y2 = repmat(Y,1,c-1); %把母序列向右复制到c-1列
absXi_Y = abs(X-Y2)
a = min(min(absXi_Y)) %全局最小值
b = max(max(absXi_Y)) %全局最大值
ro = 0.5; %分辨系数取0.5
gamma = (a+ro*b)./(absXi_Y+ro*b) %计算子序列中各个指标与母序列的关联系数
disp("子序列中各个指标的灰色关联度分别为:");
ans = mean(gamma)
针对问题二:该问题主要是构建生物活性与20个分子变量之间的逻辑关系,主要有两种思路,第一种是构建多元线性模型,及构建y=a1x1+a2x2+...+a20x20关系,然后求解a1,a2,...a20系数即可;第二种思路是构建神经网络模型,建立变量与生物活性之间的非线性拟合关系,这里最好别用BP神经网络,因为输入数据的参数较多,很容易陷入局部最优解,可采用遗传算法优化的BP神经网络模型或粒子群算法优化的神经网络模型等,建立上述逻辑关系后将test表中数据带入即可。
有同学说这个关系如何构建,能不能用回归分析的思路,回归分析肯定是用线性回归,非线性对于这么多的指标难度太大而且也不好把握,但如果线性回归其关系式又太过简单(毕竟医学领域用线性关系构建的可能性很小)因此回归算法在这里并不推荐。
还是主推神经网络之类的非线性拟合模型,对于未知关系的拟合不借助任何参考关系式,而是采用权值链接在一起,精度会更高一些,但注意过拟合和误差分析问题,并不局限于用BP神经网络,径向基网络,LM-BP神经网络等也可以试一下
%程序一:GA训练BP权值的主函数
function net=GABPNET(XX,YY)
%--------------------------------------------------------------------------
% GABPNET.m
% 使用遗传算法对BP网络权值阈值进行优化,再用BP算法训练网络
%--------------------------------------------------------------------------
%数据归一化预处理
nntwarn off
XX=[1:19;2:20;3:21;4:22]';
YY=[1:4];
XX=premnmx(XX);