Python 自有数据集在训练时与Sklearn SVM配合使用,但在预测时不起作用

Python 自有数据集在训练时与Sklearn SVM配合使用,但在预测时不起作用,python,pandas,numpy,scikit-learn,Python,Pandas,Numpy,Scikit Learn,我是sklearn的新手,我尝试在我的图像上应用SVM分类器,下面是我在网上找到的一个例子。我用自己的数据集替换了sklearn中的自定义数据集,制作了一个类似的Bunch字典。拟合方法起作用,但预测不起作用(最后一行代码print(clf.predict(dataset\u images.data[-5]))给出了以下错误) 完整代码 import pandas as pd from sklearn import datasets import numpy as np from sklear

我是sklearn的新手,我尝试在我的图像上应用SVM分类器,下面是我在网上找到的一个例子。我用自己的数据集替换了sklearn中的自定义数据集,制作了一个类似的Bunch字典。拟合方法起作用,但预测不起作用(最后一行代码
print(clf.predict(dataset\u images.data[-5]))
给出了以下错误)

完整代码

import pandas as pd
from sklearn import datasets
import numpy as np
from sklearn import svm
from sklearn.utils import Bunch
import cv2


DATABASE_PATH = "C://Users//Maria//Downloads//ees//CASIA-IrisV2"
csv_file = "generate_csv//generate_csv_correctly_detected.csv"

images_names = pd.read_csv(csv_file)


def getImagesAndLabels():
    df = pd.read_csv(csv_file)
    dataset_images = {"data": [], "target": []}
    for index in range(len(df)):
        img_path = DATABASE_PATH + "//" + images_names.iloc[index, 0]
        img = cv2.imread(img_path)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        img = [list(part) for part in img]
        flatten = lambda img: [item for sublist in img for item in sublist]
        img = flatten(img)
        dataset_images["data"].append(img)
        dataset_images["target"].append(np.array(images_names.iloc[index, 1]))
    dataset_images["data"] = np.array(dataset_images["data"])
    dataset_images["target"] = np.array(dataset_images["target"])
    dataset = Bunch(data = dataset_images["data"], target = dataset_images["target"])
    return dataset

dataset_images = getImagesAndLabels()

digits = datasets.load_digits()
print(digits.data[:10])
print(digits.target[:10])
print("urm:")
print(dataset_images.data[:10])
print(dataset_images.target[:10])

clf = svm.SVC()

X, y = dataset_images.data[:-10], dataset_images.target[:-10]

clf.fit(X, y)

print(clf.predict(dataset_images.data[-5]))

predict
调用需要一个2d数组,因为这就是传递训练数据的方式。要对单个样本执行预测,可以将
predict
调用更改为:

clf.predict(dataset_images.data[-5].reshape(1,-1))

predict
调用需要一个2d数组,因为这就是传递训练数据的方式。要对单个样本执行预测,可以将
predict
调用更改为:

clf.predict(dataset_images.data[-5].reshape(1,-1))

成功了!谢谢,洗液起作用了!谢谢