R7-2 支持向量机分类:生成圆形数据集并评估模型精度
R7-2 支持向量机分类:生成圆形数据集并评估模型精度
本示例演示如何生成多个圆形数据类别,每个类别包含10个样本点,并使用sklearn库的SVM模型进行分类。
1. 数据集生成
- 类别数量: 用户输入数据类别数量,例如 2。
- 数据分布: 第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。
- 数据排序: 不同类别的数据交替出现,例如:
- 第一类数据第一个点,第二类数据第一个点,最后一类数据第一个点,然后第一类数据第二个点,第二类数据第二个点...直到最后一类数据第十个点。
2. 数据集划分
- 使用
train_test_split函数将数据集划分为训练集和测试集,训练数据集比例为 0.5,random_state = 1。
3. SVM模型训练和评估
- 使用
sklearn的支持向量机,核函数为 'rbf',gamma系数为 20,decision_function_shape 策略为 'ovo' 对训练集进行拟合。 - 使用
score()函数分别计算训练集和测试集的精度,并以两位小数的形式显示。
输入样例:
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 = 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)
# 训练SVM模型
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))
原文地址: https://www.cveoy.top/t/topic/mX0W 著作权归作者所有。请勿转载和采集!