R
PCA
Logistic
Python
PyTorch
CNN
数据集来自 Kaggle 的仓库 CT-Images
概述
CT-Images 数据集包括
拟研究的问题:CI-Images 肺部 CT 图的“正常-患癌”二分类问题。CT-Images 数据集包括
其中每一个 CT 图已经过处理,为 .jpg
格式,具有 RGB 三通道。但都经过了黑白化处理,可以转换为 .png
单通道格式读入程序(tips: 图片像素点在处理后值仅为
图像数据可以理解为一个
在本项目中,我们先读取图片,得到
如此将
由于原来的样本数据向量
主成分分析(Principal Component Analysis, PCA)由 Hotelling 于 1933 年首先提出 [1] 。 目的是把多个变量压缩为少数几个综合指标(称为主成分),使得综合指标能够包含原来的多个变量的主要的信息。下面以总体主成分为例,进行算法推导:
对于我们这个问题的每一个样本,在被抽样前均为随机变量
其中
记
如上构造的主成分
在本问题中,为实现降维,可以选择这
如果我们已经获取到了样本信息,构造出了样本矩阵
由 引理 1 :正定阵
可知原问题最优解
其中
注意到
若记
故有
虽然上面的方法已经极大地节约了计算成本,但当遇见
其中
为了实现这个目标,G Golub, W Kahan 于 1965 年提出了 Golub-Kahan 双对角分解法 [2] 用于求解 SVD 分解问题。而 J Baglama, L Reichel 于 2005 年进一步提出了 IRLBA 算法 [3] 用于高效解决奇异值近似问题。
除了使用主成分分析法,在计算机视觉中 池化 Polling 也是常见的图像降维、图像压缩方法。池化的概念最早由 LeCun (et al. 2002) 在 LeNet
网络中提出 [4] ,常见的池化操作有均值池化、最大池化 (Krizhevsky A, Sutskever I, Hinton G E, et al. 2012 在 AlexNet 网络中使用 [5] ) ,本项目采用最大池化尝试进行降维。
池化操作可以简单理解为使用一个固定大小的窗口,按顺序在原始图片上进行“扫描”并计算得到新图片的过程,图片大小变化公式为:假设原始图片大小为
符号 | 名称 | 作用 |
---|---|---|
Kernel size | 池化窗口大小 |
|
Stride | 每次窗口移动的步长,默认与 |
|
Padding | 是否在边缘补 |
|
Dilation | 膨胀系数,即在一个池化窗口中被选取的像素相隔 |
在本项目中,按照
对于分类问题,一个简单的想法就是通过 聚类分析。我们使用 R
语言的 cluster
包,使用 K-Means
算法,对所有数据($3000$ 张图片)进行降维后
对于样本
其中
对于经过降维之后的数据向量 normal
和 cancer
,从样本的 normal 和 cancer 中分别随机抽取
对于 Logistic 回归模型,需要估计的参数为
使用数值方法估计参数
模型参数的估计:对于已有的训练集
通过极大化对数似然函数的方法,估计参数
在本项目中,选择
模型解释:对于变量/主成分 odds
就会扩大/缩小
测试集检查:在剩下的
直接使用 PCA ,若保留的主成分过多会带来计算复杂,若选取太少则会导致结果不佳。所以,接下来我们采用 Logistic + LASSO 的方式进行间接变量选择。
LASSO 回归 (Robert Tibshirani 1996. [6]) :在回归参数估计时,加入 L1 范数作为惩罚项。即对于本项目的 Logistic 回归的参数估计,需要优化的式子为:
其中 $| \beta |1 = \sum{j=1}^{q'+1} |\beta_j|$ 为向量
先使用 MaxPooling 进行降维,故
利用 R 语言自带的函数,增加 L1 范数作为惩罚项,得到
测试集检查:在剩下的
使用卷积神经网络 CNN 可以进一步提高预测的准确率,本项目实现了 2 个神经网络用于展示 ShallowCNNModel
和 CNNModel
,实现代码位于 cnn.py 文件中。其中 ShallowCNNModel
网络架构以及训练预测主程序框架来自 Kaggle 开源代码 lung-Ctscan 。CNNModel
是本项目实现的更深的卷积神经,预测效果更好 (基于 AlexNet 网络框架) 。
训练和预测日志可见 logs 文件夹,其中 logs_shallow.txt 为 lung-Ctscan 模型的日志, logs.txt 为本项目模型的日志。 checkpoints 文件夹存储了训练后的模型参数,因为参数文件较大,故不上传。模型均在 Kaggle 提供的 GPU 环境下进行训练,最优结果如下所示。
因为
CNNModel
参数过多,可能导致过拟合的问题,当过拟合时结果为:Train Acu =$96.67$ % ,Val Acu =$96.22$ % ,Test Acu =$94.22$ % 。以CNNModel
为例,网络参数数量总共有$57220802 \approx 5700$ 万个,远远大于机器学习模型的参数。
Model | Train Loss | Train Acu | Val Loss | Val Acu | Test Loss | Test Acu |
---|---|---|---|---|---|---|
ShallowCNNModel |
|
|
|
|||
CNNModel |
|
|
|
可执行的 Notebook 代码已开源在 Kaggle ,链接 CT-Images-CNN ,可使用 Kaggle 或 Colab 提供的 GPU 平台进行训练。
本项目完成了对胸腔截面 CT 医学图像进行二分类的任务:
- 使用主成分分析 (PCA) 和最大池化 (MaxPooling) 对图像进行特征提取和降维处理。
- 若采用简单的聚类分析,分类准确率为
$63.57$ % 。 - 利用 Logistic 模型作为分类器,实现对数据集的二分类任务,最终测试集准确率达到
$76.00$ %。 - 为了在尽可能不损失信息和计算高效权衡,使用 MaxPooling 初步降维,然后使用 LASSO 回归辅助 Logistic 回归筛选变量,得到最终模型,测试集准确率高达
$98.30$ % 。
拓展:使用卷积神经网络进行分类,测试集准确率大约为
$94.22$ % 到$96.67$ % 。
[1] Hotelling H. Analysis of a complex of statistical variables into principal components[J]. Journal of educational psychology, 1933, 24(6): 417.
[2] Golub G, Kahan W. Calculating the singular values and pseudo-inverse of a matrix[J]. Journal of the Society for Industrial and Applied Mathematics, Series B: Numerical Analysis, 1965, 2(2): 205-224.
[3] Baglama J, Reichel L. Augmented implicitly restarted Lanczos bidiagonalization methods[J]. SIAM Journal on Scientific Computing, 2005, 27(1): 19-42.
[4] LeCun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 2002, 86(11): 2278-2324.
[5] Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[J]. Advances in neural information processing systems, 2012, 25.
[6] Tibshirani R. Regression shrinkage and selection via the lasso[J]. Journal of the Royal Statistical Society Series B: Statistical Methodology, 1996, 58(1): 267-288.
Call:
glm(formula = cancer ~ PC1 + PC2 + PC3 + PC4 + PC5 + PC6 + PC7 +
PC8 + PC9 + PC10, family = binomial(), data = data)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.010565 0.055126 -0.192 0.848015
PC1 0.013860 0.001733 7.999 1.25e-15 ***
PC2 -0.020969 0.002185 -9.598 < 2e-16 ***
PC3 -0.014640 0.002798 -5.233 1.67e-07 ***
PC4 0.005460 0.002847 1.918 0.055143 .
PC5 0.036270 0.003616 10.029 < 2e-16 ***
PC6 -0.018562 0.003679 -5.046 4.52e-07 ***
PC7 0.028268 0.004190 6.746 1.52e-11 ***
PC8 0.034457 0.004875 7.068 1.58e-12 ***
PC9 -0.018465 0.005223 -3.535 0.000408 ***
PC10 -0.090350 0.005876 -15.377 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2772.6 on 1999 degrees of freedom
Residual deviance: 2037.0 on 1989 degrees of freedom
AIC: 2059
Number of Fisher Scoring iterations: 4
y_test
pred_test 0 1
0 75 23
1 25 77
- 根据系数绘制特征图
$56 \times 56$ 等比例放大后,红色代表系数为正,蓝色代表系数为负
- 压缩后的
$56 \times 56$ 的特征图
- 反池化的
$224 \times 224$ 特征图
predictions
y_test 0 1
0 494 6
1 11 489