ValueError: could not convert string to float: 'label'
时间: 2023-10-18 07:29:49 浏览: 161
ValueError: Could not find a format to read the specified file in mode ‘i’
这个错误提示是因为在你的数据集中第一列是标签(label),它是字符串类型,而SVM模型只能处理数值型数据。因此,在分出特征属性和类别时需要将标签列排除掉。
可以尝试使用以下代码修改:
```
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=',', skiprows=1)
# 载入测试数据
testData = np.loadtxt('digits_testing.csv', delimiter=',', skiprows=1)
# 分出特征属性和类别
NTrain = trainData.shape[1]
xTrain = trainData[:, 0:NTrain-1]
yTrain = trainData[:, NTrain-1]
NTest = testData.shape[1]
xTest = testData[:, 0:NTest-1]
yTest = testData[:, NTest-1]
# 标准化函数
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))
```
其中,`skiprows=1`参数用于跳过第一行,即标签行。同时,`NTrain-1`和`NTest-1`用于排除标签列。
阅读全文