支持向量机——数据可视化

目录

一、引言

二、支持向量机的基本原理

三、数据可视化在SVM中的应用

四、以下是一个简单的二维数据集的可视化示例:

五、SVM的数据可视化绘图方法

1.sin正弦函数绘制

运行结果如图:

2.实例化默认值

3.图的布局

4.坐标轴

5.散点图

6.折线图


一、引言

在机器学习和数据科学的领域中,支持向量机(Support Vector Machine, SVM)是一种广泛使用的分类算法。其独特的原理和强大的性能使得SVM在诸多领域中都有出色的表现。然而,对于初学者而言,SVM的复杂性和抽象性往往让人难以捉摸。本文将通过数据可视化的方式,深入浅出地解析SVM的工作原理和应用,帮助读者更好地理解并掌握这一强大的分类工具。

二、支持向量机的基本原理

SVM的核心思想是通过找到一个决策超平面,将不同类别的数据分隔开来。这个决策超平面不仅要能将数据分开,还要使得数据点到超平面的距离最大化,即所谓的“最大间隔”。这样,SVM就能够对新的数据点进行准确的分类。

在二维空间中,这个决策超平面就是一条直线;在三维空间中,它是一个平面;而在更高维度的空间中,则是一个超平面。为了找到这个最优的超平面,SVM引入了“支持向量”的概念。支持向量是那些距离决策超平面最近的数据点,它们决定了超平面的位置和方向。

三、数据可视化在SVM中的应用

数据可视化是一种强大的工具,它可以帮助我们直观地理解SVM的工作原理。通过绘制数据点和决策超平面的图形,我们可以清晰地看到SVM是如何将数据分开的。

四、SVM的数据可视化绘图方法

1.sin正弦函数绘制

这里采用Matplotlib模块来对数据可视化,用pip install matplotlib 命令安装该模块,先绘制一个sin函数图形。

from pylab import * 
import numpy as np
X = np. Linspace(-np. pi, np. pi, 256,endpoint=True)
S = np. sin(X)
#产生绘图数据X,S,为x轴和y轴一一对应的数据
plot ( X,S)
#以默认的形式绘制数据,plot 第1个参数为x轴坐标数据,第2个参数为y轴坐标数据
show ( )

运行结果如图:

plot(X,S)为画图函数,X为x轴坐标数组,S为对应的y轴坐标数组,用默认的方法画出图形。

show()函数把前面用plot函数绘制的图像显示到屏幕上。

2.实例化默认值

(1)改变颜色和线宽

(2)设定限定

(3)设置坐标刻度和坐标标签

(4)移动脊柱

(5)注释要点和添加图例

3.图的布局

首先尝试一下图的布局。从以下代码就能明白 subplot 函数中3个参数的含义:(2,1,1)的意思是图的分布是2行1列,而本次绘制占用第一个位置

from pylab import * subplot (2,1,1)
#产生两行一列的子图,先设置第1个子图
xticks([]) , yticks([])
text (0. 5,0. 5, 'subplot (2,1,1)', ha='center', va='center', size = 24, alpha = . 5)
subplot ( 2,1,2)
#设置第2个子图
xticks []) , yticks [ ])
text (0. 5,0. 5, 'subplot (2,1,2)', ha='center', va='center', size = 24, alpha = . 5)
show ()

这里用subplot函数绘制参数子图,subplot(2,2,1)表示产生一个两行两列的4个子图,现在对第一个子图操作。

效果如图下:

text (0. 5,0. 5, 'subplot(2,1,1)', ha='center', va= 'center', size = 24, alpha =. 5), 函数是绘制文本,前2个参数为坐标,第3个参数为绘制的内容。

与此相似,以下代码是制作1行2列的图

from pylab import *
subplot (1,2,1)
#产生一行两列的子图,设置第1个子图,第1个参数为多少行,第2个参数为多少列,第3个为当前子图
xticks ([]) , yticks ( [])
text (0. 5,0. 5, 'subplot (1,2,1)',ha='center', va= 'center', size = 24, alpha =. 5)
subplot ( 1,2,2)
xticks ([]) , yticks ( [] )
text(0.5,0.5, subplot(1,2,2)',ha='center, va='center,size =24,alpha=.5)
show ()

运行结果图下

4.坐标轴

坐标轴和子图功能类似,不过它可以放在图像的任意位置。

from pylab import *
axes ( [0. 1,0. 1,8,.8])
xticks([]) , yticks([])
text (0. 6,0. 6, 'axes ( [0. 1,0. 1,08,8] )',
', ha='center', va= 'center', size = 20 , alpha
=.5)
axes ( [0. 2,0. 2,.3,.3])
xticks([]), yticks ([])
text (0. 5,0. 5,'axes ( [0. 2,0. 2,•3, 3] )',ha='center', va ='center', size = 16, alpha
=.5)
show ()

效果如下:

5.散点图

散点图是最常见数据分布图,可以用 scalter函数绘制,该函数需要引用 matplotio
库,与绘图函数的调用形式基本一致,参数x和y为轴和y轴的坐标向量,s和c为形状大小参数和颜色参数,alpha 表达透明度,若 alpha=1 则表示完全不透明。

import numpy as np
import matplotlib. pyplot as plt
import time
np. random. seed (int (time. time() ))
n = 128
X = np. random. normal (0,1,n)
Y = np. random. normal (0,1,n)
T = np. arctan2 (Y,X)
#产生绘制数据,T为颜色
plt. scatter (X, Y, s=75, c=T, alpha =. 5) plt. xlim (-1.5, 1. 5) , plt. xticks([])
plt. ylim (-1. 5,1.5) , plt. yticks ( [])
plt. show ()

散点图效果如图下:

plt. scatter(X, Y,s=75,c=T,alpha=.5),scatter 函数用于绘制点,X和Y为要绘制点的对应数列,s为形状大小,°为颜色列表,alphe 值在0到1之间,默认是 None。

6.折线图

折线图也是一种常用的绘图方法。下面的代码在第4行~第7行建立了6个随机的点坐标,其中x轴和y轴的坐标分别保存在名为x和y的 numpy 数组中,然后在第8行~第12行用5种不同的线型绘制了5条首尾相接的直线。Pplot函数的主要参数是x轴和y轴坐标向量和线型,线型的说明见本章小结。利用 plot 绘图时可以传入一个完整向量,plot 方法会自动逐点连接,第13行和第14 行利用子图演示了该方法。另外,代码中给出了两个子图的不同使用方法,这种对比演示了在绘图方法上,subplot 与pyplot 具有同样的绘图性能。

import numpy as np
import matplotlib.pyplot as plt
import time
np.random.seed(int(time.time()))
N = 6
x = np. random. rand ( N)
y = np. random. rand( N)
plt. subplot ( 1,2,1). plot (x[0:2] ,y[0:2], "b--") 
plt. subplot ( 1,2,1). plot (x[1:3] ,y[1:3], "go--")
plt. subplot (1,2,1). plot(x[2:4],y[2:4],”rー")
plt. subplot ( 1,2,1). plot (x[3:5] ,y[3:5],"cd-.")
plt. subplot ( 1,2,1). plot (x[4:6] ,y[4:6"m:")
plt_s2 = plt. subplot ( 1,2,2)
plt_s2. plot (x,y, "b-")
#在两个子图内各自绘画
plt.show()

代码运行结果如图:

plt. subplot(1,2,1).plot(x[ 0:2],y[0:2],"b--")表示在1行2列的子图里操作第1个子图,并绘制一条线,线的颜色和线型采用了简写的方式,“b--”表示蓝色虚线.

五、总结

本文通过数据可视化的方式,深入浅出地解析了SVM的工作原理和应用。通过绘制数据点和决策超平面的图形,我们可以直观地看到SVM是如何将数据分开的,并理解其背后的原理。同时,我们还探讨了SVM的优缺点及应用场景,希望能够帮助读者更好地掌握这一强大的分类工具。

本文的文章链接:写文章-CSDN创作中心

  • 32
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于R语言的自编码器(autoencoder)可视化图像的方法,可以通过以下步骤进行: 1. 导入必要的库和数据集,比如MNIST手写数字数据集。 ```R library(keras) library(ggplot2) library(gridExtra) mnist <- dataset_mnist() x_train <- mnist$train$x y_train <- mnist$train$y x_test <- mnist$test$x y_test <- mnist$test$y ``` 2. 对图像进行预处理,将像素值归一化到0-1之间。 ```R x_train <- x_train / 255 x_test <- x_test / 255 ``` 3. 构建自编码器模型,使用Keras库实现。 ```R input_img <- layer_input(shape = c(784)) encoded <- input_img %>% layer_dense(units = 128, activation = "relu") %>% layer_dense(units = 64, activation = "relu") %>% layer_dense(units = 32, activation = "relu") decoded <- encoded %>% layer_dense(units = 64, activation = "relu") %>% layer_dense(units = 128, activation = "relu") %>% layer_dense(units = 784, activation = "sigmoid") autoencoder <- keras_model(inputs = input_img, outputs = decoded) ``` 4. 训练自编码器模型,并使用测试集对其进行评估。 ```R autoencoder %>% compile(optimizer = 'adam', loss = 'binary_crossentropy') autoencoder %>% fit(x_train, x_train, epochs = 50, batch_size = 256, shuffle = TRUE, validation_data = list(x_test, x_test)) decoded_imgs <- predict(autoencoder, x_test) ``` 5. 可视化原始图像和重构图像,对比两者的差异。 ```R n <- 10 original <- x_test[1:n, ] reconstructed <- decoded_imgs[1:n, ] original_m <- matrix(original, ncol = 28, byrow = TRUE) reconstructed_m <- matrix(reconstructed, ncol = 28, byrow = TRUE) original_gg <- ggplot() + geom_raster(aes(x = 1:28, y = 1:28, fill = original_m)) + scale_fill_gradient(low = "white", high = "black") reconstructed_gg <- ggplot() + geom_raster(aes(x = 1:28, y = 1:28, fill = reconstructed_m)) + scale_fill_gradient(low = "white", high = "black") grid.arrange(original_gg, reconstructed_gg, ncol = 2) ``` 以下是支持向量机SVM)结果可视化的方法: 1. 导入必要的库和数据集,比如Iris鸢尾花数据集。 ```R library(e1071) library(ggplot2) iris <- datasets::iris() ``` 2. 对数据集进行预处理,将类别变量转化为数值变量,并将数据集分为训练集和测试集。 ```R iris$Species <- as.numeric(iris$Species) set.seed(123) train_index <- sample(1:nrow(iris), 100) train_data <- iris[train_index, ] test_data <- iris[-train_index, ] ``` 3. 构建SVM模型,并对其进行训练和测试。 ```R svm_model <- svm(Species ~ ., data = train_data, kernel = "linear", cost = 1) svm_pred <- predict(svm_model, test_data[-4]) svm_acc <- sum(svm_pred == test_data[, 5]) / nrow(test_data) * 100 ``` 4. 可视化SVM结果,使用ggplot2库绘制分类边界和数据点。 ```R svm_plot <- ggplot(train_data, aes(x = Sepal.Length, y = Petal.Length, color = factor(Species))) + geom_point(size = 3) + geom_smooth(method = "svm", formula = y ~ x, data = train_data, size = 1) + scale_color_discrete(name = "Species") + ggtitle(paste0("SVM Accuracy: ", svm_acc, "%")) svm_plot ``` 绘制的图像中,不同颜色的点表示不同类别的数据点,分类边界用实线表示。我们可以通过调整SVM模型的参数和选择不同的kernel,来获得更好的分类效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值