我的分类器对所有测试数据集的准确率为 1.0(错误的照片除外)
My classifier gives 1.0 accuracy on ALL test data set (except wrong photos)
有:
- 数据集:115张256x256大小的彩色图片,所有照片属于一张class(卡通人)。
- 分类器:KNN 和随机森林分类器。
评论:我想制作一个 classifier 来 预测某张照片上的一个 卡通人物,所以我收集了一个数据集,将其数字化并放入在 classifier 的 fit 方法中。所以起初,我选择了 SGDClassifier
,但它只适用于数据集中的 2 个和更多 classes。于是选择了KNN和Random Forest Classifier
问题: 当我尝试测试我准备好的 classifiers 时,我在 上得到了 1.0 分 ]每张照片(我测试了 1 个物体、1 个另一个物体(另一个卡通人物)和一张黑屏照片),无论如何它们都有 1.0 分。
有人可以帮我吗? :( 我已经被困在这 2 天了,看不到自己解决问题的方法,我看了很多解决方案,但 none 对我有用。
数据集:
- 我的数据集 numpy 数组的形状是 (115, 196608) 并且(例如)我的数据集 numpy 数组中的一个图像看起来是这样的:
- 数据集是一个二维数组,因为classifiers 只需要一维或二维数组。
代码:未满,举个例子
train_data_values = numpy.array([*115 photos*])
train_data_labels = numpy.array([*115 labels*])
# For fact, all my labels equal "1", there is no other value.
# Trying KNN
from sklearn.neighbors import KNeighborsClassifier
KNN_clf = KNeighborsClassifier(**{'n_neighbors': 16, 'weights': 'distance'})
KNN_clf.fit(train_data_values, train_data_labels)
test_im = cv2.imread(DATASET_IMAGES_DIRECTORY + "\test\" + "test2.png")
KNN_clf.predict_proba(test_im.reshape(1, 3*256*256)) # Returns array([[1.]])
# Trying Random Forest Classifier
from sklearn.ensemble import RandomForestClassifier
RF_clf = RandomForestClassifier()
RF_clf.fit(train_data_values, train_data_labels)
test_im = cv2.imread(DATASET_IMAGES_DIRECTORY + "\test\" + "test.png")
RF_clf.predict_proba(test_im.reshape(1, 3*256*256)) # Returns array([[1.]])
评论:我查看了我的 numpy 数据集中的图像,因为我认为它们可能无法数字化,但不,它们可以很容易地从数组构建到图像。
P.S。 KNN classifier 的参数是随机的,因为我一直在尝试网格搜索以寻找最佳参数,但到处都是 1.0 分。
所有 classifiers 从他们的训练数据中学习他们的分数。大多数 classifier(包括随机森林和 KNN)的分数具有概率意义:它们被调整以尽可能反映训练数据的概率分布。
因此,如果您的训练数据由 100% 的单个 class 组成,那么 classifier 将以 100% 的概率了解到任何样本都属于这个 class,并且将以绝对的信心预测这个class。
教训:要使用any classifier,至少需要两个class,否则,预测或多或少会失去意义.我的建议是加入负样本,也就是没有你目标人物的样本,包括:
- 你和其他卡通人物的图像
- 只有背景没有人物的图像
- 带有一些非动画对象的图像
有一些例外,例如 OneClassSVM,它们(推测)能够在单个 class 上训练产生有意义的分数。但它们是否能充分处理您的数据,您永远不会知道,除非您使用来自多个不同 classes 的数据对其进行测试。
有:
- 数据集:115张256x256大小的彩色图片,所有照片属于一张class(卡通人)。
- 分类器:KNN 和随机森林分类器。
评论:我想制作一个 classifier 来 预测某张照片上的一个 卡通人物,所以我收集了一个数据集,将其数字化并放入在 classifier 的 fit 方法中。所以起初,我选择了 SGDClassifier
,但它只适用于数据集中的 2 个和更多 classes。于是选择了KNN和Random Forest Classifier
问题: 当我尝试测试我准备好的 classifiers 时,我在 上得到了 1.0 分 ]每张照片(我测试了 1 个物体、1 个另一个物体(另一个卡通人物)和一张黑屏照片),无论如何它们都有 1.0 分。
有人可以帮我吗? :( 我已经被困在这 2 天了,看不到自己解决问题的方法,我看了很多解决方案,但 none 对我有用。
数据集:
- 我的数据集 numpy 数组的形状是 (115, 196608) 并且(例如)我的数据集 numpy 数组中的一个图像看起来是这样的:
- 数据集是一个二维数组,因为classifiers 只需要一维或二维数组。
代码:未满,举个例子
train_data_values = numpy.array([*115 photos*])
train_data_labels = numpy.array([*115 labels*])
# For fact, all my labels equal "1", there is no other value.
# Trying KNN
from sklearn.neighbors import KNeighborsClassifier
KNN_clf = KNeighborsClassifier(**{'n_neighbors': 16, 'weights': 'distance'})
KNN_clf.fit(train_data_values, train_data_labels)
test_im = cv2.imread(DATASET_IMAGES_DIRECTORY + "\test\" + "test2.png")
KNN_clf.predict_proba(test_im.reshape(1, 3*256*256)) # Returns array([[1.]])
# Trying Random Forest Classifier
from sklearn.ensemble import RandomForestClassifier
RF_clf = RandomForestClassifier()
RF_clf.fit(train_data_values, train_data_labels)
test_im = cv2.imread(DATASET_IMAGES_DIRECTORY + "\test\" + "test.png")
RF_clf.predict_proba(test_im.reshape(1, 3*256*256)) # Returns array([[1.]])
评论:我查看了我的 numpy 数据集中的图像,因为我认为它们可能无法数字化,但不,它们可以很容易地从数组构建到图像。
P.S。 KNN classifier 的参数是随机的,因为我一直在尝试网格搜索以寻找最佳参数,但到处都是 1.0 分。
所有 classifiers 从他们的训练数据中学习他们的分数。大多数 classifier(包括随机森林和 KNN)的分数具有概率意义:它们被调整以尽可能反映训练数据的概率分布。
因此,如果您的训练数据由 100% 的单个 class 组成,那么 classifier 将以 100% 的概率了解到任何样本都属于这个 class,并且将以绝对的信心预测这个class。
教训:要使用any classifier,至少需要两个class,否则,预测或多或少会失去意义.我的建议是加入负样本,也就是没有你目标人物的样本,包括:
- 你和其他卡通人物的图像
- 只有背景没有人物的图像
- 带有一些非动画对象的图像
有一些例外,例如 OneClassSVM,它们(推测)能够在单个 class 上训练产生有意义的分数。但它们是否能充分处理您的数据,您永远不会知道,除非您使用来自多个不同 classes 的数据对其进行测试。