当前位置:首页 > 推荐数学建模matlab方法整理
神经网络用于分类
Function compnn(Tc, P, B, Z, n) clear
% Convert indices to vectors T = ind2vec(Tc);
% Setting spread factor spread =n;
% Constructing a new network net = newpnn(P,T,spread); % Network simulation A = sim(net,B);
% Convert vectors to indices A=vec2ind(A); Q=Z-A
% Calculating correlation between Z and A R=corrcoef(Z,A) Result
(1) newpnn建立神经网络
Tc是类别索引, P是输入向量 T是目标向量
spread是径向基函数传播系数
(2)sim是对任意参考或扰动求开环或闭环响应 net为建立的神经网络 B为仿真步数
(3)corrcoef是计算相关系数的
数据归一化
一、max-Min标准化
max-Min标准化方法是对原始数据进行线性变换。设minA和maxA分别为属性A的最小值和最大值,将A的一个原始值x通过max-Min标准化映射成在区间[0,1]中的值'x,其公式为:
新数据=(原数据-极小值)/(极大值-极小值) 二、z-score 标准化
这种方法基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。将A的原始值x使用z-score标准化到x'。
z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。
新数据=(原数据-均值)/标准差
spss默认的标准化方法就是z-score标准化。
用Excel进行z-score标准化的方法:在Excel中没有现成的函数,需要自己分步计算,其实标准化的公式很简单。 步骤如下:
1.求出各变量(指标)的算术平均值(数学期望)xi和标准差si ; 2.进行标准化处理: zij=(xij-xi)/si
其中:zij为标准化后的变量值;xij为实际变量值。 3.将逆指标前的正负号对调。
标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。
三、Decimal scaling小数定标标准化
这种方法通过移动数据的小数点位置来进行标准化。小数点移动多少位取决于属性A的取值中的最大绝对值。将属性A的原始值x使用decimal scaling标准化到x'的计算方法是:
x'=x/(10*j)
其中,j是满足条件的最小整数。
例如 假定A的值由-986到917,A的最大绝对值为986,为使用小数定标标准化,我们用1000(即,j=3)除以每个值,这样,-986被规范化为-0.986。
注意,标准化会对原始数据做出改变,因此需要保存所使用的标准化方法的参数,以便对后续的数据进行统一的标准化。
除了上面提到的数据标准化外还有对数Logistic模式、模糊量化模式等等: 对数Logistic模式:新数据=1/(1+e^(-原数据))
模糊量化模式:新数据=1/2+1/2sin[派3.1415/(极大值-极小值)*(X-(极大值-极小值)/2) ] X为原数据
Svm
这个实现是线性可分支持向量分类机,不考虑非线性分类引入核函数的情况,也不考虑推广条件下引入Penalty Loss的情况。
问题描述: 平面上有如下点A = [1 1.5;2 1.5;3 1.5;4 1.5;1 0.5;2 0.5;3 0.5;4 0.5]及其对应的标号flag = [1 1 1 1 -1 -1 -1 -1];用SVM方法构造一个决策函数实现正确分类。
如果我们在二维坐标上描点,就会发现这是个很简单的线性可分问题。实现方法,用SVM的对偶问题,转换为Matlab的有约束非线性规划问题。 构建m文件: function f = ffsvm(x)
A = [1 1.5;2 1.5;3 1.5;4 1.5;1 0.5;2 0.5;3 0.5;4 0.5]; flag = [1 1 1 1 -1 -1 -1 -1]; for i=1:1:length(A) for j=1:1:length(A) normA(i,j) = A(i,:)*A(j,:)'; normFlag(i,j) = flag(1,i)*flag(1,j); end end f = 0;
for i=1:1:length(A) for j=1:1:length(A)
f = f + 1/2*(normA(i,j)*x(i)*x(j)*normFlag(i,j)); end f = f - x(i); end
在命令窗口输入: Aeq = [1 1 1 1 -1 -1 -1 -1]; beq = 0;
lb = [ 0 0 0 0 0 0 0 0];
调用MatLab内置优化函数fmincon;
[x,favl,exitflag] = fmincon(@ffsvm,x0,[],[],Aeq,beq,lb,[])
得到如下结果:
Optimization terminated successfully:
Magnitude of directional derivative in search direction less than 2*options.TolFun and maximum constraint violation is less than options.TolCon
Active Constraints: 1 x =
0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 favl = -2.0000 exitflag = 1
x的分量都不为0,说明这些点都是支持向量; 计算w; w = [0 0];
for i = 1:1:length(A) w = w + flag(i)*x(i)*A(i,:); end 结果: w =[0,2]; 计算b; b = 0; for i=1:1:8
b = b-flag(i)*x(i)*normA(i,1); end
b = flag(1) + b; 结果: b = -2;
共分享92篇相关文档