Python 自有数据集在训练时与Sklearn SVM配合使用,但在预测时不起作用
我是sklearn的新手,我尝试在我的图像上应用SVM分类器,下面是我在网上找到的一个例子。我用自己的数据集替换了sklearn中的自定义数据集,制作了一个类似的Bunch字典。拟合方法起作用,但预测不起作用(最后一行代码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
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))
成功了!谢谢,洗液起作用了!谢谢