R7-2 支持向量机分类:圆周数据集实践

本实践使用 sklearn 的支持向量机算法,对自行创建的圆周数据集进行分类。数据集由多个类别组成,每个类别对应一个圆周上的点,类别之间数据交替出现。

数据集生成:

  • 每类数据都是某一个圆周上的点,每类有 10 个样本。
  • 不同类别的数据交替出现,比如第一类数据第一个点,第二类数据第一个点,最后一类数据第一个点,然后第一类数据第二个点,第二类数据第二个点。。。直到最后一类数据第十个点。
  • 第 c 类数据都在半径为 3c 的圆上,类别编号为类别数字 - 1(1 到 10 类,对应 0 到 9)。
  • 横纵坐标中,cos, sin 的弧度为所在类别中的序号的 3 倍。
  • 比如类别为 2 的数据中,第 4 个点,横坐标是 3 * 2 * cos(4 * 3),纵坐标 3 * 2 * sin(4 * 3),类别编号为 2 - 1 = 1;类别为 4 的数据中,第 5 个点,横坐标是 3 * 4 * cos(5 * 3),纵坐标 3 * 4 * sin(5 * 3),类别编号为 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

# 获取用户输入的数据类别个数
num_classes = int(input())

# 生成数据集
X = []
Y = []
for c in range(1, num_classes + 1):
    for i in range(1, 11):
        x = 3 * c * np.cos(i * 3)
        y = 3 * c * np.sin(i * 3)
        X.append([x, y])
        Y.append(c - 1)

# 将数据集分成训练集和测试集
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_accu = model.score(X_train, Y_train)
print('accu of model for train set is {:.2f}'.format(train_accu))
test_accu = model.score(X_test, Y_test)
print('accu of model for test set is {:.2f}'.format(test_accu))
R7-2 支持向量机分类:圆周数据集实践

原文地址: https://www.cveoy.top/t/topic/mX0I 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录