简历项目(一)基于稀疏表示的多动症疾病分类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vivizhangyan/article/details/81914924

项目背景:给定的多动症疾病数据,利用稀疏表示进行特征空间分离,实现对患病和正常人的分类测试,通过分类准确率量化算法的性能。
项目难点:对患病和非患病的数据进行特征空间分离时,会存在误分类,即会出现假正例,假反例,也就是会把患病的分到不患病的特征里面。
项目工作:
(1)模型建立
疏表示的特征空间分离模型,用于区分患病与正常的特征。
稀疏表示:通过训练数据构建字典,然后通过字典学习表示数据特征的方法。就像小时候学习语文中的一句话,我们想要理解这一句话的意思就需要通过查询字典,整个句子就可以通过几个词合并起来,成为一句我们可以理解的话。这里面我们说的字典就如同稀疏表示的字典,我们理解这句话的过程就是字典学习的过程。具体的表示可以参考稀疏表示
稀疏表示的好处:可以对庞大的数据集进行降维表示,与压缩感知相类似。
在本项目中,稀疏表示的具体过程为:
a.输入给定的数据集,首先进行字典的初始化,一般常用DCT作为初始字典,参数设置字典的大小.
b.系数求解:需要对字典归一化,防止数值异常影响结果,求解稀疏系数,采用OMP算法进行逼近求解
c.字典学习:通过获得的系数和进行字典更新,进而进行数据特征的表示,由此获得数据的特征
(2)特征选取
采用SVMRFE进行特征排序,剔除不重要的特征数据
(3)数据分类
采用SVM函数进行分类
整个项目的代码流程:
(1)数据读入: data = load()
(2)数据分为测试集和训练集:P = cvpartition(Y_sample,’Holdout’,0.1); 选取样本的10%进行测试对于数据集类别不均衡的情况采用SMOTE方法
(3)字典初始化:随机构造矩阵
(4)字典学习:字典归一化后,进行OMP算法求解稀疏系数

D_temp = D_temp./(ones(size(X_data_temp))*temp); % normalized dicitonary for OMP
coef = omp(D_temp, X_data_temp, [], T_sparsity);

(5)字典学习:采用的是D = ksvd()方法进行字典求解
(6)特征排序:采用SVM-RFE特征递归消除进行特征排序,确定数据集中重要的特征。

[ftRank,ftScore] = ftSel_SVMRFECBR(X_train_temp(:,1:end-1),Y_train_temp,nStopChunk);

(7)SVM训练:

   SVMStruct = svmtrain(data_train,double(2*(inform_train.tag>0)-1),'tolkkt',0.05,'kktviolationlevel',0.02,'kernel_function','rbf'); 

这里面参数采用的RBF高斯核进行训练。

(8)分类

 species = svmclassify(SVMStruct,[X_new' X_test_temp_phenotypic_tmp]);

(9)正确率求解
cal_kkk(kkk,:)=sum(ACC’)/testN/P.TestSize

总结:
<1>采用MATLAB编程实现分类算法,虽然该算法与机器学习的相关算法相比运行速度较慢,但是该算法在分类率上却比深度学习的算法有所提高,尤其对于小数据集而言。
<2>算法流程关于数据处理的部分采用的与深度学习的方法类似。

猜你喜欢

转载自blog.csdn.net/vivizhangyan/article/details/81914924