动手机器学习支持向量机+习题

这篇具有很好参考价值的文章主要介绍了动手机器学习支持向量机+习题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

非参数化模型,当数据集规模增大时,其参数量也相应变多

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

希望从这无数个可以分隔两个点集的超平面中,挑选出与任意一点间隔(margin)的最小值最大的平面

支持向量机的数学描述

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

对上式来说,当w和b的大小同时变为λ倍时,式中的分母||w||也变为λ倍,这时划分超平面完全不变 

定义γ = yi(wx+b)为函数间隔,γi = γ / ||w||为几何间隔。我们希望所有样本到平面的几何间隔 γi 的最小值最大

 于是,支持向量机的优化目标可以写为:

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

上面已经提到,函数间隔γ关于w和b的大小并不影响实际的几何间隔γi,因为其变化总会被||w||所抵消。因此,不妨令γ=1。这样上面的优化目标就变为: 

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

为了求解方便,我们选择凸的单调递增函数,进一步将优化目标等价地写为:

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

如果数据线性不可分,我们可以适当放低上面的约束要求,引入松弛变量ξi,将约束问题改写为: 

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

凸优化的原始问题:
动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

定义其拉格朗日函数(Lagrangian function)为:

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

当约束条件满足时,拉格朗日函数的最大值恰好就等于原问题的目标函数f(w),从而原问题可以写为:

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

将上面优化问题中计算min和max的顺序交换,定义其对偶问题为:

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

所以求解拉格朗日函数得到w和b,代入对偶函数得到:

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

 动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

序列最小优化

每次选取两个不同的参数αi和αj,而固定其他的参数,只优化这两个参数从而保证等式约束一直成立

核函数

去拟合非线性

    alpha, b = SMO(x, y, kernels[i], C=C, max_iter=max_iter)
    sup_idx = alpha > 1e-6 # 支持向量的系数不为零
    sup_x = x[sup_idx] # 支持向量
    sup_y = y[sup_idx]
    sup_alpha = alpha[sup_idx]

    # 用支持向量计算 w^T*x
    def wx(x_new):
        s = 0
        for xi, yi, ai in zip(sup_x, sup_y, sup_alpha):
            s += yi * ai * kernels[i](xi, x_new)
        return s

调用SMO算法求解SVM的对偶问题,得到最优的拉格朗日乘子alpha和截距b

alpha值通常会有一些非常接近于零的值,这些对应于不重要的样本点,而对于支持向量来说,其对应的alpha值通常远大于零

contou

    G = np.linspace(-1.5, 1.5, 100)
    G = np.meshgrid(G, G)
    X = np.array([G[0].flatten(), G[1].flatten()]).T # 转换为每行一个向量的形式
    Y = np.array([wx(xi) + b for xi in X])
    Y[Y < 0] = -1
    Y[Y >= 0] = 1
    Y = Y.reshape(G[0].shape)
    axs[i].contourf(G[0], G[1], Y, cmap=cmap, alpha=0.5)
    # 绘制原数据集的点
    axs[i].scatter(x[y == -1, 0], x[y == -1, 1], color='red', label='y=-1')
    axs[i].scatter(x[y == 1, 0], x[y == 1, 1], marker='x', color='blue', label='y=1')
    axs[i].set_title(ker_names[i])
    axs[i].set_xlabel(r'$x_1$')
    axs[i].set_ylabel(r'$x_2$')
    axs[i].legend()

contourf 函数在二维平面上画出决策边界,其中 G[0]G[1] 是网格的横纵坐标,Y 是每个网格点的预测结果,根据预测结果的正负来填充不同的颜色

Sklearn中的SVM工具

model = SVC(kernel='rbf', gamma=50, tol=1e-6)

对于RBF核函数,其参数为γ =1/(2σ^2)。上一节我们设置σ=0.1,因此这里对应的参数为γ=50

tol=1e-6表示训练算法停止的容差值。当模型在两次迭代中的优化结果之间的差异小于 tol 时,算法将停止迭代

习题

1.B。

2.D。大大降低了时间复杂度倒未必

3.逻辑斯谛回归使用梯度下降等优化算法来找到最优参数,而这些优化算法可能会涉及复杂度很高的矩阵乘法和求逆运算

支持向量机则可以通过拉格朗日对偶性得到解析解,不包含这类复杂运算

4.左边是支持向量机,右边是逻辑回归

from sklearn.linear_model import LogisticRegression

log_reg = LogisticRegression(max_iter=10000)
log_reg.fit(x, y)

w_log_reg = log_reg.coef_[0]
b_log_reg = log_reg.intercept_

Y_log_reg = -(w_log_reg[0] * X + b_log_reg) / (w_log_reg[1] + 1e-5)
plt.figure()
plt.scatter(x[y == -1, 0], x[y == -1, 1], color='red', label='y=-1')
plt.scatter(x[y == 1, 0], x[y == 1, 1], marker='x', color='blue', label='y=1')
plt.plot(X, Y_log_reg, color='green', label='Logistic Regression')
plt.xlabel(r'$x_1$')
plt.ylabel(r'$x_2$')
plt.legend()
plt.show()

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

加点前:

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

加点后:

x = np.vstack((x, [[3, 3], [4, 4]]))
y = np.hstack((y, [-1, 1]))

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

左边SVM右边逻辑回归

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

5.RBF核函数对应的Φ(·)函数是将输入空间映射到无穷维空间的高斯函数,而输出为无穷维的特征映射Φ(·)的意义在于将原始数据映射到一个更高维度的空间,以便找到更好的数据分隔边界

6.

# 访问支持向量的索引
support_vector_indices = model.support_

# 获取支持向量
support_vectors = x[support_vector_indices]

# 绘制结果
fig = plt.figure(figsize=(6,6))
G = np.linspace(-1.5, 1.5, 100)
G = np.meshgrid(G, G)
X = np.array([G[0].flatten(), G[1].flatten()]).T # 转换为每行一个向量的形式
Y = model.predict(X)
Y = Y.reshape(G[0].shape)
plt.contourf(G[0], G[1], Y, cmap=cmap, alpha=0.5)

# 绘制支持向量
plt.scatter(support_vectors[:, 0], support_vectors[:, 1], marker='o', color='none', 
            edgecolor='purple', s=150, label='Support Vectors')

# 绘制原数据集的点
plt.scatter(x[y == -1, 0], x[y == -1, 1], color='red', label='y=-1')
plt.scatter(x[y == 1, 0], x[y == 1, 1], marker='x', color='blue', label='y=1')
plt.xlabel(r'$x_1$')
plt.ylabel(r'$x_2$')
plt.legend()
plt.show()

动手机器学习支持向量机+习题,机器学习,支持向量机,人工智能

7.

原问题

原问题是指SVM的原始优化问题,它直接处理数据点和模型参数。SVM的原问题涉及一个带有约束的优化问题,即在满足所有数据点到分隔超平面距离至少为某个固定值(即间隔)的条件下,最大化这个间隔。

在数学上,原问题可以表示为关于支持向量和模型参数(例如,权重向量和偏置项)的问题。如果数据集很大,那么相应的参数也会很多,因此,从这个角度看,原问题似乎是一个参数化模型。然而,由于解仅由一小部分称为支持向量的数据点决定,所以实际上并不需要存储整个数据集。

对偶问题

通过引入拉格朗日乘子将原问题的约束优化转换为无约束优化问题,我们得到了所谓的对偶问题。在这个过程中,数据点以拉格朗日乘子的形式出现,并且最终决策函数仅依赖于数据点之间的内积,而不是数据点的显式表示。这意味着在对偶形式下,我们不需要直接处理原始数据点,而是关注数据点之间的关系。

从参数更新方式来看,对偶问题通常只涉及拉格朗日乘子(alpha),而与原始问题中的参数(如权重和偏置)无关。这使得对偶问题看起来更像一个非参数化模型,因为它没有直接使用原始参数空间的大小作为其复杂性的度量。此外,对偶问题通常具有更少的变量(拉格朗日乘子的数量等于数据点的数量),这使得求解过程更加高效,尤其是在处理大规模数据集时。文章来源地址https://www.toymoban.com/news/detail-844923.html

到了这里,关于动手机器学习支持向量机+习题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习周刊 第4期:动手实战人工智能、计算机科学热门论文、免费的基于ChatGPT API的安卓端语音助手、每日数学、检索增强 (RAG) 生成技术综述

    机器学习周刊第4期聚焦了AI实战教程、热门计算机科学论文、基于ChatGPT的安卓端语音助手、数学定理分享以及前沿的检索增强(RAG)生成技术综述。

    2024年02月02日
    浏览(62)
  • 一文详解人工智能:线性回归、逻辑回归和支持向量机(SVM)

    在人工智能领域,线性回归、逻辑回归和支持向量机是常见的机器学习算法。本文将详细介绍这三种算法的原理和应用,并提供相应的代码示例。 线性回归是一种用于建立变量之间线性关系的回归分析方法。它通过拟合一个线性模型来预测连续变量的值。线性回归的目标是找

    2024年02月03日
    浏览(47)
  • 15. 机器学习 - 支持向量机

    Hi, 你好。我是茶桁。 在本节课开始呢,我给大家一份逻辑回归的练习,利用下面这个数据集做了一次逻辑回归预测心脏病的练习。 本次练习的代码在「茶桁的AI秘籍」在Github上的代码库内,数据集的获取在文末。这样做是因为我的数据集都是和百度盘同步的,很多数据集过

    2024年02月07日
    浏览(42)
  • 【机器学习】支持向量机(上)

    支持向量机作为传统机器学习算法中的霸主,其背后的数学知识是相当复杂且精密的。对于每个学习机器学习的同学而言,理解并掌握支持向量机的思路对于认识和学习其他算法也会起到非常巨大的推动作用。遗憾的是,鲜有博客能真正说清楚它的美妙之处,这也包括一些高

    2024年02月13日
    浏览(50)
  • 机器学习——支持向量机

    【说明】文章内容来自《机器学习——基于sklearn》,用于学习记录。若有争议联系删除。         支持向量机(support vector machine,SVM)是一类按监督学习方式对数据进行二元分类的广义线性分类器,其决策边界是对学习样本求解的最大边距超平面(maximum-marginhyperplane)。与逻辑

    2024年02月03日
    浏览(47)
  • 机器学习 -- 支持向量机

    之前尝试用knn算法尝试一个图像识别(给苹果,香蕉分类)的案例,很吃性能且准确率不佳。支持向量机(SVM)是一种广泛应用于分类和回归问题的强大监督学习算法。就很适用于这种场景。 支持向量(Support Vectors) 在支持向量机(SVM)中,支持向量是非常核心的概念。它

    2024年01月25日
    浏览(34)
  • 机器学习-6 支持向量机

    支持向量机(SVM)是一种基于 统计学习理论 的 监督学习 方法。 支持向量机在各个领域内的模式识别问题中都有广泛应用,包括人脸识别、文本分类、笔迹识别等。 支持向量机解决不同类型的问题: 当训练数据 线性可分 时,通过 硬间隔最大化 ,学习一个线性可分支持向

    2024年02月08日
    浏览(41)
  • 机器学习—支持向量机

    在本练习中,我们将使用支持向量机(SVM)来构建垃圾邮件分类器。 在开始练习前,需要 下载如下的文件进行数据上传 : data.tgz -包含本练习中所需要用的数据文件 其中: ex5data1.mat -数据集示例1 ex5data2.mat -数据集示例2 ex5data3.mat -数据集示例 3 spamTrain.mat -垃圾邮件训练集

    2024年02月09日
    浏览(38)
  • 机器学习_8、支持向量机

    2024年01月23日
    浏览(35)
  • 【机器学习笔记】11 支持向量机

    支 持 向 量 机 是 一 类 按 监 督 学 习 ( supervisedlearning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane) 。与逻辑回归和神经网络相比,支持向量机,在学习复杂的非线性方程时

    2024年02月19日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包