机器学习-SVMf非线性可分-2020-5-1

数据线性不可分,但是它能被区分开,如下图:

有些数据肉眼看,不能分,但是经过低维到高维数据变得可分,如下例:

算法思想都是一样的:同线性可分,只不过将数据映射到高维空间去

         x->  φ(x)

核技巧(kernel trick)通过一个核函数将数据映射到高纬空间。

ω(x) : 无限维, 映射函数,可以不知道它的显示表达式

k(x1,x2)  = φ( x1 )Tφ(x2)  (内积将无限维变成一个数) 

核函数:

rbf:  高斯核  

ploy: 多项式核

Linear: 线性内核

thanh核

二:sklearn (借助现有机器学习工具,所有算法都自己撸代码,人着不住的)

sklearn:  关于svm的学习有很好的例子

https://scikit-learn.org/stable/modules/svm.html

实现一个非线性分类的svm

import numpy as npimport pandas as pdfrom matplotlib import stylefrom sklearn.svm import SVCfrom sklearn.datasets import make_gaussian_quantilesimport matplotlib.pyplot as pltplt.rcParams['figure.figsize'] =(12,6)style.use('ggplot')x, y = make_gaussian_quantiles(n_samples=100,n_features=2,n_classes=2,cov=2)def draw_svm(x,y,C=1.0,gamma='auto'):    plt.scatter(x[:,0],x[:,1],c=y)    clf  = SVC(kernel='rbf',C=C,gamma=gamma)    clf_fig = clf.fit(x,y)    ax = plt.gca()    xlim = ax.get_xlim()    ylim = ax.get_ylim()    xx = np.linspace(xlim[0],xlim[1],200)    yy = np.linspace(ylim[0],ylim[1],200)    XX,YY = np.meshgrid(xx,yy)    xy  = np.vstack([XX.ravel(),YY.ravel()]).T    Z = clf.decision_function(xy).reshape(XX.shape)    ax.contour(XX,YY,Z,colors='r',levels=[-1,0,1],              alpha=0.5,linestyles=['--','-','--'])    ax.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],s=10)    print("预测[1,2]的分类:")    print(clf.predict([[1.,2.]]))draw_svm(x,y,C=10)

b站上浙江大学机器学习课程笔记:

Reference:

[1]:https://www.bilibili.com/video/BV1dJ411B7gh?from=search&seid=590519869570777855

浙江大学-研究生机器学习课程

[2]: https://mubaris.com/posts/svm/

[3]: https://scikit-learn.org/stable/modules/svm.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值