SVM处理月亮、鸢尾花数据集
初步了解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处理月亮、鸢尾花数据集相关推荐
- 各种机器学习方法实现多分类(KNN,Logistics,Decision tree,byeis,SVM)以鸢尾花数据集为例
之前做的关于分类问题大都是基于CNN实现图像分类如手写体识别-CNN实现minst识别,已有的参考也是比较多,还整理过一个关于PIMA糖尿病人数据集的分类,该问题属于对于数据的二分类问题,根据数据判断 ...
- 鸢尾花数据集、月亮数据集二分类可视化分析
鸢尾花数据集.月亮数据集二分类可视化分析 目录 鸢尾花数据集.月亮数据集二分类可视化分析 一.线性LDA算法 1.LDA算法 2.鸢尾花数据集 2.月亮数据集 二.K-Means算法 1.K-Mean ...
- Python实现鸢尾花数据集分类问题——基于skearn的SVM(有详细注释的)
Python实现鸢尾花数据集分类问题--基于skearn的SVM 代码如下: 1 # !/usr/bin/env python2 # encoding: utf-83 __author__ = 'Xi ...
- python决策树分类 导入数据集_BPNN、决策树、KNN、SVM分类鸢尾花数据集Python实现...
数据集处理 数据获取 使用sklearn的dataset获取数据 from sklearn import datasets from sklearn.model_selection import tr ...
- 『自己的工作3』梯度下降实现SVM多分类+最详细的数学推导+Python实战(鸢尾花数据集)
梯度下降实现SVM多分类+最详细的数学推导+Python实战(鸢尾花数据集)! 文章目录 一. SVM梯度公式详细推导 1.1. SVM多分类模型 1.2. SVM多分类梯度公式推导 1.3. SVM ...
- 实验二:用python实现SVM支持向量机并对鸢尾花数据集分类
实验二:SVM支持向量机 1. 实验内容: (1)用你熟知的语言(尽量使用python)实现支持向量机的算法,并在给定的数据集上训练. (2)在测试集上用训练好的支持向量机进行测试,并将预测结果以cs ...
- ML之mlxtend:基于iris鸢尾花数据集利用逻辑回归LoR/随机森林RF/支持向量机SVM/集成学习算法结合mlxtend库实现模型可解释性(决策边界可视化)
ML之mlxtend:基于iris鸢尾花数据集利用逻辑回归LoR/随机森林RF/支持向量机SVM/集成学习算法结合mlxtend库实现模型可解释性(决策边界可视化) 目录 相关文章 ML之mlxten ...
- 支持向量机实现鸢尾花数据集分类matlab
问题描述: 在进行感知机,以及逻辑斯蒂回归问题的讨论中,我们都以二分类问题为例.其中对于线性不可分的数据集,感知机和逻辑斯蒂回归已然失效,逻辑斯蒂回归对感知机进行的优化,是进行了一种思维上的" ...
- SVM训练莺尾花数据集
SVM训练莺尾花数据集 代码在莺尾花数据集上训练SVM,数据集由莺尾花的测量值及其相应的物种标签组成.该模型使用70%数据用于训练,然后剩余部分进行测试.其中′fit′'fit'′fit′方法在训练集 ...
最新文章
- 端口号被占用怎么解决
- c#中volatile关键字的作用
- Eclipse中异常断点问题
- CentOS上如何把Web服务器从Apache换到nginx
- 2022-01-12
- Cisco 3550-EMI 交 换 机 配 置 教 程
- Java开发工具可以促进编程!
- Learning Multiview 3D point Cloud Registration论文阅读笔记
- python控制流代码怎么用_Python-11:Python语法基础-控制流
- Kubernetes Node Controller源码分析之配置篇
- 人工智能感知技术是机器人应用支撑技术之一
- openstack实例启动失败_Nokia NESC,这是世界上最大的OpenStack私有云之一
- Office 2010 文件验证
- plsql 查看表结构所有的字段_plsql导出所有表的数据
- java 获取本机地址_java如何获取本机IP地址
- Python入门基础(8)--私有化属性和方法/Property属性/_new_方法/单例模式/错误和异常处理/Python动态添加属性和方法/_slots_属性
- Windows下Netron安装
- 如何在ionic官网打包自己的App
- CCF优秀博士学位论文奖初评名单出炉!清华入选4人,数量第一
- 如何在iOS上创建矢量图形