感知机时二分类的线性分类模型,其目的就是寻找通过训练将实例划分为正负两类的分离超平面,其采用的策略是根据现有的超平面和输出值来识别出误分类点,也就是说y*(w*t+b)<=0,并采用随机梯度下降的方法不断修改参数,直至没有误分类点。其实质是最小化误分类点到超平面的距离总和。
具体感知机学习的具体算法,包括原始形式和对偶形式。实验采用的是《统计学习方法》中的例2.1:
1)原始形式代码如下:
#include <iostream>
using namespace std;
int x[3][2] = {
{3, 3},
{4, 3},
{1, 1}
};
int y[3] = {1, 1, -1};
int w[2] = {0};
int b = 0;
int L(int y, int* x)
{
int temp = (w[0] * x[0] + w[1] * x[1] + b) * y;
if (temp <= 0)
return 1;//存在错误点
else
return 0;
}
int main(void)
{
int j = 1;
while (true)
{
cout << j++ << " ";
int i;
int num = 0;
for (i = 0; i < 3; i++)
{
if (L(y[i], x[i]) == 1)
{
cout << "error point:";
cout << "x" << i <<" w:";
int j;
for (j = 0; j < 2; j++)
{
w[j] += y[i] * x[i][j];
cout << w[j] << " ";
}
b += y[i];
cout << "b:" << b <<endl;
num++;
break;
}
}
if (num == 0)
break;
}
return 0;
}
实验结果:
1 error point:x0 w:3 3 b:1
2 error point:x2 w:2 2 b:0
3 error point:x2 w:1 1 b:-1
4 error point:x2 w:0 0 b:-2
5 error point:x0 w:3 3 b:-1
6 error point:x2 w:2 2 b:-2
7 error point:x2 w:1 1 b:-3
这跟p30的结果是一样的,不过要注意的是,在极小化的过程中,为了达到书中的结果,选择的误分类点都是第一次遇到的误分类点,而实际上在选择误分类点时应该采用随机的方法来选取,而且每次梯度下降的时候并不是对所有误分类点进行梯度下降,而是只对随机选择的一个误分类点进行梯度下降。结果与误分类点的选择有关。
2)对偶形式,代码如下:
#include <iostream>
using namespace std;
int x[3][2] = {
{3, 3},
{4, 3},
{1, 1}
};
int y[3] = {1, 1, -1};
int b = 0;
int a[3] = {0};
int G[3][3] = {
{18, 21, 6},
{21, 25, 7},
{6, 7, 2}
};//Gram matrix
int L(int j)
{
int temp = 0;
for (int i=0 ;i < 3; i++)
{
temp += a[i] * G[i][j] * y[i];
}
temp += b;
temp *= y[j];
if (temp <= 0)
return 1;//存在错误点
else
return 0;
}
int main(void)
{
int j = 1;
while (true)
{
cout << j++ << " ";
int i;
int num = 0;
for (i = 0; i < 3; i++)
{
if (L(i) == 1)
{
cout << "error point:";
cout << "x" << i <<" a:";
int j;
a[i] += 1;
for (j = 0; j < 3; j++)
{
cout << a[j] << " ";
}
b += y[i];
cout << "b:" << b <<endl;
num++;
break;
}
}
if (num == 0)
break;
}
return 0;
}
实验结果如下:
1 error point:x0 a:1 0 0 b:1
2 error point:x2 a:1 0 1 b:0
3 error point:x2 a:1 0 2 b:-1
4 error point:x2 a:1 0 3 b:-2
5 error point:x0 a:2 0 3 b:-1
6 error point:x2 a:2 0 4 b:-2
7 error point:x2 a:2 0 5 b:-3
结果与1)相同。(注:书中p35,k=4的数据有误,应该为a1=1 a2=0 a3=3 b=-2)
分享到:
相关推荐
使用多种方法完成MNIST分类任务 Python 3.6 Pytorch 1.0 Scikit-learn 0.21 无需下载数据直接跑,代码自动下载 逻辑回归 Logistic ...多层感知机 MLP K近邻 KNN 支持向量机 SVM 卷积神经网络 CNN 循环神经网络 RNN
介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机、神经网络、决策树、SVM、Adaboost到随机森林、Deep Learning. 介绍:这是瑞士人工智能实验室Jurgen Schmidhuber写的最新版本《神经网络与深度学习综述》...
mnist分类使用多种方法完成MNIST分类任务Python 3.6 火炬1.0 Scikit学习0.21无需下载数据直接跑,代码自动下载模型逻辑回归Logistic回归多层感知机K近邻KNN支持向量机卷积神经网络循环神经网络实验报告见...
介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机、神经网络、决策树、SVM、Adaboost到随机森林、Deep Learning. 介绍:这是瑞士人工智能实验室Jurgen Schmidhuber写的最新版本《神经网络与深度学习综述》...
本文对威斯康星州的六种机器学习(ML)算法进行了比较: ,线性回归,多层感知器(MLP),最近邻(NN)搜索,Softmax回归和支持向量机(SVM)诊断性乳腺癌(WDBC)数据集通过测量其分类测试的准确性以及其敏感性和...
Ytk-learn是一个分布式机器学习库,它实现了大多数流行的机器学习算法。 它运行在单,多台机器和大型分布式环境(Hadoop,火花),并支持主流的操作系统(Linux操作系统,在Windows,Mac OS),分布式环境中的通信是...
有监督的极限学习机(ELM)到无监督的学习机的扩展,包括判别和流形正则化,在高光谱图像(HSI)聚类中越来越受到关注。 这是由于以下事实:HSI聚类问题需要频谱空间特征提取机制,该机制必须充分利用局部频谱空间上...
每天都会对大量的患者数据进行补充,从而给医疗保健... 将其结果与应用于特定方法(例如随机森林,支持向量机,决策树,多层感知器和朴素贝叶斯分类方法)的相同数据集进行了比较。 所有方法均使用10k倍交叉验证运行。
第二章 感知机 适用问题:二类分类 实验数据:由于是二分类器,所以将MINST数据集的label列进行了一些微调,label等于0的继续等于0,label大于0改为1。这样就将十分类的数据改为二分类的数据。获取地址 代码: 运行...
基于vKNN的服务域聚类结果,开发了一种基于极限学习机(ELM)的概率匹配模型域路由器(DR),用于将需求分解为相关域。 最后,建立了一个全面的领域主题匹配(DTM)模型来挖掘相关的领域特定匹配模式,以促进服务...