%Preceptron4.m
%感知机算法(对偶形式)利用核函数完成分类算法
%f(X)=W'*X+b
%f([X;1])=[W;b]'*[X;1] 增加维数,简化计算
%设W初始为0时,权重W是训练点的线性组合:W=Σaj*yj*Xj
%类别yi决定了Xi的系数,ai>=0,正比于被误分后权重更新的次数,可看作Xi信息量的指示
%误分判据 yi*((W'*Xi)+b)<=0变为:yi*(Σaj*yj*(Xj'*Xi)+b)<=0,ai=ai+1,b=b+yi*R^2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%可推广到多类判据:每类找(Wi,bi),决策函数c(X)=arg max(<Wi.X>+bi),值最大的即是类(Wi,bi)
%从几何角度,意味着距超平面(Wi,bi)最远的点的类与(Wi,bi)相关联!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%非线性空间分类
%利用核函数完成分类算法 2013.1.17 by lijilin
function Preceptron4()
%struTemp=struct('Element',[-1,1,1]','Sample',1);
%Msample=[struTemp,struTemp]';
Msample=[3,3;-3,3;-3,-3;3,-3;3,0]';%原空间点,通常称为属性
Nsample=[1,1;-1,1;-1,-1;1,-1;1,0]';
%Msample=[M.^2;sqrt(2)*M(1,:).*M(2,:)];%由(x1,x2)'->(x1^2,x2^2,x1*x2)映射到线性空间(寻找特征);特征正数据点
%yM=1;%类别
%Nsample=[N.^2;sqrt(2)*N(1,:).*N(2,:)];%特征负数据点
%yN=2;
RM2=max([max(Msample'*Msample)]);%样本圆半径平方 ???原属性空间的R^2、b直接用到特征空间??? 2013.1.17 by lijilin
RN2=max([max(Nsample'*Nsample)]);%样本圆半径平方 ???原属性空间的R^2、b直接用到特征空间??? 2013.1.17 by lijilin
R2=324;%max(RM2,RN2);
lenM=length(Msample(1,:));
lenN=length(Nsample(1,:));
aMi=zeros(lenM,1);
aNi=zeros(lenN,1);
%WM=Msample*aMi; 2013.1.17 by lijilin
%WN=Nsample*aNi; 2013.1.17 by lijilin
bM=0;
bN=0;
%W=[Msample,Nsample]*ai;%初始化Super Plane方向、节距=权重w、阀值b(神经元),圆点距超平面b/||w||
k=1;%试错次数&
num=0;%循环次数
while k~=0 && num<10
    k=0;
    num=num+1;
    for i=1:lenM
        %if (WM'*Msample(:,i)+bM)-(WN'*Msample(:,i)+bN)<=0 %找Msample的超平面(WM,bM),若Msample距(WM,bM)非最远,则分类错误!
        KMfun=dot(Msample,repmat(Msample(:,i),1,size(Msample,2)));%核函数size(Msample,2)=lenM 2013.1.17 by lijilin
        KMfun=KMfun.^2;%当(x1,x2)'->(x1^2,x2^2,sqrt(2)*x1*x2)映射到线性特征空间时,特征空间的向量内积=原属性空间向量内积的平方
                      %故用核函数可以直接在原属性空间求解决策函数,而不需考虑映射!!! 2013.1.17 by lijilin 
        KNfun=dot(Nsample,repmat(Msample(:,i),1,size(Nsample,2)));
        KNfun=KNfun.^2;
        if(KMfun*aMi+bM)-(KNfun*aNi+bN)<=0 %!!!!!!2013.1.17 by lijilin
            aMi(i)=aMi(i)+1;%当分错,对应的ai+1
            bM=bM+R2;
            k=k+1;
            %WM=Msample*aMi; 2013.1.17 by jilin
        end
    end
    if num>=10
        msgbox('Msample没找到超平面!');
    end
    %end  %%%%%%%%%%%%%%%%%%%%%%%%2013.1.17 by lijilin
%k=1;
%num=0;
%while k~=0 && num<10%%%%%%%%%%%%%2013.1.17 by lijilin
    %k=0;
    %num=num+1;
    for i=1:lenN
        %if (WN'*Nsample(:,i)+bN)-(WM'*Nsample(:,i)+bM)<=0 %找Nsample的超平面
        KMfun=dot(Msample,repmat(Nsample(:,i),1,size(Msample,2)));
        KMfun=KMfun.^2;
        KNfun=dot(Nsample,repmat(Nsample(:,i),1,size(Nsample,2)));
        KNfun=KNfun.^2;
        if(KNfun*aNi+bN)-(KMfun*aMi+bM)<=0 %!!!!!!2013.1.17 by lijilin
            aNi(i)=aNi(i)+1;%当分错,对应的ai+1
            bN=bN+R2;
            k=k+1;
            %WN=Nsample*aNi;
        end
    end
    if num>=10
        msgbox('Nsample没找到超平面!');
    end
end
%W=WM-WN;%Msample与NSample分界面
%b=bM-bN;
%M_NPBfun=(KMfun*aMi+bM)-(KNfun*aNi+bN)=0为分类超平面,由于采用隐式映射,无法直接反求属性空间分类面!!; 2012.1.17 by lijilin
t=-1.5:0.1:1.5;
x21=t;
x22=t;
syms x2
for i=1:length(t)   
x1=t(i);
KMfun=dot(Msample,repmat([x1;x2],1,size(Msample,2)));
KMfun=KMfun.^2;
KNfun=dot(Nsample,repmat([x1;x2],1,size(Nsample,2)));
KNfun=KNfun.^2;
sfun=(KMfun*aMi+bM)-(KNfun*aNi+bN);
s=solve_sym(sfun);
x21(i)=eval(s(1));
x22(i)=eval(s(2));
end
%plot([x1',x1',x11',x12'],[x21',x22',x2',x2']);
figure
plot([t',t'],[x21',x22']);
hold on
plot(Msample(1,:)',Msample(2,:)','X',Nsample(1,:)',Nsample(2,:)','o');

机器学习:利用核函数进行非线性分类相关推荐

  1. SVM熟练到精通3:核函数与非线性分类

    文章引自pluskid于2010年发表于"Machine Learning"板块,本文仅做编辑. 1.回顾 前面我们介绍了线性情况下的支持向量机,它通过寻找一个线性的超平面来达到对 ...

  2. 5.9 程序示例--非线性分类-机器学习笔记-斯坦福吴恩达教授

    程序示例–非线性分类 接下来,我们采用高斯核函数来解决非线性可分问题,由于数据集较大,我们使用性能更好的完整版 SMO 算法进行训练: # coding: utf8 # svm/test_non_li ...

  3. 机器学习基石12:非线性变换(Nonlinear Transformation)

    本文介绍了非线性变换的整体流程:通过非线性变换,将非线性模型映射到另一个空间,转换为线性模型,再来进行线性分类. 之后介绍了非线性变换存在的问题:时间复杂度和空间复杂度的增加. 最后证明了非线性变换的 ...

  4. 利用SVM 实现文本分类的实例

    原文来自:http://blog.csdn.net/zhzhl202/article/details/8197109 之前做过一些文本挖掘的项目,比如网页分类.微博情感分析.用户评论挖掘,也曾经将li ...

  5. 一文彻底理解机器学习高斯核函数和基函数

    本文介绍了高斯核函数的感性理解,以及从线性代数角度求解.推导高斯核函数.基函数的公式,并用pyhon实现了其函数以及图像绘制. 如何理解高斯核函数呢?我建议从用途入手. 作为机器学习中的一种算法,在解 ...

  6. 阅读笔记——基于机器学习的文本情感多分类的学习与研究

    文章目录 1 文章简介 2 文本情感分类概述 3 文本情感多分类项目设计与实现 3.1 数据处理 3.2 特征选取 3.3 线性逻辑回归模型 3.4 朴素贝叶斯模型 4 项目结果与分析 5 总结 1 ...

  7. 机器学习(五)常用分类模型(K最近邻、朴素贝叶斯、决策树)和分类评价指标

    机器学习(五)常用分类模型(K最近邻.朴素贝叶斯.决策树)和分类评价指标 文章目录 机器学习(五)常用分类模型(K最近邻.朴素贝叶斯.决策树)和分类评价指标 综述 常用分类模型 K最近邻模型 朴素贝叶 ...

  8. 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例

    传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 文章目录 传统机器学习之逻辑回归的分类预测,以威斯康辛州乳腺癌数据集为例 1导入基本库 2读取数据并且变换类型 3输出数据 4可视化数据 ...

  9. Python机器学习日记2:鸢尾花分类(持续更新)

    Python机器学习日记2:鸢尾花分类 一.书目与章节 二. 前言 1. 什么是机器学习 2. 熟悉任务和数据 3. 本文软件版本 4. scikit-learn参考资料 三. 问题类型 四. 鸢尾花 ...

最新文章

  1. 在线作图|在线做UMAP降维分析
  2. AspectJ切入点语法详解
  3. 如何打开Tango的ADF文件?
  4. poj 2749 2-SAT问题
  5. activemq控制发送频率_发送activemq
  6. R统计和作图文章汇总
  7. SAP License:赛锐信息访谈启示录(二)
  8. Cocos2d API 解析之Texture2d
  9. Android 开机动画的启动
  10. 如何使用3DMax球形化命令
  11. 国美理直气壮的停发员工工资
  12. 使用Servlet和JSP开发Java应用程序 ---- 豆瓣瓣项目(数据库 + JSP + Servlet)
  13. 【JZOJ A组】拯救奶牛
  14. spring-boot2 + vue2+element-ui + avue + uni-app (兮家开源商城)
  15. Spring Cloud Alibaba x AppActive 带来的全新异地活动解决方案
  16. 如何在Nintendo Switch上禁用截图按钮
  17. Games101-课程16笔记
  18. 电脑屏幕亮度能否自动调节
  19. “时间都到哪里去了?”
  20. APK应用程序的解包、修改、编辑、打包及应用(三)

热门文章

  1. 国际电汇的清算代码是什么?
  2. 磁盘分区20191017
  3. 学习iOS最权威的网站
  4. JavaScript自学笔记(1)---表单验证,let和const,JSON文件
  5. 实际开发中 dao、entity的代码怎样自动生成?一款工具送给你
  6. Springmvc 返回html视图解决
  7. MongoDB异常修复
  8. 【Liunx】Linux 系统启动过程
  9. C#LeetCode刷题之#566-重塑矩阵( Reshape the Matrix)
  10. 面向对象设计原则之2-开放闭合原则