使用SVM对手写体数字图片分类 实验目的: 会用Python创建多分类SVM模型; 使用多分类SVM模型对手写体数字图片分类; 会对分类结果进行评价。 实验内容: 使用sklearn.svm类对手写体数字图片进行分类 训练数据:digits_training.csv 测试数据:digits_testing.csv 第1列是类别,其他列是特征属性。 先对1类和2类的数据进行计算,得到1类和2类的分割超平面,然后对2类和3类的数据进行计算,以此类推,直到两两类别分别完成计算。 在用模型做预测时,对两两类别之间的分割超平面分别进行匹配,统计有多少次判别将其华分类1类,多少次判别为2类…,判定所属类别次数最多的就是最后预测的类别。 载入训练数据、分出特征属性和类别,对特征属性标准化,显示读入数据的行数 xTrain = trainData[:,1:NTrain] yTrain = trainData[:,0] 标准化函数 def normalizeData(X): return (X - X.mean())/X.max() 训练多分类SVM模型 model = svm.SVC(decision_function_shape='ovo') 保存训练模型名字为“svm_classifier_model1.m” 载入测试数据,分出特征属性和类别,对特征属性标准化,显示读入数据的行数 使用模型对测试集进行预测,显示预测错误数据的数目、预测数据的准确率和模型内建正确率 具体代码
时间: 2024-03-21 07:44:09 浏览: 152
好的,以下是使用SVM对手写体数字图片分类的Python代码:
```
import numpy as np
from sklearn import svm
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler
# 载入训练数据
trainData = np.loadtxt('digits_training.csv', delimiter=',')
# 载入测试数据
testData = np.loadtxt('digits_testing.csv', delimiter=',')
# 分出特征属性和类别
NTrain = trainData.shape[1]
xTrain = trainData[:, 1:NTrain]
yTrain = trainData[:, 0]
NTest = testData.shape[1]
xTest = testData[:, 1:NTest]
yTest = testData[:, 0]
# 标准化函数
scaler = StandardScaler()
xTrain = scaler.fit_transform(xTrain)
xTest = scaler.transform(xTest)
# 训练多分类SVM模型
model = svm.SVC(decision_function_shape='ovo')
model.fit(xTrain, yTrain)
# 保存训练模型
from joblib import dump
dump(model, 'svm_classifier_model1.joblib')
# 使用模型对测试集进行预测
yPred = model.predict(xTest)
# 显示预测错误数据的数目、预测数据的准确率和模型内建正确率
accuracy = accuracy_score(yTest, yPred)
print('预测错误数据的数目:', (yTest != yPred).sum())
print('预测数据的准确率:', accuracy)
print('模型内建正确率:', model.score(xTest, yTest))
```
需要注意的是,以上代码需要先安装Scikit-learn和joblib库。其中,joblib库用于保存SVM模型。
阅读全文