Я работаю над классификацией изображений с использованием классификатора SVM. Тем не менее, после выполнения кодов, оценка F1, точность и отзыв все равны 1. Я понятия не имею, как это могло произойти.
Папка, например, является Image_MRI, которая содержит две подпапки с именами AD_images_MRI
(1120 изображений) и CN_images_MRI
(552 изображения).
Имя файла в AD_images_MRI
, например, 0341_AD_axial_001_MRI.jpg
, 0341_AD_axial_002_MRI.jpg
Имя файла в CN_images_MRI
, например, 0983_CN_axial_001_MRI.jpg
, 0985_CN_axial_002_MRI.jpg
import os,sys,glob
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
from sklearn import svm, metrics, datasets
from sklearn.utils import Bunch
from sklearn.model_selection import GridSearchCV, train_test_split
from skimage.io import imread
from skimage.transform import resize
def load_image_files(container_path, dimension=(64, 64)):
image_dir = Path(container_path)
folders = [directory for directory in image_dir.iterdir() if directory.is_dir()]
categories = [fo.name for fo in folders]
descr = "A image classification dataset"
images = []
flat_data = []
target = []
for i, direc in enumerate(folders):
for file in direc.iterdir():
img = imread(file)
img_resized = resize(img, dimension, anti_aliasing=True, mode='reflect')
flat_data.append(img_resized.flatten())
images.append(img_resized)
target.append(i)
flat_data = np.array(flat_data)
target = np.array(target)
images = np.array(images)
return Bunch(data=flat_data,
target=target,
target_names=categories,
images=images,
DESCR=descr)
image_dataset = load_image_files("Image_MRI/")
X_train, X_test, y_train, y_test = train_test_split(
image_dataset.data, image_dataset.target, test_size=0.3,random_state=109)
param_grid = [{'C': [1, 10, 100, 1000], 'kernel': ['linear']}]
svc = svm.SVC()
clf = GridSearchCV(svc, param_grid)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print("Classification report for - \n{}:\n{}\n".format(
clf, metrics.classification_report(y_test, y_pred)))
Classification report for -
GridSearchCV(cv='warn', error_score='raise-deprecating',
estimator=SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma='auto_deprecated',
kernel='rbf', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False),
fit_params=None, iid='warn', n_jobs=None,
param_grid=[{'C': [1, 10, 100, 1000], 'kernel': ['linear']}],
pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',
scoring=None, verbose=0):
precision recall f1-score support
0 1.00 1.00 1.00 161
1 1.00 1.00 1.00 341
micro avg 1.00 1.00 1.00 502
macro avg 1.00 1.00 1.00 502
weighted avg 1.00 1.00 1.00 502
Я хотел бы знать, почему все эти результаты равны 1,00. Я думаю, должно быть что-то не так, но я понятия не имею. Спасибо !!!