R7-2 支持向量机分类:基于圆周数据的分类实验
R7-2 支持向量机分类:基于圆周数据的分类实验
本实验使用sklearn库中的支持向量机模型对自行生成的多类别圆周数据集进行分类。数据集中每个类别对应一个圆周上的点,不同类别数据交替出现。实验使用'rbf'核函数,gamma系数为20,并使用'ovo'策略进行分类。最后比较模型在训练集和测试集上的精度。
数据集生成:
- 自行产生多个类别的数据集,每类都是某一个圆周上的点,每类有10个样本。
- 不同类别的数据交替出现,比如第一类数据第一个点,第二类数据第一个点,最后一类数据第一个点,然后第一类数据第二个点,第二类数据第二个点。。。直到最后一类数据第十个点。
- 第c类数据都在半径为3c的圆上,类别编号为类别数字-1(1到10类,对应0到9)。
- 横纵坐标中,cos, sin的弧度为所在类别中的序号的3倍。
- 比如类别为2的数据中,第4个点,横坐标是32cos(43),纵坐标32sin(43),类别编号为2-1=1;类别为4的数据中,第5个点,横坐标是34cos(53),纵坐标34sin(53),类别编号为4-1=3。
模型训练和测试:
- 使用train_test_split用来分隔训练集和测试集,训练数据集比例0.5, random_state = 1。
- 使用sklearn的支持向量机,核函数 'rbf', gamma系数 20, decision_function_shape 策略 'ovo' 对训练集拟合。
- 后测试训练集和测试集的精度。精度使用score(),显示2位小数。
输入样例:
在代码中输入数据类别的个数,例如:
2
输出样例:
accu of model for train set is 0.70
accu of model for test set is 0.30
代码如下:
# 导入必要的库
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 输入数据类别的个数
num_classes = int(input())
# 生成数据集
X = []
Y = []
for i in range(num_classes):
for j in range(10):
angle = (j + 1) * 3
x = 3 * (i + 1) * np.cos(angle)
y = 3 * (i + 1) * np.sin(angle)
X.append([x, y])
Y.append(i)
X = np.array(X)
Y = np.array(Y)
# 分割训练集和测试集
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.5, random_state=1)
# 构建支持向量机模型
model = SVC(kernel='rbf', gamma=20, decision_function_shape='ovo')
# 训练模型
model.fit(X_train, Y_train)
# 测试训练集精度
train_acc = model.score(X_train, Y_train)
print(f'accu of model for train set is {train_acc:.2f}')
# 测试测试集精度
test_acc = model.score(X_test, Y_test)
print(f'accu of model for test set is {test_acc:.2f}')
原文地址: https://www.cveoy.top/t/topic/mX0r 著作权归作者所有。请勿转载和采集!