京公网安备 11010802034615号
经营许可证编号:京B2-20210330
在MATLAB中进行基于SVM的数据分析
MATLAB除了可以被用来进行信号处理之外,还可以用来完成一些数据挖掘任务。而说到数据挖掘,你脑海里一定会闪现过许多熟悉的算法,例如决策树、朴素贝叶斯、逻辑回归,以及支持向量机(SVM)等等。下面我们就以SVM为例来看看利用MATLAB进行数据挖掘是一种怎样的体验。
MATLAB中用来进行基于SVM的数据挖掘的核心函数是 svmclassify() 和 svmtrain()。从函数名就能很容易地看出来,后者是用来进行模型训练的,而前者则是用后者训练出来的模型来对数据进行分类。首先我们来看看线性可分的情况,后续我们还会讨论更复杂的线性不可分的例子。
这里所使用的数据是费希尔的鸢尾花数据,我们首先导入数据(数据一共有150行,取前2/3作为训练数据,对应的类别是setosa和versicolor)
[plain] view plain copy
>> load fisheriris
>> xdata = meas(1:100,3:4);
>> group = species(1:100);
函数 svmtrain()的调用格式如下:
SVMStruct = svmtrain(Training,Group,Name,Value)
其中Training是feature向量,Group表示分属之类别。Name和Value是可选参数(也就是可以不写),而且必须成对使用,其中Name表示参数名,而Value则对应相应的参数取值。由于Name-Value的可取参数对非常之多,我们这里不一一列举(有需要的读者可以参阅MATLAB的帮助文档以了解更多),仅仅给出两个例子:比如,如果把Name置为'showplot',就可以通过紧跟其后的Value取值来控制是否将训练模型绘制成图,默认是'False',表示不会图。另外一个有用的参数是'kernel_function',如果你对SVM算法比较了解的话应该知道,核函数主要是通过空间转换来将原本线性不可分的数据,转换到另外一个线性可分的空间上,后续我们还会给出具体例子。
下面的代码就可以训练得到一个分类模型:
[plain] view plain copy
>> svmStruct = svmtrain(xdata,group,'ShowPlot',true);
上述代码的执行结果如下图所示(注意因为我们为参数'showplot'赋值为True,所以系统会绘制出图):

下面我们用svmclassify() 来测试一下模型的分类能力:
[plain] view plain copy
<span style="font-size:18px;">>> testdata = [4 1.5;1.8 0.38];
>> species = svmclassify(svmStruct,testdata,'ShowPlot',true)
species =
'versicolor'
'setosa'</span>
如果觉得文字表述的结果不够形象,还可以用图形来表示:
[plain] view plain copy
<span style="font-size:18px;">>> hold on;
>> plot(testdata(:,1),testdata(:,2),'ro','MarkerSize',12);
>> hold off</span>
上述代码的执行结果如图所示(其中被圆周圈起来的就是我们引入的测试数据):

如果数据是线性不可分的,SVM是否能够应对呢?来看下面的例子,首先,我们生成两组数据data1和data2
[plain] view plain copy
>> rng(1); % For reproducibility
r = sqrt(rand(100,1)); % Radius
t = 2*pi*rand(100,1); % Angle
data1 = [r.*cos(t), r.*sin(t)]; % Points
>> r2 = sqrt(3*rand(100,1)+1); % Radius
t2 = 2*pi*rand(100,1); % Angle
data2 = [r2.*cos(t2), r2.*sin(t2)]; % points
data1和data2是线性不可分的。用图形来表示或许更加一目了然,所以我们来绘图:
[plain] view plain copy
>> figure;
plot(data1(:,1),data1(:,2),'r.','MarkerSize',15)
hold on
plot(data2(:,1),data2(:,2),'b.','MarkerSize',15)
ezpolar(@(x)1);ezpolar(@(x)2);
axis equal
hold off
上述代码的执行结果如下:

然后我们把两组数据组织到一起,并加上分类标签‘+1’和‘-1’。
[plain] view plain copy
>> data3 = [data1;data2];
theclass = ones(200,1);
theclass(1:100) = -1;
然后分别用高斯核函数与多项式核函数来进行空间转换,并在此基础上进行基于SVM的分类:
[plain] view plain copy
>> svmModel = svmtrain(data3, theclass, 'kernel_function','rbf','ShowPlot',true);
>> svmModel = svmtrain(data3, theclass, 'kernel_function','polynomial','ShowPlot',true);
下图基于高斯核函数的SVM分类结果:

下图基于多项式核函数的SVM分类结果:

可见原本不可分的数据,现在已经被成功分类了。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在自动化办公、数据采集、定时统计、日志清理、系统监控等场景中,程序往往需要按照固定时间间隔重复执行指定任务,这种运行机制 ...
2026-08-12在数据分析日常工作中,Excel数据筛选是数据清洗、数据提取、样本筛选的核心基础操作。传统Excel手动筛选、函数筛选方式,面对多 ...
2026-08-12 很多数据分析师精通Excel函数和数据透视表,但当被问到“数据从哪里来”“表和视图有什么区别”“数据库管理系统和SQL是什么 ...
2026-08-12在数据分析、统计建模、数据挖掘与商业调研过程中,原始数据往往无法做到绝对干净规整。受系统故障、人工录入失误、设备误差、突 ...
2026-08-11在数据分析工作中,聚类分析是典型的无监督学习方法,核心作用是依据数据自身的多维特征,将相似样本自动划分为若干类别,实现“ ...
2026-08-11 很多企业团队并非缺乏指标,而是陷入“指标失控”:仪表盘上堆满实时跳动的数据,却无法回答“当前瓶颈在哪、下一步该做什么 ...
2026-08-11AB实验是互联网产品迭代、营销优化、功能升级的核心科学验证手段,通过流量随机分组、对照组与实验组对比,科学验证策略、功能、 ...
2026-08-10在MySQL数据库优化中,索引是提升查询效率、降低数据库IO开销、优化系统性能的核心手段。普通单列索引仅适配简单查询场景,面对 ...
2026-08-10 很多数据分析师每天盯着几十个指标,但当被问到“这套指标要支撑什么业务目标”“指标之间是什么逻辑关系”“业务变化时如何 ...
2026-08-10在数字化市场调研体系中,大数据与小数据是两类核心调研数据形态,分别对应海量行为统计与精准样本深度调研。行业普遍存在认知误 ...
2026-08-07数据透视表是Excel、WPS中最核心的数据分析工具,凭借快速汇总、分组统计、动态筛选的优势,被广泛应用于销量统计、业绩复盘、数 ...
2026-08-07 很多数据分析师每天盯着GMV、DAU、转化率,但当被问到“哪些指标在所有行业都适用”“哪些指标只对电商有意义”“二者如何搭 ...
2026-08-07在商品销量、市场需求、营收规模等业务数据中,季节性波动是最普遍、最核心的数据特征。零售快消、食品餐饮、家电服饰、电商行业 ...
2026-08-06在流量红利消退、市场竞争白热化的商业环境中,传统依托经验、跟风投放、广撒网式的营销模式,逐渐暴露出成本高、精准度低、转化 ...
2026-08-06 很多数据分析师每天盯着GMV、DAU、转化率,但当被问到“什么是指标”“指标和维度有什么区别”“如何定义指标值的计算规则和 ...
2026-08-06【核心关键词】知识、设备、工程师、数字化、建模、算法、工业大数据、数据分析、控制算法、机器学习、深度学习、业务目标、工 ...
2026-08-05增长率是数据分析、业务报表、可视化看板中最核心的指标之一,常用于衡量营收、销量、用户量、流量等业务数据的涨跌幅度与发展趋 ...
2026-08-05小陈是某电商平台的数据分析师。老板交给他一个任务:“我们平台的注册用户已经突破1000万了,想了解一下用户的平均月消费金额。 ...
2026-08-05在机器学习建模、数据预处理、抽样划分、模型初始化训练的全流程中,随机种子是控制实验随机性、保证结果可复现、提升模型稳定性 ...
2026-08-04Python作为面向对象的主流编程语言,核心编程体系由变量、方法、类三大基础要素构成。三者层层递进、相互协作,支撑起所有基础代 ...
2026-08-04