今天写一个比较简单的机器学习例子
使用线性回归实现人脸识别
使用的数据集是ORL数据集
算法描述
输入:图片矩阵img,标签信息label,测试图片test
对每一个类:
第一步:从图片矩阵中读出来一类图片,划分为训练集(X)与测试集(y)
第二步:计算w
第三步:计算预测图片
第四步:计算出dis即预测图片与真实图片之间的误差,并将误差存储起来
对于每一个测试图片test,找到最小dis对应的标签label,label对test的分类
使用二折交叉验证,将原油数据集划分为两部分X1,X2;第一次将X1作为训练集,X2作为测试集;第二次将X2作为训练集,X1作为测试集。
数据集
ORL人脸数据集
使用的是:ORL_32_32.mat
使用scipy直接读取,里面包含两个矩阵,第一个矩阵是人脸的数据,第二个矩阵是标签
实验环境
python 3.6
macOS 10.12
上代码
比较简单就直接放代码了
注释也比较详细
使用二折交叉验证,我直接把二折写死了,如果是n折的话,可以用循环去写。
二折的思路比较简单:第一次选取每一类前五张照片做训练集,后五张照片做测试集,第二次选取每一类前五张照片做测试集,后五张照片做训练集。
import scipy.io as sio
import random
import numpy as np
#使用scipy读取mat文件
mat=sio.loadmat('ORL_32_32.mat')
img=mat[