Kaggle竞赛:Human Protein Atlas Ima

2019-05-25  本文已影响0人  深度学习模型优化

脚本参考这里

1 代码分析

模型的设置

class KernelSettings:
    
    def __init__(self, fit_baseline=False,
                 fit_improved_baseline=True,
                 fit_improved_higher_batchsize=False,
                 fit_improved_without_dropout=False):
        self.fit_baseline = fit_baseline
        self.fit_improved_baseline = fit_improved_baseline
        self.fit_improved_higher_batchsize = fit_improved_higher_batchsize
        self.fit_improved_without_dropout = fit_improved_without_dropout

这里设置了4个层次。

使用变量use_dropout来表示是否在网络训练中加入dropout层。

在../input/文件下有两个文件夹。

['protein-atlas-eab-predictions', 'human-protein-atlas-image-classification']

这里主要使用文件夹human-protein-atlas-image-classification中的内容来进行分类,在该文件夹下面有2个文件夹和2个文件分别是

这里需要注意的是,train.csv的target中可能包含多个标签,因此做数据处理的时候这个要着重处理下。也就是说在一张图片中可能有多种蛋白质。

代码继续往下,训练数据总共有31072张图片,提前想想也知道我们的数据一定存在样本不均衡的问题。用sklearn的StratifiedKFlod的方法吗?后面再看吧。

用来测试的图片有11702张,那么
\frac{test\_num}{train\_num} = \frac{11702}{31072} = 0.3766

表示测试数据是训练数据的38%。这个比例还是可以的。

对target的field做处理,这里用到了pandas的DataFram的apply函数技巧,注意使用apply对行进行处理要用到axis=1这个参数,否则默认为axis=0,就是对列进行处理了。

对target的处理是,将每列的target都转换为一个整数类型的数值列表,使用apply函数对指定分类下的target进行标记,如果在数值列表中有,则记为1,其它为0。

经过改变之后对标签进行统计,如下图所示


图1 蛋白质数量分布

由图1可知,有明显的样本不均衡的问题。

再来看看标签之间的相关性,就是混淆矩阵


图2 混淆矩阵

由图2可知,Lysosomes和endosomes相关性非常高,几乎同时出现。

上一篇 下一篇

猜你喜欢

热点阅读