数据集:
DATASETS_Cork Stoppers_Cork Stoppers.xls数据集下载地址:
https://pan.baidu.com/s/1QyLF-Th_v0SpFYwaHXUKIg
Part1:感知器分类器原理
和神经网络中的一个神经元很相似,对神经网络有初步了解的会很容易理解这个原理。
这里面的x即为输入一个样本的多个特征,w为权重,核心思想是不断调节权重,然后求和,使得求和结果最终通过Sigmoid函数都可以得到0或1的值,即为二分类的最终分类标签。
下面详细介绍一下:
二分类情况的规则:
即:
多分类情况同样可以转换成二分类情况:
常用的有两种方法:
1.ovo
原理:两两配对,产生(N-1)/2个二分类任务。
结果:最终投票产生最终的分类结果
2.OVR
原理:一对其余,产生N个分类器
结果:(1)只有一个分类器预测为正类,则该结果为最终结果
(2)多个分类器都预测为正类,则选择置信度最大的类别标记作为分类结果
这里面一个非常重要的待解决问题是:如何确定权值?
首先需要明确两点:
1.如果权向量w存在,则这些样本被称为"线性可分"
2.解向量如果存在,通常不是唯一的。
如何确定权值-梯度下降算法:
1.定义准则函数J(w),当w为解向量时,J(w)为最小。-标量函数极小化问题。
2.梯度下降算法过程:
(1)初始化权向量w(1)。
(2)计算其梯度向量,w(2)由w(1)向下最陡的方向移动,即梯度的负方向
(3),
为学习率
(4)希望得到一个权向量序列:最终收敛到一个使J(w)极小化的解上。
下面是梯度下降的伪代码:
Part2:实验工具、环境及数据集
Part3:仿真实验及结果
主函数代码:
clc
clear
%读取excel数据sheet2中的所有数据,num是所读取的数据
[num,txt,raw] = xlsread('DATASETS_Cork Stoppers_Cork Stoppers.xls',2);
%第二列是标签
label=num(:,2);
%第3到12列是特征
tz=num(:,3:12);
%初始化权值
w=ones(1,10);
%初始化学习率
alpha=0.001;
%初始化错误率阈值
theta =0.1;
%m,n为特征的行数和列数
[m,n]=size(tz);
%dataIndex为样本个数
dataIndex=1:m;
%k为更新权值的最大迭代次数
k=10000;
%将多分类标签转换为2分类标签
for i=1:m
if(label(i)==1)
label1(i)=1
else
label1(i)=0;
end
end
label1=label1';
%梯度下降算法
for i=1:k
%随机取一个样本用来更新权值
randIndex =floor( rand()*(length(dataIndex)-1)+1);
%计算 权值和特征的乘积
for j=1:m
for j2=1:10
a(j,j2) = (tz(j,j2)*w(j2));
end
end
%对乘积求和
b=sum(a');
%对求和后的值用S函数计算
for i4=1:m
h(i4) = sigmoid(b(i4));
% if((h(i4)/(1-h(i4)))>50/100)
% h1(i4)=1;
% else
% h1(i4)=0;
% end
end
%得到错误差
error = label1-h';
%h1为使用更新后权值计算的标签,四舍五入取整即得到0 1标签
h1 = round(h);
%初始化错误个数为0
err_cou=0;
%统计错误个数,计算错误率
for i3=1:m
if(h1(i3)~=label1(i3))
err_cou=err_cou+1;
end
end
err_rate(i)=err_cou/m; %错误率 = 错误个数/样本个数
%判断错误率是否达到要求
if(err_rate(i)<theta)
break;
end
%没有达到要求的错误率则继续更新权值
for i1=1:n
w(i1) = w(i1)+alpha*error(randIndex )*tz(randIndex ,i1);
end
end
S函数代码:
function [ y ] = sigmoid( inX )
%UNTITLED2 此处显示有关此函数的摘要
% 此处显示详细说明
y=1/(1+exp(-inX));
end
数据集:
DATASETS_Cork Stoppers_Cork Stoppers.xls数据集
https://pan.baidu.com/s/1QyLF-Th_v0SpFYwaHXUKIg
Part4:实验结果
这里的迭代次数每次运行结果都不一样,但是大概就是这样的数量级。
学习率、错误率阈值、权值都需要在程序里面进行初始化。
正确率=1-分类错误率