R7-2 支持向量机分类:多类别圆形数据集

任务描述 自行产生多个类别的数据集,每类都是某一个圆周上的点,每类有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。

代码实现

from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
import numpy as np

# 获取类别数量
num_classes = int(input('请输入数据类别的个数:'))

# 生成数据
X = []
Y = []
for i in range(num_classes):
    for j in range(10):
        X.append([3 * (i + 1) * np.cos((j + 1) * 3), 3 * (i + 1) * np.sin((j + 1) * 3)])
        Y.append(i)

# 将数据转换为numpy数组
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}')

输入样例 2

输出样例 accu of model for train set is 0.70 accu of model for test set is 0.30

注意: 以上代码仅供参考,实际效果可能因数据分布和参数设置而有所不同。您需要根据实际情况进行调整和优化。

总结 本例使用支持向量机对自行生成的多个圆形数据集进行分类,并展示了训练集和测试集的精度。您可以根据需要修改代码,尝试不同的参数设置,并进行更深入的分析和研究。


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

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