机器学习

xueyifeiyun1989zx,公众号:围着围巾的小黑机器学习之监督学习实战

前文我们提到机器学习中的监督学习,其中有一个模型是我们提到的但是没有训练测试的,叫做支持向量机(简称SVM)。支持向量机也是监督学习里面一个非常容易理解的模型。概念和公式定义我们就不带大家看了,我们还是从代码实战的角度来学习。

SVM本质原理是利用超平面将数据分割成可分的部分,对于可分的数据集来说不用做维度转换,那么对于不可分的数据集要想利用SVM怎么办呢,是有办法的,就是核函数。核函数的存在的意义就是将低维不可分的数据转化成高维可分的数据,从而实现对数据的分类。本文主要关注不同SVM中的核函数,因为我们主要是应用为主,所以只会提高各种核函数并做相关的代码实践,不会对各种核函数的原理进行分析。

另外还有一个问题是需要在本文解决的,大家如果前文仔细看的话,会发现在整个训练和预测的过程中,我们生成了两个数据集,操作起来有点麻烦,那么是否有现成的方法可以自动帮我们将数据集切分成训练集和测试集呢,答案显然是肯定的。

1、导入依赖包、生成基础数据集

from sklearn.datasets import make_classificationimport matplotlib.pyplot as pltfrom sklearn import preprocessingfrom sklearn.model_selection import train_test_splitfrom sklearn.svm import SVCfrom sklearn.metrics import accuracy_scoreimport matplotlib.pyplot as pltimport mpl_toolkits.mplot3d# 生成基础特征数据,该数据包含100条记录,每条记录包含两个特征X,y = make_classification(n_samples = 10000,\n_features = 3,n_redundant = 0,n_repeated = 0)

2、对数据集合进行拆分和模型训练

# 生成训练集和测试集train_x,test_x,train_y,test_y = train_test_split(X,y)# 选择linear核函数,在sklearn中,其模型默认的核函数的rbfsvm = SVC(kernel = 'linear')svm.fit(train_x,train_y)

3、模型预测

# 在训练集上预测predict_train = svm.predict(train_x)# 在训练集上准确率accuracy_score(train_y,predict_train)# 0.8693# 在测试集上预测predict_test = svm.predict(test_x)# 在测试集上准确率accuracy_score(test_y,predict_test)# 0.8573

4、模型可视化

# 分别生成预测正确的和预测错误的数据集合predictTure = test_x[test_y == predict_test]predictFalse = test_x[test_y != predict_test]# 定义一个画图的方法,输入的参数为预测正确和预测错误的数据集合def plot3DPredictStatus(predictTure,predictFalse):    # 创建一个三维的绘图工程    ax = plt.subplot(projection = '3d')     # 设置图名称    ax.set_title('3d_predict_show')     # 绘制数据点 color: 'r'红色,'b'蓝色等颜色    # x代表预测错误的数据 ,o代表预测正确的数据    ax.scatter(predictTure[:,0], \    predictTure[:,1], predictTure[:,2],\     c = 'r',marker = 'o',cmap = 'coolwarm')     ax.scatter(predictFalse[:,0],\     predictFalse[:,1], predictFalse[:,2], \     c = 'b',marker = 'x',cmap = 'coolwarm')     # 设置x坐标轴    ax.set_xlabel('X')     # 设置y坐标轴    ax.set_ylabel('Y')      # 设置z坐标轴    ax.set_zlabel('Z')      # 画图     plt.show()# 画图函数调用plot3DPredictStatus(predictTure,predictFalse)

图、在预测集上正确的点(红色)和错误(蓝色)的点

5、对比不同核函数的效果

通过查看sklearn的SVM相关的参数说明(如下图),知道其至少提供linear、poly、rbf、sigmod、precomputed等核函数。

图、sklearn中SVM相关的核函数类型说明

# 定义模拟多个核函数的方法def multkernelCompare():    print('{:>10s}|{:8s}'.format('kernel','accuracy'))    for kernel in ['linear','poly','rbf','sigmoid']:        svm = SVC(kernel = kernel)        svm.fit(train_x,train_y)        accuracy =accuracy_score(test_y,svm.predict(test_x))        print('{:>10s}|{:8.4f}'.format(kernel,accuracy))# 不同核函数对比方法调用multkernelCompare()

图、不同核函数预测结果的准确性对比

sklearn svm如何选择核函数_机器学习之支持向量机多种核模型对比相关推荐

  1. sklearn svm如何选择核函数_使用python+sklearn实现成对度量、相关性和核函数

    sklearn.metrics.pairwise子模块实现了评估样本集的成对距离或相关性.此模块包含距离度量和内核.这里对这两个问题作了简要的总结.距离度量是函数d(a, b),如果对象a和b被认为比 ...

  2. sklearn svm如何选择核函数_文本挖掘篇|利用SVM进行短文本分类

    何为数据挖掘,顾名思义就是从大量数据中挖掘或抽取出知识.在实际中,进行数据挖掘的数据不仅仅有数值型数据,还有图片型数据,文本型数据等.而所谓文本挖掘,就是从大量文本数据中,提取出对信息使用者有价值的信 ...

  3. python svm核函数_机器学习算法实践-SVM核函数和软间隔

    前言 上文中简单总结了对于线性可分数据的SVM的算法原理,本文对于非线性可分以及有噪声存在的时候我们需要对基本SVM算法的改进进行下总结其中包括: 核函数在SVM算法中的使用 引入松弛变量和惩罚函数的 ...

  4. python网格搜索核函数_机器学习笔记——模型调参利器 GridSearchCV(网格搜索)参数的说明...

    算法 数据结构 机器学习笔记--模型调参利器 GridSearchCV(网格搜索)参数的说明 GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数.但是这个 ...

  5. python支持向量机回归_机器学习实战-支持向量机原理、Python实现和可视化(分类)...

    支持向量机(SVM)广泛应用于模式分类和非线性回归领域. SVM算法的原始形式由Vladimir N.Vapnik和Alexey Ya提出.自从那以后,SVM已经被巨大地改变以成功地用于许多现实世界问 ...

  6. Sklearn 损失函数如何应用到_机器学习大牛最常用的5个回归损失函数,你知道几个?...

    "损失函数"是机器学习优化中至关重要的一部分.L1.L2损失函数相信大多数人都早已不陌生.那你了解Huber损失.Log-Cosh损失.以及常用于计算预测区间的分位数损失么?这些可 ...

  7. sklearn.svm中LinearSVR(svm线性回归)、LinearSVC(svm线性分类)与SVC(svm分类)、SVR(svm回归)之间的区别

    区别: LinearSVC: SVM线性分类器:用来实现线性的分类任务 """鸢尾花数据集,执行一个分类问题"""import numpy ...

  8. 机器学习笔记——支持向量机SMO算法完整版代码分析

    机器学习笔记--支持向量机SMO算法完整版代码分析 代码大体分析 外循环 参数类 内循环 KKT条件判断 eCache参数 完整SMO代码 添加核函数代码 代码参考书籍:<机器学习实战> ...

  9. sklearn保存svm分类模型_机器学习100天-Day1601线性支持向量机分类

    说明:本文依据<Sklearn 与 TensorFlow 机器学习实用指南>完成,所有版权和解释权均归作者和翻译成员所有,我只是搬运和做注解. 第五章是对支持向量机SVM的系统介绍,阐述支 ...

最新文章

  1. 重大布局!北京大学,落子上海!
  2. 蚂蚁森林合种计划(2020.10.31,7天有效,每周更新)
  3. 《ArcGIS Runtime SDK for Android开发笔记》——数据制作篇:发布具有同步能力的FeatureService服务...
  4. python程序员面试自我介绍_如何拿到面试公司一半Offer——我的Python求职之路
  5. position_css
  6. Mac安装wget的两种方法
  7. 命令改计算机用户名和密码,利用NET命令添加、修改用户账户信息
  8. 康师傅就“水源事件”发声明 称矿物质水合标
  9. java 创建一个类_java创建一个类
  10. 零基础Linux搭建虚拟专用网络(实现游戏局域网联机)
  11. gazebo中视觉仿真怎么使用自定义贴图的问题
  12. 3.tensorflow单层神经网络mnist数字识别:训练,加载模型,预测图像
  13. MDT 2013 Update 1 Preview 部署 Windows 10之WDS部署服务配置
  14. Java包的创建和使用
  15. 淘宝,1688,京东店铺所有商品接口分享
  16. Day02:基本IO操作
  17. Python数据全球人口数据
  18. Unity3D 2018 3.0新手入门
  19. [C/C++]二分查找专题/最后一个小于等于目标值target的数/第一个大于等于目标值target的数
  20. 大数据时代的地理信息系统发展

热门文章

  1. LeetCode之Island Perimeter
  2. 电子商务应用课程知识整理 第五章-搜索引擎优化(SEO)
  3. 电子商务应用课程知识整理 第四章-搜索引擎
  4. 他从小把数学书当小说看,凭借一本书将全世界狠狠甩在身后,被誉为中国的牛顿...
  5. 史上最惨锦鲤即将来袭!奖品堪比5年高考3年模拟!
  6. 预售┃连锁反应装置积木好玩到尖叫!
  7. SparkSQL DataFrame进阶篇
  8. composer 查看php 版本_最常用的PHP版本:PHP 7.3取代7.2
  9. qtp服务器怎么获得日志信息,QTP自动化测试-打开运行报告
  10. 5码默认版块_5个小众的生活学习类的宝藏App