一.理论方法介绍
SVM(Support Vector Machine)指的是支持向量机,是常见的一种判别方法。在机器学习领域,是一个有监督的学习模型,可以用来进行分类研究。
SVM二分类
SVM二分类的基本思想是在特征空间中寻找间隔最大的分离超平面使数据得到高效的二分类,有三种情况:
- 当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机;
- 当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,即线性支持向量机;
- 当训练数据线性不可分时,通过引入核函数技巧及软间隔最大化,学习非线性支持向量机。
svm多分类
svm本身是一个追求类别超平面间支持向量距离最大化的二分类器,本实验的目标是对于三种不同类型文本构造分类器,属于多分类问题。主要是通过组合多个二分类器来实现多分类器的构造,多分类通常有一对多,一对一,多对多等。实验中采取的是one-versus-rest一对多方法,简称OVR SVMs。训练步骤如下:
- 首先A类对应的向量作为正样本,B,C对应的样本作为负样本
- B对应的向量作为正样本,A,C对应的向量作为负样本
- C对应的向量作为正样本,A,B对应的向量作为负样本
- 这3个训练集分别进行训练,得到四个训练结果文件
- 测试时,把对应的测试向量分别利用这三个结果进行文件测试
- 得到三个分类结果:y1(x),y2(x),y3(x),选择三个结果中值最大的一个作为分类结果。
以A为列子,第一次训练,分类器认为它是A,不是负类。第二个分类器会认为他不是B类,第三个分类器会认为它不是C类,这样就得到了它的真正类别。
二. 实验过程
1.数据处理
实验语料为三个类型的文档。分别是:从百度新闻搜集的奥运会报道10篇,从延边大学研究生院官网搜集的研究生通知10篇,从微信公众号搜集的机器学习类文章30篇。
主要思路:
1.加载实验数据:(3个类别50篇文章)
2.分词,去停用词:(载入哈工大停用词表,如果文中词语在停用词表则不存储)
3.按照类别的不同,三种文本标签分别标注为0,1,2
4.返回值:分词后的50篇文章,50个类别标签
# TODO: 初始化LinearSVC模型,并利用模型的fit函数来做训练并打印在训练和测试数据上的准确率,使用模型的默认参数。
clf = LinearSVC()
svm = CalibratedClassifierCV(clf)
# 文本处理 --> 生成训练集 测试集 词频集
def text_processor(text_path, test_size=0.2):
folder_list = os.listdir(text_path)
data_list = [] # 每个元素均为一篇文章
class_list = [] # 对应于每篇文章的类别
# 一个循环读取一个类别的文件夹
for folder in folder_list:
new_folder_path = os.path.join(text_path, folder) # 类别列表
#files = ran