文档库 最新最全的文档下载
当前位置:文档库 › 基于matlab的svm分类预测实现

基于matlab的svm分类预测实现

基于matlab的svm分类预测实现
基于matlab的svm分类预测实现

2017年第3期信息通信2017 (总第171 期)INFORMATION & COMMUNICATIONS (Sum. No 171)基于matlab的svm分类预测实现

屈玉涛,邓万宇

(西安邮电大学,陕西西安710061)

摘要:支持向量机(英文简称SVM)可以很好地应用在数据分类及预测上,由于SVM在数据挖掘中具有通用性好、有效 性、计算简单、理论完善等优点,所以得到了广泛的应用,文章利用matlab软件,基于S V M实现了对意大利葡萄酒的分 类和预测。

关键词:SVM;分类;预测

中图分类号:TP393 文献标识码:A文章编号:1673-1131(2017)03-0033-02

〇引言

随着数据种类的增多以及数量的增长,人工处理数据已 经变得不太现实。B P神经网络在过去获得了大量的应用,但 由于其具有收敛速度慢,容易陷入局部最小值得缺点,BP神经 网络并不能很好地处理实际中的问题。支持向量机是一种分 类算法,通过最大化不同数据之间边缘距离来提高学习及其 各种方面的能力,能够构建出更为精确的分类模型,另外,也 能够在统计取样较少的情况下,得出较好的统计规律,即,统 计样本少,统计规律良好。

1阐述支持向量机的具体情况

所谓支持向量机是Vapnik以及Corinna Cortes等人于 1995年首先提出的,它的应用范围广泛,较为突出的应用是在 非线性回归以及模式分类等方面。支持向量机的最本质的作 用就是把一个分类的超平面当作为决策曲面,这样就会让正 例以及反例之间的间隔被其最大边缘化。SV M被广泛地应用 在自然语言处理、计算机视觉和机器学习中。

支持向量机优点很多,最突出的表现在下面五个方面,一 是不需要进行微调整,即鲁棒性;二是具有很强的通用性,可 以在各种函数中来集中构造其函数;三是具有非常明显的有 效性,可以解决各种事迹问题,并且非常有效;四是涉及的理 论较为完善,具备V C推广性的理论构架;五是计算较为简单, 能够利用较为简单的优化计算就能够实现计算。

例如:SV M的目标函数如公式(1)所示:

r

f{x) = w(x} + /)?

r".⑴=> :(〇? —〇l )K(x,,x) +b

i=1

其中w*代表的是一个d维的向量,b代表的是偏差。输 入数据X的一个非线性的映射。K为核函数,(a rai*)为拉格 朗日乘子,X为输入,Y为输出。

classnumber=3,记录的是类别数目;

wine,178*13的一个double型矩阵,记录178个样本的 13个属性;

wine lables,178*1的一个double型矩阵,记录178个样本的类标

2.2数据可视化图

wme数据的box可视化图Proline

00280/00315 of diluted v

Hue

Color intensitys

Proanthocyanms

Nonflavanoid phenols

Flavanoids

Total phenols

Magnesium

Alcalinity of ash

Ash

Malic acid

Alcohol

图i数据的可视化图

3模型的建立

3.1选定训练集与预测集

在这178个样本中,1?59属于第一类,60?130属于 第二类,131?178属于第三类。现将每个类别分成两组,重 新组合数据,分为训练集(train_wine)和测试集(test_wine)。

第一步:将第一类中的1 ^30样本,第二类中660至95 样本,第三类中的131-153样本当做其训练集

代码表示为:

trainwine= [wine(l:30,:);wine(60:95,:);wine(131:153,:)];

第二对其训练集的标签进行分离

2葡萄酒种类识别相关背景

Wine数据的来源是U CI数据库,记录的是意大利同一区 域上三种不同类型葡萄酒的化学成分分析,数据集里含有178 个样本,每个样本含有13个属性,即化学成分,将每个样本的 类别用标签进行标注,并且已经给出相应标签,,然后将178个 样本的一半看做一个训练集,而另一半当做一个测试集,然后 用这个训练集对SV M进行训练,进而得到其分类模型,再用 得到的模型对测试集进行类标签的预测。

2.1对相关数据进行测试

整体数据存储在wine_data,数据可以从U C I数据库中下 载,数据内容为:

代码表示为:

trainwinelabels =[wine_labels(l:30);wine_labels(60:95); wine_labels(131:153)];

^三步:将第一类中的31至59样本,第二类中的96至 130样本,第三类中的154至178样本当做其测试集 代码表示为:

test_wine= [wine(31:59,:);wine(96:130,:);wine(154:178,:)];

第四步:对其测试集的标签进行分离

代码表示为:

test wine labels =[wine_labels (31: 59); wine labels (96: 130);wine_labels(154:178)]

33

相关文档