前言
SVM
在机器学习中,
支持向量机(support vector machine,
常简称为 SVM
,又名支持向量网络)是一种在分类与回归任务中处理据的监督学习模型和算法。
SVM 模型是将样本表示为空间中的点,这样的映射就使得同一类别的样本被尽可能宽的间隔分开。然后,将新的样本映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。
支持向量机(SVM)应用起来很简单,性能也非常强大。今天我用 SVM 来解决一个医学影像学方面非常简单的问题。我们心血管影像学应用最广泛的临床实践就是冠脉造影检查。现在我就来构建一个模型,用以分辨给定的造影图像类别,即在得到一张造影图像后,让电脑轻松地判断这张图是左冠脉的图像(LCA)还是右冠脉(RCA)的简单任务(说实话挺弱智的)。
模块框架的导入
首先,导入模块。在机器学习算法中,我用的是非常流行的 scikit-learn 模块中的 svm 对象,还有 metrics 中的 classification_report 和 confusion_matrix。到后面还要将模型保存下来,使用的是 joblib 对象。
from PIL import Image
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.externals import joblib
%matplotlib inline
最后一行是一个 jupyter notebook 的 magic,功能就是可以在 notebook 中显示图像。
造影图像的读取
我选取了 40 个图像样本(20 个为右冠脉,20 个为左冠脉,比为 1:1),34 个做训练样本(左右比仍为 1:1);6个做测试样本。
应用 PIL 包对图像文件进行读取,并添加到 list 变量中:
for i in range(num_lao):
if i <10:
filename = 'CAG/p000'+str(i)+'l.bmp'
elif i>=10 and i<100:
filename = 'CAG/p00'+str(i)+'l.bmp'
img = Image.open(filename)
img_lao.append(img)
for i in range(num_rao):
if i <10:
filename = 'CAG/p000'+str(i)+'r.bmp'
elif i>=10 and i<100:
filename = 'CAG/p00'+str(i)+'r.bm