R7-2 支持向量机分类:圆周数据集的训练与测试
R7-2 支持向量机分类:圆周数据集的训练与测试
作者: 赵继宁
单位: 成都信息工程大学
数据集生成:
- 自行产生多个类别的数据集,每类都是某一个圆周上的点,每类有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。
代码实现:
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
import numpy as np
import math
def generate_data(num_classes):
X = []
y = []
for i in range(num_classes):
for j in range(10):
radius = 3 * (i + 1)
angle = (j + 1) * 3
x = radius * math.cos(angle)
y = radius * math.sin(angle)
X.append([x, y])
y.append(i)
return np.array(X), np.array(y)
# 输入数据类别的个数
num_classes = int(input('输入数据类别的个数,例如:2
'))
# 生成数据集
X, y = generate_data(num_classes)
# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=1)
# 创建SVM模型
model = SVC(kernel='rbf', gamma=20, decision_function_shape='ovo')
# 训练模型
model.fit(X_train, y_train)
# 评估模型
train_acc = accuracy_score(y_train, model.predict(X_train))
print(f'accu of model for train set is {train_acc:.2f}')
test_acc = accuracy_score(y_test, model.predict(X_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/mX08 著作权归作者所有。请勿转载和采集!