机器学习:scikit-learn 做笑脸识别 (SVM, KNN, Logisitc regression)

摘要:
Scikit-learn是一个非常强大的Python机器学习包。今天,我们将介绍scikit学习中常用的几种分类器,如SVM、KNN和逻辑表达式,用于笑脸识别。这里使用GENKI4K数据库。首先检测并剪切每个图像,然后提取HOG特征。

scikit-learn 是 Python 非常强大的一个做机器学习的包,今天介绍scikit-learn 里几个常用的分类器
SVM, KNN 和 logistic regression,用来做笑脸识别。

这里用到的是GENKI4K 这个数据库,每张图像先做一个人脸检测与剪切,然后提取HOG特征。这个数据库有 4000 张图,分成4组,做一个 cross validation,取平均值作为最终的识别率:

import string, os, sys
import numpy as np
import matplotlib.pyplot as plt
import scipy.io
import random
from sklearn import neighbors, linear_model, svm


dir = '/GENKI4K/Feature_Data'  
print '----------- no sub dir'  

# prepare the data
files = os.listdir(dir)  
for f in files:  
    print dir + os.sep + f

file_path=dir+os.sep+files[14]

#print file_path

dic_mat = scipy.io.loadmat(file_path)

data_mat=dic_mat['Hog_Feat']

print 'feature: ',  data_mat.shape

#print data_mat.dtype

file_path2=dir+os.sep+files[15]

#print file_path2

dic_label=scipy.io.loadmat(file_path2)

label_mat=dic_label['Label']

file_path3=dir+os.sep+files[16]

print 'fiel 3 path: ', file_path3

dic_T=scipy.io.loadmat(file_path3)

T=dic_T['T']
T=T-1

print T.shape

label=label_mat.ravel()

# Acc=np.zeros((1,4))

Acc=[0,0,0,0]

for i in range (0, 4):
    print "the fold %d" % (i+1)
    train_ind=[]
    for j in range (0, 4):
        if j==i:
            test_ind=T[j]
        else:
            train_ind.extend(T[j])
#    print len(test_ind), len(train_ind)
#    print max(test_ind), max(train_ind)
    train_x=data_mat[train_ind, :]
    test_x=data_mat[test_ind, :]
    train_y=label[train_ind]
    test_y=label[test_ind]
#   SVM   
    clf=svm.LinearSVC()
#   KNN 
#    clf = neighbors.KNeighborsClassifier(n_neighbors=15)
#    Logistic regression
#    clf = linear_model.LogisticRegression()

    clf.fit(train_x, train_y)
    predict_y=clf.predict(test_x)
    Acc[i]=np.mean(predict_y == test_y)
    print "Accuracy: %.2f" % (Acc[i])

print "The mean average classification accuracy: %.2f" % (np.mean(Acc))

# SVM 的实验结果
(4, 1000)
the fold 1
Accuracy: 0.89
the fold 2
Accuracy: 0.88
the fold 3
Accuracy: 0.89
the fold 4
Accuracy: 0.90
The mean average classification accuracy: 0.89

# KNN 的实验结果
(4, 1000)
the fold 1
Accuracy: 0.83
the fold 2
Accuracy: 0.84
the fold 3
Accuracy: 0.84
the fold 4
Accuracy: 0.85
The mean average classification accuracy: 0.84

# logistic regression 的实验结果
(4, 1000)
the fold 1
Accuracy: 0.91
the fold 2
Accuracy: 0.91
the fold 3
Accuracy: 0.90
the fold 4
Accuracy: 0.92
The mean average classification accuracy: 0.91

免责声明:文章转载自《机器学习:scikit-learn 做笑脸识别 (SVM, KNN, Logisitc regression)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇多元高斯分布及多元条件高斯分布Python: 文件操作与数据读取下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python 函数参数赋值过程

形参赋值的过程是这样的:首先按顺序把“arg”这种形式的实参给对应的形参第二,把“arg=”这种形式的实参赋值给形式第三,把多出来的“arg”这种形式的实参组成一个tuple给带一个星号的形参第四,把多出来的“key=value”这种形式的实参转为一个dictionary给带两个星号的形参。听起来好复杂,实际是是很简单的。很直观,来看例子: 1. def t...

Python机器学习(十三) 最近邻居/k-近邻算法

KNN算法是一种基于实例的学习,或者是局部近似和将所有计算推迟到分类之后的惰性学习。用最近的邻居(k)来预测未知数据点。k 值是预测精度的一个关键因素,无论是分类还是回归,衡量邻居的权重都非常有用,较近邻居的权重比较远邻居的权重大。 KNN 算法的缺点是对数据的局部结构非常敏感。计算量大,需要对数据进行规范化处理,使每个数据点都在相同的范围。 M...

项目——基于httpd镜像演示Dockerfile所有的指令

基于httpd镜像演示Dockerfile所有的指令: 第一步:创建Dockerfile工作目录 [root@localhost harbor]# mkdir /test [root@localhost harbor]# cd /test/ [root@localhost test]# echo 11111 > 1.txt [root@localho...

unison + inotify 实现文件实时双向同步部署步骤

unison+inotify实现文件实时双向同步部署步骤 一.Unison简介 Unison是Windows、Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致。Unison拥有与其它一些同步工具或文件系统的相同的特性,但也有自身的特点: 1.跨平台使用; 2.对内核和用户权限没有特别要求; 3.U...

volatile关键字解析

Java并发编程:volatile关键字解析 2016/02/28 | 分类:基础技术|44 条评论| 标签:VOLATILE,并发编程 分享到:245 原文出处:海子 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,vol...

深度学习基本概念的了解

机器学习的思路:利用一些训练数据,使机器能够总结出一些规律,然后用这些规律来分析未知数据。 举个生活的例子: Q:为什么高考前需要大量的刷题??请从深度学习解答一下。 高考为例,高考的题目我们没有做过,但是高中三年我们做过很多很多题目,由此学会了解题方法,因此考场上面对陌生问题也可以算出答案。 申明:非原创,转载自《有监督学习、无监督学习、分类...