IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 手把手教你机器学习之支持向量机 -> 正文阅读

[人工智能]手把手教你机器学习之支持向量机

1.支持向量机SVM的基本原理:

SVM就是解决线性不可分的算法。
将数据投射到高维空间,这正是SVM算法的核函数的功能.

在SVM中用得最普遍的两种把数据投射到高维空间的方法分别是多项式内核和径向基内核(RBF)。其中多项式内核比较容易理解,它是通过把样本原始特征进行乘方来把数据投射到高维空间。至于RBF内核,将在之后的例子中展示。

2.SVM算法的优势与不足:

SVM可以说是在机器学习领域非常强大的算法,SVM应对高维数据集和低维数据集都还算是得心应手。但是,前提条件是数据集的规模不算大。如果数据集中的样本数量在一万以内,SVM都能驾驭的了,但是如果样本数量超过十万的话,SVM就会非常耗费时间和内存。
SVM还有一个短板,就是对于数据预处理和参数调节要求非常高。所以现在很多场景下大家都会更乐意使用随机森林算法或者是梯度上升决策树算法。因为它们不需要对数据进行预处理,也不用费尽心机去调参。
其中gamma值越小,模型越倾向于欠拟合,gamma值越大,模型越倾向于过拟合。
至于正则化参数,C值越小,模型就越简单,C值越大,模型就越复杂。

3.SVM实例——波士顿房价回归分析:

#导入波士顿房价数据集
from sklearn.datasets import load_boston
boston=load_boston()
from sklearn.model_selection import train_test_split
#导入支持向量回归模型
from sklearn.svm import SVR
X,y=boston.data,boston.target
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=8)
for kernel in ['linear','rbf']:
    svr=SVR(kernel=kernel)
    svr.fit(X_train,y_train)
    print(kernel,'核函数的测试集得分:{}'.format(svr.score(X_test,y_test)))

请添加图片描述

结果分析:
从结果中可以看到,两种核函数的模型得分都不能令人满意,并且rbf的正确率很低很低,这是什么原因导致的呢?
这是因为数据集的各个特征之间的量级差的比较远。
SVM算法对数据预处理的要求是比较高的,如果数据特征量级差异较大,我们就需要对数据进行预处理。
为了让SVM算法能够更好的拟合数据,我们必须对数据集进行预处理。代码如下:

#导入波士顿房价数据集
from sklearn.datasets import load_boston
boston=load_boston()
from sklearn.model_selection import train_test_split
X,y=boston.data,boston.target
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=8)
from sklearn.preprocessing import StandardScaler
sca=StandardScaler()
sca.fit(X_train)
X_train_sca=sca.transform(X_train)
X_test_sca=sca.transform(X_test)
#导入支持向量回归模型
from sklearn.svm import SVR
for kernel in ['linear','rbf']:
    svr=SVR(kernel=kernel)
    svr.fit(X_train_sca,y_train)
    print(kernel,'核函数的测试集得分:{}'.format(svr.score(X_test_sca,y_test)))

请添加图片描述
结果分析:
从结果中可以看到,经过预处理之后,‘linear’内核的SVR得分变化不大,而‘rbf’内核的SVR得分有了巨大的提升。尤其是在测试集中的得分,已经提高到非常接近linear内核的模型了,那么如果我们进一步调整‘rbf’模型的参数,会有什么表现呢?
和SVC一样,SVR也有‘gamma’和‘C’两个参数,接下来我们试着对这两个参数进行修改:

svr=SVR(C=100,gamma=0.1)
svr.fit(X_train_sca,y_train)
print('调整参数后的模型在测试集上的得分:{}'.format(svr.score(X_test_sca,y_test)))

请添加图片描述
结果分析:
这是一个比较不错的结果,我们看到通过参数调节,‘rbf’内核的SVR模型在测试集上的得分,可以说现在模型的表现已经是可以接受的了。

小结:

SVM算法对于数据预处理和调参的要求都是非常高的了。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:09:55  更:2021-09-12 13:12:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 15:25:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码