簡體   English   中英

自己的數據集在訓練時與 Sklearn SVM 一起使用,但在預測時不使用

[英]Own dataset works with Sklearn SVM at training but not on prediction

我是 sklearn 的新手,我嘗試按照我在網上找到的示例在我的圖像上應用 SVM 分類器。 我通過制作一個類似的 Bunch 字典,用我自己的替換了來自 sklearn 的自定義數據集。 fit 方法有效,但預測無效(最后一行代碼print(clf.predict(dataset_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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM