人脸自动补全

关注公众号“轻松学编程”了解更多。

1、导包

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import time
from pandas import DataFrame,Series #导入knn模型包
from sklearn.neighbors import KNeighborsRegressor from sklearn.linear_model import LinearRegression,Ridge,Lasso %matplotlib inline
#绘图时可以显示中文
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

2、获取数据

#从模块自带的数据集中选取人脸数据
from sklearn.datasets import fetch_olivetti_faces faces = fetch_olivetti_faces()
#images中存储了400张64*64像素的照片
faces.images.shape

3、数据建模

提取特征数据和目标数据

#data是images的样本特征形式数据
faces.data.shape

#目标数据分为了40类,每类分组10张照片(0-39)
np.unique(faces.target,return_counts=True)

#查看一张照片的数据维度
faces.images[0].shape

#显示一张照片
plt.imshow(faces.images[0])

#提取特征数据
train = faces.data
#提取目标数据
target = faces.target

4、拆分数据

拆分数据:将样本数据拆分成训练数据(80%)和测试数据(20%)。

  • 训练数据:特征(左半张脸) 目标(右半张脸)
  • 测试数据:特征(左半张脸) 目标(右半张脸)
X_train = []
X_test = []
y_train = []
y_test = [] for i in range(40):
#获取每种分类的10张照片数据
person_faces = train[target == i] #将获取的每种分类中的每张照片切分成上、下半张脸两部分
for k in range(len(person_faces)):
face_data = person_faces[k]
#取照片左边
left_face = face_data.reshape(64,64)[:,:32].ravel()
#取照片右边
right_face = face_data.reshape(64,64)[:,32:].ravel() #将每种分类中的前8张照片的左、右半张脸的数据分别添加到训练数据的集合中
if k < 8:
X_train.append(left_face)
y_train.append(right_face)
else:
#将每种分类中的后2张照片的左、右半张脸的数据分别添加到测试数据的集合中
X_test.append(left_face)
y_test.append(right_face)

6、模型评估

建一个DataFrame表格

df=DataFrame(data=None,
index=['k-近邻模型',
'普通线性回归(linear)',
'岭回归(Ridge)',
'lasso回归'],
columns=['评分','训练时间(s)','k值/alpha',])

knn模型

score = 0
k=0
for i in range(1,40):
knn = KNeighborsRegressor(n_neighbors=i)
start=time.time()
knn.fit(X_train,y_train)
end=time.time()
s=knn.score(X_test,y_test)
if score < s:
score = s
k=i
ktime = end-start
df.loc['k-近邻模型']=[score,ktime,k]

普通线性回归模型

score = 0
for i in range(1,10):
linear = LinearRegression()
start=time.time()
linear.fit(X_train,y_train)
end=time.time()
s=linear.score(X_test,y_test)
if score < s:
score = s
ktime = end-start
df.loc['普通线性回归(linear)']=[score,ktime,None]

岭回归模型

score = 0
alpha=0
for i in range(1,10):
ridge = Ridge(alpha=i)
start=time.time()
ridge.fit(X_train,y_train)
end=time.time()
s=ridge.score(X_test,y_test)
if score < s:
score = s
alpha=i
ktime = end-start
df.loc['岭回归(Ridge)']=[score,ktime,alpha]

lasso模型

score = 0
alpha=0
for i in range(1,10):
lasso = Lasso(alpha=i)
start=time.time()
lasso.fit(X_train,y_train)
end=time.time()
s=lasso.score(X_test,y_test)
if abs(score) < abs(s):
score = s
alpha=i
ktime = end-start
df.loc['lasso回归']=[score,ktime,alpha]
df

从表格可以看出knn模型和岭回归模型对预测结果较为精准。

7、绘图

#将预测的缺失部分和测试数据整合一起显示
plt.figure(figsize=(8,6))
#图片标题
title=['true_img','knn_img','linear_img','lasso_img','ridge_img']
#预测4张照片
for i in range(4):
#预测测试数据中照片缺失的部分
knn_y = knn.predict([X_test[i]])
linear_y = linear.predict([X_test[i]])
ridge_y = ridge.predict([X_test[i]])
lasso_y = lasso.predict([X_test[i]])
#合并原始照片
true_img=np.concatenate((X_test[i].reshape(64,32),
y_test[i].reshape(64,32)),axis=1)
#合并预测照片
knn_img=np.concatenate((X_test[i].reshape(64,32),
knn_y[0].reshape(64,32)),axis=1)
linear_img=np.concatenate((X_test[i].reshape(64,32),
linear_y[0].reshape(64,32)),axis=1)
lasso_img=np.concatenate((X_test[i].reshape(64,32),
lasso_y[0].reshape(64,32)),axis=1)
ridge_img=np.concatenate((X_test[i].reshape(64,32),
ridge_y[0].reshape(64,32)),axis=1) index=[true_img,knn_img,linear_img,lasso_img,ridge_img]
#一行显示5张照片做对比
for j in range(5):
axes = plt.subplot(5,5,(j+1)+i*5)
axes.imshow(index[j])
if i < 1:
axes.set_title(title[j])

经过对比使用岭回归(ridge)模型对照片右半部分补全效果较好。

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

关注我,我们一起成长~~

python机器学习实现人脸图片自动补全的更多相关文章

  1. Python 在 Terminal 中的自动补全

    为了在 Terminal 中使用 Python 更加方便,在 home 目录下添加脚本 .pythonstartup,内容如下, 然后在 .bashrc 中添加 export PYTHONSTARTU ...

  2. Python交互模式下代码自动补全

    这个功能是以lib的形式提供的,配置写到home下的.pythonrc文件中, 并设置好环境变量让python启动时执行初始化: # ~/.pythonrc # enable syntax compl ...

  3. 在Python命令行和VIM中自动补全

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1. VIM下的配置: wget https://github.com/rkulla/pydiction/arc ...

  4. python环境下使用tab自动补全命令

    # vim /usr/lib/python2.7/dist-packages/tab.py 加入如下内容: #!/usr/bin/env python # python startup file im ...

  5. python代码自动补全

    牛逼了!Python代码补全利器,提高效率告别996! Python之禅 Python之禅 微信号 VTtalk 功能介绍 人生苦短,我用Python,这里是一名老程序员分享Python技术的地方,欢 ...

  6. 这个 Python 代码自动补全神器搞得我卧槽卧槽的

    是时候跟你说说这个能让你撸代码撸得舒服得不要不要的神器了——kite. ​!   ​ 简单来说,它是一款 IDE 的插件,能做到代码自动补全,可能你会说了,这有什么牛逼的?一般的编辑器不都有这个功能么 ...

  7. Python自动补全

    转自:http://blog.linuxeye.com/324.html Python自动补全有vim编辑下和python交互模式下,下面分别介绍如何在这2种情况下实现Tab键自动补全. 一.vim ...

  8. Linux python <tab>自动补全

    为Python添加交互模式下TAB自动补全以及命令历史功能. 1.获取python目录 [root@localhost ~]# python Python 2.6.6 (r266:84292, Jul ...

  9. python命令行添加Tab键自动补全

    1.编写一个tab的自动补全脚本,名为tab.py #!/usr/bin/python # python tab complete import sys import readline import ...

随机推荐

  1. java整合Elasticsearch,实现crud以及高级查询的分页,范围,排序功能,泰文分词器的使用,分组,最大,最小,平均值,以及自动补全功能

    //为index创建mapping,index相当于mysql的数据库,数据库里的表也要给各个字段创建类型,所以index也要给字段事先设置好类型: 使用postMan或者其他工具创建:(此处我使用p ...

  2. 043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用

    043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用 本文知识点:do-while循环介绍及应用 do-while循 ...

  3. Java知识系统回顾整理01基础03变量07final关键字

    一.final赋值 final 修饰一个变量,有很多种说法,比如不能改变等等 准确的描述是 当一个变量被final修饰的时候,该变量只有一次赋值的机会 二.在声明的时候赋值 i已经被赋值为5,所以这里 ...

  4. DMZ是什么

    刚刚接触安全域,实在是佩服自己真的是菜,,,啥都不懂,看看过段时间能有多大进步吧... 概念 DMZ:它是一个缓冲区,一个隔离区.它是位于两台防火墙之间的区域,相对于INTER网来说安全级别高一些,但 ...

  5. VS Code 搭建编写Shell环境(WSL)

    安装过程 Win10开启WSL,方法略 安装VSCode,方法略 安装语法提示插件:shellman 安装格式化插件:shell-format(右键 -> 格式化文档(Ctrl + Alt + ...

  6. c#之task与thread区别及其使用

    如果需要查看更多文章,请微信搜索公众号 csharp编程大全,需要进C#交流群群请加微信z438679770,备注进群, 我邀请你进群! ! ! --------------------------- ...

  7. devops-jenkins部署和基本使用

    1. jenkins部署和基本使用  1.1) 先关闭centos 7的自带防火墙和selinux [root@test-2 ~]# /bin/systemctl stop firewalld [ro ...

  8. .NET Standard 类库的使用技巧

    系列目录     [已更新最新开发文章,点击查看详细] 在前一篇博客<.NET Standard中配置TargetFrameworks输出多版本类库>中详细介绍了如何创建.配置.条件编译. ...

  9. [Docker]linux异常关机,docker镜像丢失

    在运行中的docker容器遇到意外情况,可能会自动终止运行,例如磁盘空间不足. 解决办法: 找到/var/lib/docker/containers文件夹下的所有容器ID 执行命令,查看容器信息 ,找 ...

  10. 【小白学PyTorch】21 Keras的API详解(下)池化、Normalization层

    文章来自微信公众号:[机器学习炼丹术].作者WX:cyx645016617. 参考目录: 目录 1 池化层 1.1 最大池化层 1.2 平均池化层 1.3 全局最大池化层 1.4 全局平均池化层 2 ...