支持向量机的性别识别问题

劳尔

我最近一直在使用SVM在一个性别识别项目(python)中工作,但是我迷失了获得的结果:

为什么召回男性为0.09,女性为1?还是女性的精确度只有50%?

SVM Accuracy: 0.540041067762
Classification report:
           precision   recall  f1-score   support
Females       0.52      1.00      0.68       242
Males         1.00      0.09      0.16       245

avg / total       0.76      0.54      0.42       487

我将所有图像裁剪,对齐并呈灰度显示如何提高精度?

我需要更改以下参数:clf = svm.SVC()?

我的代码:

import os, sys
import numpy as np
import PIL.Image as Image
import cv2
from sklearn import svm
from sklearn.externals import joblib
from sklearn.cross_validation import train_test_split
from sklearn.metrics import classification_report
from sklearn.metrics import accuracy_score


def read_images(path, id, sz=None):
    c = id
    X,y = [], []
    for dirname, dirnames, filenames in os.walk(path):
        for subdirname in dirnames:
            subject_path = os.path.join(dirname, subdirname)
            for filename in os.listdir(subject_path):
                try:
                    im = Image.open(os.path.join(subject_path, filename))
                    im = im.convert("L")
                    # resize to given size (if given)
                    if (sz is not None):
                        im = im.resize(sz, Image.ANTIALIAS)
                    X.append(np.asarray(im, dtype=np.uint8).ravel())
                    y.append(c)
                except IOError as e:
                    print "I/O error({0}): {1}".format(e.errno, e.strerror)
                except:
                    print "Unexpected error:", sys.exc_info()[0]
                    raise
                        #c = c+1

    return [X,y]


def main():

    contador = 0;

    # check arguments
    if len(sys.argv) != 3:
        print "USAGE: example.py </path/to/images/males> </path/to/images/females>"
        sys.exit()

    # read images and put them into Vectors and id's
    [X,x] = read_images(sys.argv[1], 1)
    [Y, y] = read_images(sys.argv[2], -1)

    # R all images and r all id's
    [R, r] = [X+Y, x+y]
    R_train, R_test, r_train, r_test = train_test_split(R, r)

    # Default svm
    clf = svm.SVC()   

    clf.fit(R_train, r_train)

    r_pred = clf.predict(R_test)

    target_names = ['Female', 'Male']
    print "SVM Accuracy:", accuracy_score(r_test, r_pred)
    print "Classification report:\n", classification_report(r_test, r_pred, target_names=target_names) 




if __name__ == '__main__':
    main()

我将非常感谢您如何使用SVM进行性别识别方面的帮助,感谢您的阅读

好的,现在使用归一化的数据(介于0和1之间),我尝试使用GridSearchCV来使用以下方法调整C和Gamma:

    param_grid = [
  {'C': [1, 10, 100, 1000], 'kernel': ['linear']},
  {'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']},
 ]
svr = svm.SVC()
clf = grid_search.GridSearchCV(svr, param_grid)

一段时间后,我得到这个结果:

{'n_jobs': 1, 'verbose': 0, 'estimator__gamma': 0.0, 'estimator__probability': False, 'param_grid': [{'kernel': ['linear'], 'C': [1, 10, 100, 1000]}, {'kernel': ['rbf'], 'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001]}], 'cv': None, 'scoring': None, 'estimator__cache_size': 200, 'estimator__verbose': False, 'pre_dispatch': '2*n_jobs', 'estimator__kernel': 'rbf', 'fit_params': {}, 'estimator__max_iter': -1, 'refit': True, 'iid': True, 'estimator__shrinking': True, 'score_func': None, 'estimator__degree': 3, 'estimator__class_weight': None, 'loss_func': None, 'estimator__random_state': None, 'estimator': SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,
  kernel='rbf', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False), 'estimator__coef0': 0.0, 'error_score': 'raise', 'estimator__tol': 0.001, 'estimator__C': 1.0}

SVM Accuracy: 0.767326732673
Classification report:
             precision    recall  f1-score   support

    Females       0.76      0.77      0.76       294
    Males         0.78      0.77      0.77       312

avg / total       0.77      0.77      0.77       606

我不知道这是使用它的正确方法,并且给出此结果的参数C和gamma是什么,但是分类器已经改进,有人可以告诉我我是否做得很好,结果又意味着什么,或者我怎么能做这个?谢谢

cfh

桌子

SVM Accuracy: 0.540041067762
Classification report:
           precision   recall  f1-score   support
Females       0.52      1.00      0.68       242
Males         1.00      0.09      0.16       245

清楚地表明您的分类器几乎将所有示例识别为女性。这是为什么?100%的召回率表示所有女性样本均已正确识别为女性,而男性样本的100%精度意味着分类器认为男性的每个样本确实是男性。另一方面,女性人口的准确率达到50%,这意味着您平均分类为女性的样本中只有一半是真正的女性,而另一半是男性。

如果您仔细考虑一下,只会得出一个结论:分类器预测(几乎)显示的“女性”标签。现在,您必须找出原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

安阳语音识别问题

来自分类Dev

华为手机使用图库时出现生物识别问题

来自分类Dev

Java OutOfMemoryError时如何识别问题?

来自分类Dev

SpeechResult 的 Twilio 语音识别问题

来自分类Dev

python支持向量机

来自分类Dev

支持向量机

来自分类Dev

支持向量机的性别分类:线性核的结果正确率为100%,RBF的结果却差得多

来自分类Dev

ios应用被拒绝,需要帮助识别问题

来自分类Dev

运行时错误3134无法识别问题

来自分类Dev

Windows Phone 8.1上的语音识别问题

来自分类Dev

Android中的Tesseract字符识别问题(而不是iOS?)

来自分类Dev

AS附近的语法,但是我无法识别问题

来自分类Dev

在我的serializers.py文件中无法识别问题

来自分类Dev

OpenCV python上的人脸识别问题

来自分类Dev

Windows Phone 8.1上的语音识别问题

来自分类Dev

GRUB双启动Windows Linux-设备识别问题

来自分类Dev

平行硒测试的指纹识别问题

来自分类Dev

支持向量机的几何直觉

来自分类Dev

支持向量机的RBF内核

来自分类Dev

绘制支持向量机的ROC

来自分类Dev

支持向量机的几何直觉

来自分类Dev

支持向量机与K最近邻居

来自分类Dev

支持向量机的图边距

来自分类Dev

支持向量机算法的图像分类

来自分类Dev

Apache Spark中的支持向量机

来自分类Dev

支持向量机用于多目标分类

来自分类Dev

如何获得支持向量机的分类错误?

来自分类Dev

支持向量机:什么是C&Gamma?

来自分类Dev

C ++支持向量机(SVM)模板库?