Я сделал одноклассный SVM в python, чтобы сказать мне, является ли изображение в тестовом наборе кошкой или нет. Я не мог найти много на одном классе SVM, поэтому я импровизировал и вышел с кодом ниже. Мои результаты показывают смесь 1 и -1, однако большинство данных в моем наборе тестов относятся к кошкам. Любая помощь в улучшении модели будет принята с благодарностью.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import OneClassSVM
import sklearn.preprocessing as skp
#Directories
train_dir='Train\cats'
test_dir='Test\cats'
XTrain = []
XTest = []
from keras.preprocessing import image
from keras.preprocessing.image import img_to_array
for img in os.listdir(train_dir):
if img != 'Thumbs.db':
img = os.path.join(train_dir, img)
img = image.load_img(img, target_size=(28,28))
img = img_to_array(img)
img = np.expand_dims(img, axis=0)
img = img/255
XTrain.append(img)
XTrain = np.vstack(XTrain)
for img in os.listdir(test_dir):
if img != 'Thumbs.db':
img = os.path.join(test_dir, img)
img = image.load_img(img, target_size=(28,28))
img = img_to_array(img)
img = np.expand_dims(img, axis=0)
img = img/255
XTest.append(img)
XTest = np.vstack(XTest)
nsamples, nx, ny, nz = XTrain.shape
XTrain = XTrain.reshape(nsamples, nx*ny*nz)
nsamples, nx, ny, nz = XTest.shape
XTest = XTest.reshape(nsamples, nx*ny*nz)
clf = OneClassSVM(nu=0.1, kernel="rbf", gamma='auto').fit(XTrain)
y_pred = clf.predict(XTest)
print(y_pred)
clf.score_samples(XTest)