SVM 支持向量机原理 以及sklearn 代码的实现

支持向量机(Support Vector Machine,SVM)

有监督学习和无监督学习
有监督学习就是已知事物的分类标签告诉模型训练参数,无监督就是不知道事物的分类标签需要模型自行识别,常用的无监督学习算法有 LDA k-means聚类。
这里讲SVM的原理总结成我自己的话:
支持向量机的训练就是找到一个超平面将样本分开,这个超平面就是我们的分类器。如何找到这个分类间隔,通过移动这个超平面,找到极限位置,落在极限位置上的点 就是支持向量,极限位置到平面的位置就是分类间隔,拥有最大间隔的决策面就是要找的决策面。实际情况由于数据没那么干净都是用的近似线性可分。如果线性不可分那么就要加入核函数。常用的核函数有 高斯核 sigmod核
SVM是如何解决多分类问题的
从SVM的原理来看他是解决2分类的问题的,但是多个二分类其实就是多分类了。一般采用一对一训练法,就是两量分类之间有一个分类器,最后预测的时候每个分类器都有一个结果,最后置信最高的就是目标分类。
SVM的具体使用
继续使用我github 上 https://github.com/everyStudyNow/ml_learning.git 的代码 只需要做如下步骤修改

导入头文件
from sklearn import svm
然后将model的哪一行改为model = svm.LinearSVC()  或者
model = svm.SVC(probability=True)
下面说下LinearSVC() 和SVC的区别

LinearSVC
线性可分问题 用于处理线性可分的数据 只能使用线性核函数 linear:线性核函数
SVC
针对非线性问题 即可以使用线性核函数又可以使用高维核函数。
SVC 的构造函数:model = svm.SVC(kernel=‘rbf’, C=1.0, gamma=‘auto’),这里有三个重要的参数 kernel、C 和 gamma。
kernel 核函数的类型 可以是 linear poly(多项式核函数)rbf(高斯核函数 默认)sigmoid 核函数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的SVM代码示例,使用Python编写,不依赖于scikit-learn库。 首先,我们需要导入必要的库:numpy和matplotlib。 ```python import numpy as np import matplotlib.pyplot as plt ``` 接下来,我们需要定义一个简单的数据集。这个数据集包含两个类别:红点和蓝点。每个点都有两个特征:x1和x2。 ```python # 定义数据集 X = np.array([ [-2, 4], [4, 1], [1, 6], [2, 4], [6, 2] ]) y = np.array([-1, -1, 1, 1, 1]) ``` 现在,我们可以开始实现SVM算法。我们将使用简单的梯度下降优化算法来优化我们的模型。 ```python # 实现SVM算法 def svm(X, y, learning_rate=0.01, lambda_param=0.01, num_iterations=1000): # 初始化权重和偏置 w = np.zeros(X.shape[1]) b = 0 # 梯度下降优化 for i in range(num_iterations): # 计算梯度 loss = 1 - y * (np.dot(X, w) - b) dw = np.zeros(X.shape[1]) for j in range(X.shape[0]): if loss[j] >= 0: dw += lambda_param * y[j] * X[j] w -= learning_rate * (w - dw) # 更新偏置 db = -lambda_param * np.sum(y * (loss >= 0)) b -= learning_rate * db return w, b ``` 现在,我们可以使用我们的SVM算法来拟合我们的数据集,并绘制决策边界。 ```python # 拟合数据集 w, b = svm(X, y) # 绘制数据集和决策边界 plt.scatter(X[:, 0], X[:, 1], c=y) ax = plt.gca() xlim = ax.get_xlim() ylim = ax.get_ylim() xx = np.linspace(xlim[0], xlim[1], 100) yy = np.linspace(ylim[0], ylim[1], 100) YY, XX = np.meshgrid(yy, xx) xy = np.vstack([XX.ravel(), YY.ravel()]).T Z = np.dot(xy, w) - b Z = np.reshape(Z, XX.shape) ax.contour(XX, YY, Z, levels=[-1, 0, 1], alpha=0.5) ax.scatter(w[0], w[1], s=100, marker='*', c='green') plt.show() ``` 这将产生以下输出: ![svm-python](https://i.imgur.com/g5zU6Qq.png) 这个简单的SVM代码示例演示了如何使用Python实现SVM算法,不依赖于任何机器学习库。虽然这个实现非常简单,但它可以作为一个起点,帮助你理解SVM算法的基本原理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值