Data whale AI夏令营(第三期)笔记-part1

baseline介绍

data whale很友好的给出来了本次的baseline。本次比赛属于二分类问题。整体baseline符合标准的机器学习的步骤:对数据进行预处理后,提取出相应的特征。接着利用sklearn库中的逻辑回归,简单的运行得到最后的结果。

数据提取
逻辑回归
得到结果

整体来讲框架非常简单,私以为重点在于特征提取步骤上。

库的介绍

由于本次比赛为医疗影像比赛,因此需要使用医疗影像相关的library。
本人也是第一次了解这个库,nilabel。
NiBabel可以对常见的医学和神经影像文件格式进行读写,如.nii格式。
OrthoSlicer3D是nibabel.viewers中的一个函数,用于可视化医疗影像。

医疗数据

医疗数据有四个关键的组成部分–像素深度、光度解释、元数据以及像素数据。这几部分决定了图像的大小和分辨率。

后缀名为.nii的文件格式又叫NIfTI-1,一般储存3D或者4D的数据。它改编自广泛使用的ANALYZE™7.5格式。一些比NIfTI-1发展早的老软件也可以兼容NIfTI-1。
比ANALYZE 7.5新的特性如下:

–将体素索引(i,j,k)与空间位置(x,y,z)相关的仿射坐标定义
–表示FMRI(核磁共振)的时空切片顺序的代码;
–“完整”的8-128位数据类型集;
–在1-4维域上存储矢量值数据集的标准化方法;
–表示数据“含义”的代码;
–向标头添加“扩展”数据的标准化方法;
–双文件(.hdr和.img)或单文件(.nii)存储;

特征提取

在这里,我们重点看一下特征提取的代码。因为baseline的代码简单易懂,不需要做太多介绍。
以下是用于提取特征所使用的函数extract_feature:
首先利用load函数加载数据,接着通过dataobj属性,只获得所有数据的第一个通道的数据。
官网上写着,“The dataobj property of a proxy image is an array proxy. We can ask the proxy to return the array directly by passing dataobj to the numpy asarray function:”,此时img应该提取成为一个数组。
然后利用array所带的shape属性,随机选10个数据,把其中的特征提取出来。
接着通过计算像素0和1的数量以及随机提取到的这些特征所求出来的均值,和标准差,以及行向量列向量均值为0和为0的个数,以及行方向列方向的最大平均值。这些东西应该是一些评判标准。

def extract_feature(path):
    # 加载PET图像数据
    img = nib.load(path)
    # 获取第一个通道的数据
    img = img.dataobj[:, :, :, 0]
    # 随机筛选其中的10个通道提取特征
    random_img = img[:, :, np.random.choice(range(img.shape[2]), 10)]
    # 对图片计算统计值
    feat = [
        (random_img != 0).sum(),               # 非零像素的数量
        (random_img == 0).sum(),               # 零像素的数量
        random_img.mean(),                     # 平均值
        random_img.std(),                      # 标准差
        len(np.where(random_img.mean(0))[0]),  # 在列方向上平均值不为零的数量
        len(np.where(random_img.mean(1))[0]),  # 在行方向上平均值不为零的数量
        random_img.mean(0).max(),              # 列方向上的最大平均值
        random_img.mean(1).max()               # 行方向上的最大平均值
    ]
    
    # 根据路径判断样本类别('NC'表示正常,'MCI'表示异常)
    if 'NC' in path:
        return feat + ['NC']
    else:
        return feat + ['MCI']

在测试集,和训练集上都进行30次特征提取之后,将训练集中的数据和最后所得到的结果进行逻辑回归。
再将测试集放入得到的逻辑回归结果,对测试集进行30次预测。选择票数更多的那个分类选项作为测试集的最终结果。
将所有结果写入dataframe中,即可提交比赛结果。

本人对datawhale的一些印象和描述

大学疫情在家2020年的时候,就有了解datawhale。参加过datawhale的活动(但是上手就要使用docker什么的,其实对我来讲有点困难。)我那会儿对机器 学习这些的了解也仅限sklearn,knn,pca主成分分析,决策树等等。当时参与整个活动,很多东西不了解导致压力很大,没有坚持下来。
后面购买我购买了datawhale所出版的南瓜书,同时我读研究生,由电子信息工程转CV了,大四毕业之前开始接触怎么配置yolov5的环境,运行yolov5,同时毕业设计做的工作为数字图像处理方向的内容,现在基本上可以上手了。
此时我有一位多年的网友,叫他小卢吧。他加入了data whale, 这让我觉得很厉害。因为小卢的工作和深度学习有关,我们经常一起交流mmdetection框架等上面的问题,他也会在朋友圈分享一些data whale相关的信息。所以我也会关注一下data whale的活动。也正因如此,我才能看见这次夏令营活动,和大家一起学习。
以上便是本人的一些经历,以及对data whale 的印象和加入本次夏令营活动的原因。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值