初步了解SVM机器学习之支持向量机
以下为本次会使用的核函数

目录

  • Ⅰ-处理月亮数据集
    • 代码准备
    • 1.基于线性核函数
    • 2.基于多项式核
    • 3.基于高斯核
  • Ⅱ-处理鸢尾花数据集
    • 代码处理
    • 1.基于线性核
    • 2.基于多项式核
    • 3.基于高斯核
  • 小结

Ⅰ-处理月亮数据集

代码准备

# 边界绘制函数
import numpy as np
from matplotlib.colors import ListedColormap
def plot_decision_boundary(model,axis):x0,x1=np.meshgrid(np.linspace(axis[0],axis[1],int((axis[1]-axis[0])*100)).reshape(-1,1),np.linspace(axis[2],axis[3],int((axis[3]-axis[2])*100)).reshape(-1,1))# meshgrid函数是从坐标向量中返回坐标矩阵x_new=np.c_[x0.ravel(),x1.ravel()]y_predict=model.predict(x_new)#获取预测值zz=y_predict.reshape(x0.shape)custom_cmap=ListedColormap(['#EF9A9A','#FFF59D','#90CAF9'])plt.contourf(x0,x1,zz,cmap=custom_cmap)
from sklearn import datasets   #导入数据集
data_x,data_y = datasets.make_moons(n_samples=100, shuffle=True, noise=0.1, random_state=None)#生成月亮数据集
from sklearn.preprocessing import StandardScaler
scaler=StandardScaler()# 标准化
data_x = scaler.fit_transform(data_x)#计算训练数据的均值和方差
import matplotlib.pyplot as plt
plt.scatter(data_x[data_y==0,0],data_x[data_y==0,1])
plt.scatter(data_x[data_y==1,0],data_x[data_y==1,1])
plt.show()

1.基于线性核函数

from sklearn.svm import LinearSVC
liner_svc=LinearSVC(C=1e9,max_iter=100000)#线性svm分类器,iter是迭达次数
liner_svc.fit(data_x,data_y)
#画图并显示参数和截距
plot_decision_boundary(liner_svc,axis=[-3,3,-3,3])
plt.scatter(data_x[data_y==0,0],data_x[data_y==0,1],color='red')
plt.scatter(data_x[data_y==1,0],data_x[data_y==1,1],color='blue')
plt.show()
print('参数权重')
print(liner_svc.coef_)
print('模型截距')
print(liner_svc.intercept_)

2.基于多项式核

from sklearn.preprocessing import PolynomialFeatures #导入多项式回归
from sklearn.pipeline import Pipeline #导入python里的管道
def PolynomialSVC(degree,c=10):#多项式svm''':param d:阶数:param C:正则化常数:return:一个Pipeline实例'''return Pipeline([# 将源数据 映射到 3阶多项式("poly_features", PolynomialFeatures(degree=degree)),# 标准化("scaler", StandardScaler()),# SVC线性分类器("svm_clf", LinearSVC(C=10, loss="hinge", random_state=42,max_iter=10000))])poly_svc=PolynomialSVC(degree=3)
poly_svc.fit(data_x,data_y)
# 画图
plot_decision_boundary(poly_svc,axis=[-3,3,-3,3])#绘制边界
plt.scatter(data_x[data_y==0,0],data_x[data_y==0,1],color='red')#画点
plt.scatter(data_x[data_y==1,0],data_x[data_y==1,1],color='blue')
plt.show()
print('参数权重')
print(poly_svc.named_steps['svm_clf'].coef_)
print('模型截距')
print(poly_svc.named_steps['svm_clf'].intercept_)

3.基于高斯核

from sklearn.svm import SVC #导入svm
def RBFKernelSVC(gamma=1.0):return Pipeline([('std_scaler',StandardScaler()),('svc',SVC(kernel='rbf',gamma=gamma))])
svc=RBFKernelSVC(gamma=4)#gamma参数很重要,gamma参数越大,支持向量越小
svc.fit(data_x,data_y)
plot_decision_boundary(svc,axis=[-3,3,-3,3])
plt.scatter(data_x[data_y==0,0],data_x[data_y==0,1],color='red')#画点
plt.scatter(data_x[data_y==1,0],data_x[data_y==1,1],color='blue')
plt.show()

Ⅱ-处理鸢尾花数据集

代码处理

import numpy as np
from sklearn import datasets   #导入数据集
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from matplotlib.colors import ListedColormap
# 边界绘制函数
def plot_decision_boundary(model,axis):x0,x1=np.meshgrid(np.linspace(axis[0],axis[1],int((axis[1]-axis[0])*100)).reshape(-1,1),np.linspace(axis[2],axis[3],int((axis[3]-axis[2])*100)).reshape(-1,1))# meshgrid函数是从坐标向量中返回坐标矩阵x_new=np.c_[x0.ravel(),x1.ravel()]y_predict=model.predict(x_new)#获取预测值zz=y_predict.reshape(x0.shape)custom_cmap=ListedColormap(['#EF9A9A','#FFF59D','#90CAF9'])plt.contourf(x0,x1,zz,cmap=custom_cmap)
iris = datasets.load_iris()
data_x = iris.data[:, :2]
data_y = iris.target
scaler=StandardScaler()# 标准化
data_x = scaler.fit_transform(data_x)#计算训练数据的均值和方差
plt.rcParams["font.sans-serif"] = ['SimHei']    # 用来正常显示中文标签,SimHei是字体名称,字体必须在系统中存在,字体的查看方式和安装第三部分
plt.rcParams['axes.unicode_minus'] = False     # 用来正常显示负号
plt.scatter(data_x[data_y==0, 0],data_x[data_y==0, 1])    # 选取y所有为0的+X的第一列
plt.scatter(data_x[data_y==1, 0],data_x[data_y==1, 1])    # 选取y所有为1的+X的第一列
plt.scatter(data_x[data_y==2, 0],data_x[data_y==2, 1])    # 选取y所有为2的+X的第一列
plt.xlabel('sepal length')    # 设置横坐标标注xlabel为sepal width
plt.ylabel('sepal width')    # 设置纵坐标标注ylabel为sepal length
plt.title('sepal散点图')    # 设置散点图的标题为sepal散点图
plt.show()

1.基于线性核

from sklearn.svm import LinearSVC
svc_line = LinearSVC(C =1e9,max_iter=1000000) #线性SVM分类器
svc_line.fit(data_x,data_y)#训练svm
plot_decision_boundary(svc_line,axis=[-3,3,-3,4])
plt.scatter(data_x[data_y==0,0],data_x[data_y==0,1])
plt.scatter(data_x[data_y==1,0],data_x[data_y==1,1])
plt.scatter(data_x[data_y==2,0],data_x[data_y==2,1])
plt.show()

2.基于多项式核

from sklearn.preprocessing import PolynomialFeatures #导入多项式回归
from sklearn.pipeline import Pipeline #导入python里的管道
def PolynomialSVC(degree,c=5):#多项式svm""":param d:阶数:param C:正则化常数:return:一个Pipeline实例"""return Pipeline([# 将源数据 映射到 3阶多项式("poly_features", PolynomialFeatures(degree=degree)),# 标准化("scaler", StandardScaler()),# SVC线性分类器("svm_clf", LinearSVC(C=c, loss="hinge", random_state=42,max_iter=100000))])poly_svc=PolynomialSVC(degree=3)
poly_svc.fit(data_x,data_y)
plot_decision_boundary(poly_svc,axis=[-3,3,-3,4])
plt.scatter(data_x[data_y==0,0],data_x[data_y==0,1])
plt.scatter(data_x[data_y==1,0],data_x[data_y==1,1])
plt.scatter(data_x[data_y==2,0],data_x[data_y==2,1])
plt.show()

3.基于高斯核

from sklearn.svm import SVC #导入svm
def RBFKernelSVC(gamma=1.0):return Pipeline([('std_scaler',StandardScaler()),('svc',SVC(kernel='rbf',gamma=gamma))])
svc=RBFKernelSVC(gamma=42)#gamma参数很重要,gamma参数越大,支持向量越小
svc.fit(data_x,data_y)
plot_decision_boundary(svc,axis=[-3,3,-3,4])
plt.scatter(data_x[data_y==0,0],data_x[data_y==0,1])
plt.scatter(data_x[data_y==1,0],data_x[data_y==1,1])
plt.scatter(data_x[data_y==2,0],data_x[data_y==2,1])
plt.show()

小结

使用多种不同的核函数对月亮数据集与鸢尾花数据集进行分类实践

参考
《机器学习》分析鸢尾花数据集
机器学习–支持向量机 (SVM)算法

SVM处理月亮、鸢尾花数据集相关推荐

  1. 各种机器学习方法实现多分类(KNN,Logistics,Decision tree,byeis,SVM)以鸢尾花数据集为例

    之前做的关于分类问题大都是基于CNN实现图像分类如手写体识别-CNN实现minst识别,已有的参考也是比较多,还整理过一个关于PIMA糖尿病人数据集的分类,该问题属于对于数据的二分类问题,根据数据判断 ...

  2. 鸢尾花数据集、月亮数据集二分类可视化分析

    鸢尾花数据集.月亮数据集二分类可视化分析 目录 鸢尾花数据集.月亮数据集二分类可视化分析 一.线性LDA算法 1.LDA算法 2.鸢尾花数据集 2.月亮数据集 二.K-Means算法 1.K-Mean ...

  3. Python实现鸢尾花数据集分类问题——基于skearn的SVM(有详细注释的)

    Python实现鸢尾花数据集分类问题--基于skearn的SVM 代码如下: 1 # !/usr/bin/env python2 # encoding: utf-83 __author__ = 'Xi ...

  4. python决策树分类 导入数据集_BPNN、决策树、KNN、SVM分类鸢尾花数据集Python实现...

    数据集处理 数据获取 使用sklearn的dataset获取数据 from sklearn import datasets from sklearn.model_selection import tr ...

  5. 『自己的工作3』梯度下降实现SVM多分类+最详细的数学推导+Python实战(鸢尾花数据集)

    梯度下降实现SVM多分类+最详细的数学推导+Python实战(鸢尾花数据集)! 文章目录 一. SVM梯度公式详细推导 1.1. SVM多分类模型 1.2. SVM多分类梯度公式推导 1.3. SVM ...

  6. 实验二:用python实现SVM支持向量机并对鸢尾花数据集分类

    实验二:SVM支持向量机 1. 实验内容: (1)用你熟知的语言(尽量使用python)实现支持向量机的算法,并在给定的数据集上训练. (2)在测试集上用训练好的支持向量机进行测试,并将预测结果以cs ...

  7. ML之mlxtend:基于iris鸢尾花数据集利用逻辑回归LoR/随机森林RF/支持向量机SVM/集成学习算法结合mlxtend库实现模型可解释性(决策边界可视化)

    ML之mlxtend:基于iris鸢尾花数据集利用逻辑回归LoR/随机森林RF/支持向量机SVM/集成学习算法结合mlxtend库实现模型可解释性(决策边界可视化) 目录 相关文章 ML之mlxten ...

  8. 支持向量机实现鸢尾花数据集分类matlab

    问题描述: 在进行感知机,以及逻辑斯蒂回归问题的讨论中,我们都以二分类问题为例.其中对于线性不可分的数据集,感知机和逻辑斯蒂回归已然失效,逻辑斯蒂回归对感知机进行的优化,是进行了一种思维上的" ...

  9. SVM训练莺尾花数据集

    SVM训练莺尾花数据集 代码在莺尾花数据集上训练SVM,数据集由莺尾花的测量值及其相应的物种标签组成.该模型使用70%数据用于训练,然后剩余部分进行测试.其中′fit′'fit'′fit′方法在训练集 ...

最新文章

  1. 端口号被占用怎么解决
  2. c#中volatile关键字的作用
  3. Eclipse中异常断点问题
  4. CentOS上如何把Web服务器从Apache换到nginx
  5. 2022-01-12
  6. Cisco 3550-EMI 交 换 机 配 置 教 程
  7. Java开发工具可以促进编程!
  8. Learning Multiview 3D point Cloud Registration论文阅读笔记
  9. python控制流代码怎么用_Python-11:Python语法基础-控制流
  10. Kubernetes Node Controller源码分析之配置篇
  11. 人工智能感知技术是机器人应用支撑技术之一
  12. openstack实例启动失败_Nokia NESC,这是世界上最大的OpenStack私有云之一
  13. Office 2010 文件验证
  14. plsql 查看表结构所有的字段_plsql导出所有表的数据
  15. java 获取本机地址_java如何获取本机IP地址
  16. Python入门基础(8)--私有化属性和方法/Property属性/_new_方法/单例模式/错误和异常处理/Python动态添加属性和方法/_slots_属性
  17. Windows下Netron安装
  18. 如何在ionic官网打包自己的App
  19. CCF优秀博士学位论文奖初评名单出炉!清华入选4人,数量第一
  20. 如何在iOS上创建矢量图形

热门文章

  1. 零基础Python入门学习,阅读完这篇文章就够了
  2. Redis 集群配置教程
  3. 儒家思想和道家思想的三个主要差异
  4. 【状语从句练习题】主将从现原则
  5. 转 Nmon 监控生成数据文件字段的介绍
  6. 政务数字化转型之探索
  7. vue项目中鼠标悬浮图片实现hover效果切换图片-案例
  8. 零基础小白要知道的次世代游戏建模这10问,不然如何轻松征服游戏公司主美?
  9. 计算机英语中级职称题库,中级职称计算机试题练习
  10. 水晶报表公式必读(水晶报表公式使用)