无涯教程-分类算法 - Python实现函数

news/2024/10/21 10:06:56/

为了在Python中实现SVM,无涯教程将从标准库导入开始,如下所示-

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
import seaborn as sns; sns.set()

接下来,从sklearn.dataset.sample_generator创建具有线性可分离数据的样本数据集,以使用SVM进行分类-

from sklearn.datasets.samples_generator import make_blobs
X, y=make_blobs(n_samples=100, centers=2, random_state=0, cluster_std=0.50)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=summer);

以下是生成具有100个样本和2个聚类的样本数据集后的输出-

Implementing SVM In Python

知道SVM支持判别分类。它通过在二维的情况下简单地找到一条线,在多维的情况下通过歧管来简单地将类彼此划分。它在上述数据集上实现如下-

xfit = np.linspace(-1, 3.5)
plt.scatter(X[:, 0], X[:, 1], c = y, s = 50, cmap = summer)
plt.plot([0.6], [2.1], x, color = black, markeredgewidth = 4, markersize = 12)
for m, b in [(1, 0.65), (0.5, 1.6), (-0.2, 2.9)]:
plt.plot(xfit, m * xfit + b, -k)
plt.xlim(-1, 3.5);

输出如下-

Output

从上面的输出中可以看到,有三种不同的分隔符可以完美地区分以上示例。

正如讨论的那样,SVM的主要目标是将数据集划分为类,以找到最大的边际超平面(MMH),而不是在类之间绘制零线,可以在每条线周围画出一定宽度的边界,直到最近的点。它可以做到如下-

xfit = np.linspace(-1, 3.5)
plt.scatter(X[:, 0], X[:, 1], c = y, s = 50, cmap = summer)for m, b, d in [(1, 0.65, 0.33), (0.5, 1.6, 0.55), (-0.2, 2.9, 0.2)]:yfit = m * xfit + bplt.plot(xfit, yfit, -k)plt.fill_between(xfit, yfit - d, yfit + d, edgecolor=none,color = #AAAAAA, alpha = 0.4)
plt.xlim(-1, 3.5);
Maximum Marginal Hyperplane

从上面的输出图像中,无涯教程可以轻松地观察到判别式分类器中的"边距", SVM将选择使边距最大化的线。

接下来,将使用Scikit-Learn的支持向量分类器在此数据上训练SVM模型。在这里,使用线性内核来拟合SVM,如下所示:

from sklearn.svm import SVC # "Support vector classifier"
model = SVC(kernel = linear, C = 1E10)
model.fit(X, y)

输出如下-

SVC(C=10000000000.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape=ovr, degree=3, gamma=auto_deprecated,
kernel=linear, max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False)

现在,为了更好地理解,以下内容将绘制2D SVC的决策函数-

def decision_function(model, ax = None, plot_support = True):if ax is None:ax = plt.gca()xlim = ax.get_xlim()ylim = ax.get_ylim()

为了判断模型,需要创建网格,如下所示:

x = np.linspace(xlim[0], xlim[1], 30)
y = np.linspace(ylim[0], ylim[1], 30)
Y, X = np.meshgrid(y, x)
xy = np.vstack([X.ravel(), Y.ravel()]).T
P = model.decision_function(xy).reshape(X.shape)

接下来,需要绘制决策边界和边际,如下所示:

ax.contour(X, Y, P, colors=k, levels=[-1, 0, 1], alpha=0.5, linestyles=[--, -, --])

现在,类似地绘制支持向量,如下所示:

if plot_support:ax.scatter(model.support_vectors_[:, 0],model.support_vectors_[:, 1], s=300, linewidth=1, facecolors=none);
ax.set_xlim(xlim)
ax.set_ylim(ylim)

现在,使用此功能来拟合无涯教程的模型,如下所示:

plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=summer)
decision_function(model);
Implementing SVM Model

无涯教程可以从上面的输出中观察到SVM分类器适合数据的边距,即虚线和支持向量,该适合度的关键元素与虚线接触。这些支持向量点存储在分类器的 support_vectors _属性中,如下所示-

model.support_vectors_

输出如下-

array([[0.5323772 , 3.31338909], [2.11114739, 3.57660449], [1.46870582, 1.86947425]])

分类算法 中的 Python实现函数 - 无涯教程网无涯教程网提供为了在Python中实现SVM,无涯教程将从标准库导入开始,如下所示- import numpy as np...https://www.learnfk.com/python-machine-learning/machine-learning-with-python-implementing-svm-in-python.html


http://www.ppmy.cn/news/1068881.html

相关文章

浅析Linux 物理内存外碎片化

本文出现的内核代码来自Linux4.19,如果有兴趣,读者可以配合代码阅读本文。 一、Linux物理内存外碎片化概述 什么是Linux物理内存碎片化?Linux物理内存碎片化包括两种: 1.物理内存内碎片:指分配给用户的内存空间中未…

Js 判断数据类型

一般用 typeof, 而不是instanceof. 见: 详解JS中的instanceof使用及手写instanceof_js instanceof_天外飞雨道沧桑的博客-CSDN博客 javaScript 中如何检测一个变量是一个 String 类型?_js 判断是否是string_Jade琛的博客-CSDN博客

Django(8)-静态资源引用CSS和图片

除了服务端生成的 HTML 以外,网络应用通常需要一些额外的文件——比如图片,脚本和样式表——来帮助渲染网络页面。在 Django 中,我们把这些文件统称为“静态文件”。 我们使用static文件来存放静态资源,django会在每个 INSTALLED…

【C++】课后练习题 p121 9

习题 9.9 商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受9.8折优惠。 现已知当天3…

Java“牵手”1688商品跨境属性数据,1688API接口申请指南

1688平台商品详情跨境属性数据接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取1688商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片,重量,详情描述等详细信息 。 获取商品详情接口API是一种用于…

Golang Gorm 高级查询之where + find

插入测试数据 package mainimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm" )type Student struct {ID int64Name string gorm:"size:6"Age intEmail *string }func (*Student) TableName() string {return "student&q…

对java中的List进行深拷贝,并进行删除测试

List<String> list new ArrayList<>(); // 需要拷贝的原始List list.add("aaa"); list.add("bbb"); list.add("ccc"); List<String> listNew new ArrayList<>(); // 新List // 将原始List的值赋值给新List Co…

# 【三维重建】【深度学习】NeRF代码Pytorch实现--数据加载(中)

【三维重建】【深度学习】NeRF代码Pytorch实现–数据加载(中) 论文提出了一种5D的神经辐射场来作为复杂场景的隐式表示&#xff0c;称为NeRF&#xff0c;其输⼊稀疏的多⻆度带pose的图像训练得到⼀个神经辐射场模型。简单来说就是通过输入同一场景不同视角下的二维图片和相机位…