【阿旭机器学习实战】【21】通过SVM分类与回归实战案例,对比支持向量机(SVM)3种SVM不同核函数

简介: 【阿旭机器学习实战】【21】通过SVM分类与回归实战案例,对比支持向量机(SVM)3种SVM不同核函数

1. 3种SVM不同核函数介绍


线性核函数linear


适用范围:


主要用于线性可分的情况。


特点:


特征空间到输入空间的维度是一样的,参数少速度快,可解释性强,可以比较容易的知道哪些特征是重要的。


它对于线性可分情况分类效果比较理想,因此我们通常会先尝试用线性核函数来做分类,看看效果如何,如果不行再换其他的核函数。


多项式核函数(poly)


适用范围:


可用于线性与非线性分类。

特点:

通过将低维的输入空间映射到高维的特征空间的方式,使得原本线性不可分的数据线性可分。


多项式核函数的参数较多,当多项式阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。因此对于大数量级的幂数,不太适用,通常只用在已经大概知道一个比较小的幂数的情况。


高斯径向基核函数(rbf)


适用范围:

可用于线性与非线性分类。

特点:

高斯径向基核函数是一种局部性强的核函数,其可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,无论大样本还是小样本都有比较好的性能,而且其相对于多项式核函数参数要少,因此大多数情况下在不知道用什么核函数的时候,优先使用高斯核函数。


高斯径向基核函数只有一个参数,相比多项式核容易选择。缺点是可解释性差、计算速度比较慢、容易过拟合。


2. 使用不同SVM不同核函数对iris数据集进行分类


导入数据集并构建模型


svc_linear = SVC(kernel="linear")
svc_rbf = SVC(kernel="rbf")
svc_poly = SVC(kernel="poly")
# LinearSVC线性分类支持向量机,它是给根据liblinear实现的,可以用于二类分类,也可以用于多类分类
from sklearn.svm import LinearSVC
linearSVC = LinearSVC()
from sklearn import datasets
iris = datasets.load_iris()
data = iris.data[:,[2,3]]
target = iris.target
# 画出样本点的散点图
plt.scatter(data[:,0],data[:,1],c=target)

7d20b837ad8f4674a5573455765e7ee0.png

# 用以上的模型进行训练
svc_linear.fit(data,target)
svc_rbf.fit(data,target)
svc_poly.fit(data,target)
linearSVC.fit(data,target)
LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,
     intercept_scaling=1, loss='squared_hinge', max_iter=1000,
     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,
     verbose=0)


画出不同核函数模型的决策区域


在平面上生成150000个待预测的点


xmin,xmax = data[:,0].min(),data[:,0].max()
ymin,ymax = data[:,1].min(),data[:,1].max()
x = np.linspace(xmin,xmax,500)
y = np.linspace(ymin,ymax,300)
xx,yy = np.meshgrid(x,y)
xy = np.c_[xx.ravel(),yy.ravel()]
xy.shape
(150000, 2)

使用上述4个模型进行预测

linear_y = svc_linear.predict(xy)
rbf_y = svc_rbf.predict(xy)
poly_y = svc_poly.predict(xy)
linearSVC_y = linearSVC.predict(xy)

画出数据点的分类,即决策区域

plt.figure(figsize=(12,9))
y_ = [linear_y,rbf_y,poly_y,linearSVC_y]
titles = ["linear","rbf","poly","linearSVC"]
for i in range(len(y_)):
    axes = plt.subplot(2,2,i+1)
    axes.set_title(titles[i])
    plt.pcolormesh(xx,yy,y_[i].reshape(xx.shape),cmap="rainbow")
    plt.scatter(data[:,0],data[:,1],c=target)

8294751e9dc6487f91b96e9219339645.png

3. 使用3种不同核函数SVM回归器进行对比


from sklearn.svm import SVR
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
svr_linear = SVR(kernel="linear")  #线性核函数
svr_rbf = SVR(kernel="rbf")  # 高斯核函数
svr_poly = SVR(kernel="poly")  #多项式核函数
# 构建数据集
x = np.sort(np.random.rand(120)*20).reshape((-1,1))
y = np.sin(x).reshape((-1))
y
array([ 0.00742162,  0.24751523,  0.3415653 ,  0.34759352,  0.38696958,
        0.4421328 ,  0.55214074,  0.76303351,  0.87491982,  0.99823761,
        0.99980917,  0.99761508,  0.9208189 ,  0.65227279,  0.63461282,
        0.6229594 ,  0.52505248,  0.50287485,  0.46412807,  0.36936856,
        0.24375237, -0.25350717, -0.26024696, -0.33279932, -0.56187501,
       -0.654529  , -0.77757274, -0.78186399, -0.79296189, -0.81952154,
       -0.83833383, -0.8532612 , -0.85372675, -0.95442008, -0.95631099,
       -0.97157723, -0.98316123, -0.99660268, -0.98940421, -0.88825406,
       -0.8761492 , -0.83140796, -0.72885609, -0.67636221, -0.50023083,
       -0.33547563,  0.02380919,  0.04284093,  0.09876885,  0.1511908 ,
        0.5148709 ,  0.86849825,  0.92608232,  0.93889021,  0.99937328,
        0.99066457,  0.58532639,  0.14879434, -0.10706485, -0.3945345 ,
       -0.48553596, -0.72967251, -0.83200108, -0.85349259, -0.98519961,
       -0.91126438, -0.89261681, -0.58239636, -0.24621536, -0.21255149,
        0.07973857,  0.14214009,  0.22297726,  0.43508214,  0.97500725,
        0.99042149,  0.9999599 ,  0.99801811,  0.91532541,  0.89571095,
        0.85068955,  0.84204641,  0.53463984,  0.41512068,  0.29221854,
        0.07522218,  0.05414875, -0.11536683, -0.21672657, -0.50645076,
       -0.57996269, -0.63090667, -0.68752594, -0.71803267, -0.77350908,
       -0.82268006, -0.89454294, -0.99754715, -0.98425531, -0.87872174,
       -0.87453792, -0.79748762, -0.70055025, -0.27372036, -0.25888483,
       -0.23745825, -0.18223377, -0.14449555, -0.0983766 , -0.04744317,
        0.03364084,  0.25909822,  0.34909316,  0.56313943,  0.58188988,
        0.66766334,  0.76456595,  0.77336481,  0.81083299,  0.88017043])
plt.scatter(x,y)
• 1
<matplotlib.collections.PathCollection at 0x207ea6392b0>

076d97278cd249e48b502a4e8156b9b4.png


y += np.random.randn(120)*0.5
• 1


让不同的核函数来训练样本


svr_linear.fit(x,y)
svr_rbf.fit(x,y)
svr_poly.fit(x,y)
SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma='auto',
  kernel='poly', max_iter=-1, shrinking=True, tol=0.001, verbose=False)
x_test = np.linspace(0,20,200).reshape((200,1))
linear_y = svr_linear.predict(x_test)
rbf_y = svr_rbf.predict(x_test)
poly_y = svr_poly.predict(x_test)
plt.scatter(x,y)
plt.plot(x_test,linear_y,c="g")  #绿色:线性核函数
plt.plot(x_test,rbf_y,c="b")     #蓝色:高斯核函数
plt.plot(x_test,poly_y,c='r')    #红色:多项式核函数

ab13fef655674b55baea170b07ab47cd.png

可以看出,对于该案例,高斯核函数模型的预测效果好于其他2中核函数模型。


如果内容对你有帮助,感谢记得点赞+关注哦!

相关文章
|
12天前
|
机器学习/深度学习 传感器 运维
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
本文探讨了时间序列分析中数据缺失的问题,并通过实际案例展示了如何利用机器学习技术进行缺失值补充。文章构建了一个模拟的能源生产数据集,采用线性回归和决策树回归两种方法进行缺失值补充,并从统计特征、自相关性、趋势和季节性等多个维度进行了详细评估。结果显示,决策树方法在处理复杂非线性模式和保持数据局部特征方面表现更佳,而线性回归方法则适用于简单的线性趋势数据。文章最后总结了两种方法的优劣,并给出了实际应用建议。
42 7
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
|
2月前
|
机器学习/深度学习
如何用贝叶斯方法来解决机器学习中的分类问题?
【10月更文挑战第5天】如何用贝叶斯方法来解决机器学习中的分类问题?
|
2月前
|
机器学习/深度学习 算法 知识图谱
【机器学习】逻辑回归原理(极大似然估计,逻辑函数Sigmod函数模型详解!!!)
【机器学习】逻辑回归原理(极大似然估计,逻辑函数Sigmod函数模型详解!!!)
|
2月前
|
机器学习/深度学习 存储 自然语言处理
【机器学习】基于逻辑回归的分类预测
【机器学习】基于逻辑回归的分类预测
|
2月前
|
机器学习/深度学习 传感器 算法
机器学习入门(一):机器学习分类 | 监督学习 强化学习概念
机器学习入门(一):机器学习分类 | 监督学习 强化学习概念
|
2月前
|
机器学习/深度学习 算法 数据可视化
机器学习的核心功能:分类、回归、聚类与降维
机器学习领域的基本功能类型通常按照学习模式、预测目标和算法适用性来分类。这些类型包括监督学习、无监督学习、半监督学习和强化学习。
54 0
|
2月前
|
机器学习/深度学习 算法 PyTorch
【机器学习】揭开激活函数的神秘面纱
【机器学习】揭开激活函数的神秘面纱
|
4月前
|
机器学习/深度学习 人工智能 数据处理
【人工智能】项目实践与案例分析:利用机器学习探测外太空中的系外行星
探测外太空中的系外行星是天文学和天体物理学的重要研究领域。随着望远镜观测技术的进步和大数据的积累,科学家们已经能够观测到大量恒星的光度变化,并尝试从中识别出由行星凌日(行星经过恒星前方时遮挡部分光线)引起的微小亮度变化。然而,由于数据量巨大且信号微弱,传统方法难以高效准确地识别所有行星信号。因此,本项目旨在利用机器学习技术,特别是深度学习,从海量的天文观测数据中自动识别和分类系外行星的信号。这要求设计一套高效的数据处理流程、构建适合的机器学习模型,并实现自动化的预测和验证系统。
90 1
【人工智能】项目实践与案例分析:利用机器学习探测外太空中的系外行星
|
3月前
|
机器学习/深度学习 人工智能 算法
利用机器学习预测股市趋势:一个实战案例
【9月更文挑战第5天】在这篇文章中,我们将探索如何使用机器学习技术来预测股市趋势。我们将通过一个简单的Python代码示例来演示如何实现这一目标。请注意,这只是一个入门级的示例,实际应用中可能需要更复杂的模型和更多的数据。
|
4月前
|
机器学习/深度学习 人工智能 算法
【人工智能】机器学习、分类问题和逻辑回归的基本概念、步骤、特点以及多分类问题的处理方法
机器学习是人工智能的一个核心分支,它专注于开发算法,使计算机系统能够自动地从数据中学习并改进其性能,而无需进行明确的编程。这些算法能够识别数据中的模式,并利用这些模式来做出预测或决策。机器学习的主要应用领域包括自然语言处理、计算机视觉、推荐系统、金融预测、医疗诊断等。
87 1

热门文章

最新文章