机器学习测试笔记(13)——支持向量机(下)

简介: 机器学习测试笔记(13)——支持向量机(下)

接下来我们看一下gamma参数。


def gamma_for_RBF():
       wine = datasets.load_wine()
#选取数据集前两个特征
       X = wine.data[:,:2]
       y = wine.target
       C = 1.0 #SVM参数正则化
       models  =(svm.SVC(kernel='rbf',gamma=0.1,C=C),
               svm.SVC(kernel='rbf',gamma=1,C=C),
               svm.SVC(kernel='rbf',gamma=10,C=C))
       models = (clf.fit(X,y)  for clf in models)
#设置标题
       titles = ('gamma =  0.1',
'gamma = 1',
'gamma = 10')
       fig, sub =  plt.subplots(1,3,figsize =(10,3))
       X0, X1 = X[:,0],X[:,1]
       xx, yy =  make_meshgrid(X0, X1)
#使用前面定义的函数画图
for clf, title, ax in  zip(models,titles,sub.flatten()):
              plot_contour(ax,clf,xx,yy,cmap=plt.cm.plasma,alpha=0.8)
              ax.scatter(X0,X1,c=y,cmap=plt.cm.plasma,s=20,edgecolors='k')
              ax.set_xlim(xx.min(),xx.max())  
              ax.set_ylim(yy.min(),yy.max())
              ax.set_xlabel('Feature  0')
              ax.set_ylabel('Feature  1')
              ax.set_xticks(())
              ax.set_yticks(())
              ax.set_title(title)
       plt.show()

image.png


由此可以看出:

  • gamma越小,RBF内核直径越大,更多节点被圈进去,趋于欠拟合。
  • gamma越大,RBF内核直径越小,更少节点被圈进去,趋于过拟合。


SVM的优势和劣势如下:

image.png


SVM需要考虑:

image.png


我们下面通过波士顿房价数据例子来讨论一下如何调优的过程。


from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
def SVM_for_boston():
   boston =  datasets.load_boston()
   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','sigmoid','poly']:
      svr =  svm.SVR(kernel=kernel)
       svr.fit(X_train,y_train)
      print(kernel,'核函数的模型训练集得分:  {:.3f}'.format(svr.score(X_train,y_train)))
      print(kernel,'核函数的模型测试集得分: {:.3f}'.format(svr.score(X_test,y_test)))


输出

linear 核函数的模型训练集得分: 0.709
linear 核函数的模型测试集得分: 0.696
rbf 核函数的模型训练集得分:  0.192
rbf 核函数的模型测试集得分:  0.222
sigmoid 核函数的模型训练集得分: 0.059
sigmoid 核函数的模型测试集得分: 0.075
poly 核函数的模型训练集得分: 0.195
poly 核函数的模型测试集得分: 0.207


这个结果是非常糟糕的。通过下面程序来看一下数据分布图。


ax = plt.gca()
#将特征数字中的最大和最小值一散点图形式画出来
       plt.plot(X.min(axis=0),'v',label='min')
       plt.plot(X.max(axis=0),'^',label='max')
       plt.yscale('log') #纵坐标为对数形式
       plt.legend(loc='best') #设置图注位置最佳
       ax.set_xlabel('feature')
       ax.set_ylabel('featuremagnitude')
       plt.show()

image.png


图标横坐标是第几个样本,对应纵坐标为数据的最大最小值数据,由此可见数据在10-2103之间,差距更大。下面我们通过StandardScaler()函数来对训练集和测试集数据进行预处理。


#对训练集和测试集数据进行预处理
scaler = StandardScaler()
       scaler.fit(X_train)
       X_train_scaler =scaler.transform(X_train)
       X_test_scaler = scaler.transform(X_test)
       plt.plot(X_train_scaler.min(axis=0),'v',label='trainset min')
       plt.plot(X_train_scaler.max(axis=0),'^',label='trainset max')
       plt.plot(X_test_scaler.min(axis=0),'v',label='testset min')
       plt.plot(X_test_scaler.max(axis=0),'^',label='testset max')
       plt.legend(loc='best')
       ax.set_xlabel('scaledfeature')
       ax.set_ylabel('scaledfeature magnitude')
       plt.show()

image.png


这样数据集中在-410之间。我们通过预处理后的数据进行训练模型。

for kernel in ['linear','rbf','sigmoid','poly']:

             svr =svm.SVR(kernel=kernel)

             svr.fit(X_train_scaler,y_train)

             print(kernel,'预处理后训练集得分:{:.3f}'.format(svr.score(X_train_scaler,y_train)))

             print(kernel,'预处理后测试集得分:{:.3f}'.format(svr.score(X_test_scaler,y_test)))

输出:


linear 预处理后训练集得分: 0.706
linear 预处理后测试集得分: 0.698
rbf 预处理后训练集得分:  0.665
rbf 预处理后测试集得分:  0.695
sigmoid 预处理后训练集得分: 0.564
sigmoid 预处理后测试集得分: 0.634
poly 预处理后训练集得分: 0.686
poly 预处理后测试集得分: 0.623


由此可见,Linear变化不大,其他都变化很大。下面我们调节下Cgamma参数,首先设置C=100gamma=0.1


# 调节参数
for kernel in ['linear','rbf','sigmoid','poly']:
svr = svm.SVR(kernel=kernel,C=100,gamma=0.1)
svr.fit(X_train_scaler,y_train)
print(kernel,'调节参数后训练集得分: {:.3f}'.format(svr.score(X_train_scaler,y_train)))
print(kernel,'调节参数后测试集得分:{:.3f}'.format(svr.score(X_test_scaler,y_test)))

输出


linear 调节参数后训练集得分: 0.706
linear 调节参数后测试集得分: 0.699
rbf 调节参数后训练集得分:  0.966
rbf 调节参数后测试集得分:  0.894
sigmoid 调节参数后训练集得分: -3768.620
sigmoid 调节参数后测试集得分: -5454.605
poly 调节参数后训练集得分: 0.950
poly 调节参数后测试集得分: 0.318


然后我们看一下C=100gamma=0.005


# 调节参数
for kernel in ['linear','rbf','sigmoid','poly’]:
  svr =svm.SVR(kernel=kernel,C=100,gamma=0.005)
 svr.fit(X_train_scaler,y_train)
  print(kernel,'调节参数(C=100,gamma=0.005)后训练集得分:{:.3f}'.format(svr.score(X_train_scaler,y_train)))
  print(kernel,'调节参数(C=100,gamma=0.005)后测试集得分: {:.3f}'.format(svr.score(X_test_scaler,y_test)))


输出


linear 调节参数后训练集得分: 0.706
linear 调节参数后测试集得分: 0.699
rbf 调节参数后训练集得分:  0.841
rbf 调节参数后测试集得分:  0.829
sigmoid 调节参数后训练集得分: 0.698
sigmoid 调节参数后测试集得分: 0.695
poly 调节参数后训练集得分: 0.240
poly 调节参数后测试集得分: 0.232


最后绘制表格,分析一下输出结果。


模型

预处理前

预处理后

调节参数后(gamma=0.1)

调节参数(gamma=0.005)

默认gammaC

C=100

linear

0.709

0.706

0.706

0.706

0.696

0.698

0.699(不变)

0.699(不变)

rbf

0.192

0.665

0.966

0.841

0.222

0.695

0.894(提高)

0.829(略降)

sigmoid

0.059

0.564

-3768.620

0.698(提高)

0.075

0.634

-5454.605(失控)

0.695

poly

0.195

0.686

0.950

0.240(降低,但是不存在过拟合)

0.207

0.623

0.318(过拟合)

0.232


通过调节可以看出:

  • linear基本不受影响;
  • C=100,gamma=0.1sigmoid失控,poly出现过拟合,rbf表现很好。
  • C=100,gamma=0.005sigmoid恢复,poly出现降低,但是没有过拟合现象,rbf略有下降。

由此可见,选择模型类型和调节参数是非常重要的。


—————————————————————————————————


软件安全测试

https://study.163.com/course/courseMain.htm?courseId=1209779852&share=2&shareId=480000002205486

接口自动化测试

https://study.163.com/course/courseMain.htm?courseId=1209794815&share=2&shareId=480000002205486

DevOps 和Jenkins之DevOps

https://study.163.com/course/courseMain.htm?courseId=1209817844&share=2&shareId=480000002205486

DevOps与Jenkins 2.0之Jenkins

https://study.163.com/course/courseMain.htm?courseId=1209819843&share=2&shareId=480000002205486

Selenium自动化测试

https://study.163.com/course/courseMain.htm?courseId=1209835807&share=2&shareId=480000002205486

性能测试第1季:性能测试基础知识

https://study.163.com/course/courseMain.htm?courseId=1209852815&share=2&shareId=480000002205486

性能测试第2季:LoadRunner12使用

https://study.163.com/course/courseMain.htm?courseId=1209980013&share=2&shareId=480000002205486

性能测试第3季:JMeter工具使用

https://study.163.com/course/courseMain.htm?courseId=1209903814&share=2&shareId=480000002205486

性能测试第4季:监控与调优

https://study.163.com/course/courseMain.htm?courseId=1209959801&share=2&shareId=480000002205486

Django入门

https://study.163.com/course/courseMain.htm?courseId=1210020806&share=2&shareId=480000002205486

啄木鸟顾老师漫谈软件测试

https://study.163.com/course/courseMain.htm?courseId=1209958326&share=2&shareId=480000002205486

目录
相关文章
|
10月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
313 6
|
10月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
231 1
|
10月前
|
机器学习/深度学习 数据采集 算法
机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用
医疗诊断是医学的核心,其准确性和效率至关重要。本文探讨了机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用。文章还讨论了Python在构建机器学习模型中的作用,面临的挑战及应对策略,并展望了未来的发展趋势。
635 1
|
11月前
|
机器学习/深度学习 计算机视觉 Python
模型预测笔记(三):通过交叉验证网格搜索机器学习的最优参数
本文介绍了网格搜索(Grid Search)在机器学习中用于优化模型超参数的方法,包括定义超参数范围、创建参数网格、选择评估指标、构建模型和交叉验证策略、执行网格搜索、选择最佳超参数组合,并使用这些参数重新训练模型。文中还讨论了GridSearchCV的参数和不同机器学习问题适用的评分指标。最后提供了使用决策树分类器进行网格搜索的Python代码示例。
879 1
|
11月前
|
机器学习/深度学习 人工智能 安全
自动化测试的未来:AI与机器学习的结合
随着技术的发展,软件测试领域正迎来一场革命。自动化测试,一度被认为是提高效率和准确性的黄金标准,如今正在被人工智能(AI)和机器学习(ML)的浪潮所推动。本文将探讨AI和ML如何改变自动化测试的面貌,提供代码示例,并展望这一趋势如何塑造软件测试的未来。我们将从基础概念出发,逐步深入到实际应用,揭示这一技术融合如何为测试工程师带来新的挑战和机遇。
165 3
|
10月前
|
机器学习/深度学习 数据采集 人工智能
自动化测试的未来:AI与机器学习的融合之路
【10月更文挑战第41天】随着技术的快速发展,软件测试领域正经历一场由人工智能和机器学习驱动的革命。本文将探讨这一趋势如何改变测试流程、提高测试效率以及未来可能带来的挑战和机遇。我们将通过具体案例分析,揭示AI和ML在自动化测试中的应用现状及其潜力。
193 0
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试的未来:AI与机器学习的融合
【9月更文挑战第29天】在软件测试领域,自动化测试一直是提高测试效率和质量的关键。随着人工智能(AI)和机器学习(ML)技术的飞速发展,它们正逐步渗透到自动化测试中,预示着一场测试革命的来临。本文将探讨AI和ML如何重塑自动化测试的未来,通过具体案例展示这些技术如何优化测试流程,提高测试覆盖率和准确性,以及它们对测试工程师角色的影响。
204 7
|
12月前
|
机器学习/深度学习 人工智能 数据挖掘
探索自动化测试的未来:AI与机器学习的融合
【9月更文挑战第29天】在软件测试领域,自动化测试一直是提高效率和准确性的关键。但随着技术的发展,特别是人工智能(AI)和机器学习(ML)的兴起,我们见证了一个新时代的到来——自动化测试的未来正逐渐被重新定义。本文将探讨AI和ML如何改变自动化测试的面貌,从智能测试脚本的生成到测试结果的深度分析,我们将一探究竟这些前沿技术是如何使测试流程更加智能化、高效化,并预测它们将如何塑造软件测试的未来趋势。
|
3月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
683 23
|
8月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。