技术要点

  • 回归算法
  • 图片加载

加载人物图片

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.linear_model import LinearRegression,Ridge,Lasso
from sklearn.neighbors import KNeighborsRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn import datasets
from sklearn.model_selection import train_test_splitfaces=datasets.fetch_olivetti_faces()  # 加载人物画像数据
X=faces.data
images=faces.images
y=faces.target
print('X',faces['data'].shape)  # 一行代表一个人物图片
print('images',faces['images'].shape)  # 人物图片数据
print('y',faces['target'].shape)  # 人物图片标签

展示人物图像

plt.figure(figsize=(16,16))
# 总共有四百张人物图片,但是我现在值选出了100张作为展示
for i in range(100):axes=plt.subplot(10,10,i+1)img=images[i]plt.imshow(img,cmap=plt.cm.gray)axes.axis('off')

切分人脸数据

X_up=X[:,:2048]  # 所有图片的上半张脸
X_down=X[:,2048:]  # 所有图片的下半张脸index=np.random.randint(0,400,size=1)[0]  # 从400个任务画像中随机选出一个索引# 上半张脸的展示
axes=plt.subplot(1,3,1)
up_face=X_up[index].reshape(32,64)
axes.imshow(up_face,cmap='gray')# 下半张脸的展示
axes=plt.subplot(1,3,2)
down_face=X_down[index].reshape(32,64)
axes.imshow(down_face,cmap='gray')# 完整的脸的展示
axes=plt.subplot(1,3,3)
face=X[index].reshape(64,64)
axes.imshow(face,cmap='gray')

训练集测试集切分

X=X_up.copy()
y=X_down.copy()
display(X.shape,y.shape)
x_train,x_test,y_train,y_test=train_test_split(X,y,test_size=30)

声明相关算法

estimators={}
estimators['linear']=LinearRegression()
estimators['ridge']=Ridge(alpha=0.1)
estimators['lasso']=Lasso(alpha=1)
estimators['knn']=KNeighborsRegressor(n_neighbors=5)
estimators['tree']=DecisionTreeRegressor()
result={}
for key,model in estimators.items():model.fit(x_train,y_train)y_=model.predict(x_test)result[key]=y_print(key,'执行完成')
print('---------------执行结束--------------')

数据可视化

# 这种方法是选将人脸数据进行切分然后切分训练集和测试集,其实我们大可以先切分训练集和测试集,然后再切分人脸数据
plt.figure(figsize=(7*2,10*2))
for i in range(0,10):axes=plt.subplot(10,7,i*7+1) # 1个半边脸,5个预测出来的脸,1个完整的脸up_face=x_test[i].reshape(32,64)axes.imshow(up_face,cmap=plt.cm.gray)axes.axis('off')if i==0:axes.set_title('up_face')# 绘制第七列,是我们的整张人脸axes=plt.subplot(10,7,i*7+7)down_face=y_test[i].reshape(32,64)true_face=np.concatenate([up_face,down_face])axes.imshow(true_face,cmap=plt.cm.gray)axes.axis('off')if i==0:axes.set_title('true_face')# 绘制第二列到第六列,算法预测的数据在result当中,result是一个字典,key算法,value预测人脸   for j,key in enumerate(result):axes=plt.subplot(10,7,i*7+2+j)y_=result[key]predict_down_face=y_[i].reshape(32,64)predict_face=np.concatenate([up_face,predict_down_face])axes.imshow(predict_face,cmap='gray')axes.axis('off')if i ==0:axes.set_title(key)

左右人脸补全

left_face=images[:,:,:32]  # 左脸
right_face=images[:,:,32:] # 右脸X=left_face.copy()
y=right_face.copy()# 划分训练集和测试集
x_train1,x_test1,y_train1,y_test1=train_test_split(X,y,test_size=0.25)

展示人脸

plt.figure(figsize=(6,4))
axes=plt.subplot(1,3,1)
left_img=left_face[0]
axes.imshow(left_img,cmap='gray')
axes.axis('off')
axes.set_title('left')axes=plt.subplot(1,3,2)
right_img=right_face[0]
axes.imshow(right_img,cmap='gray')
axes.axis('off')
axes.set_title('right')axes=plt.subplot(1,3,3)
image=images[0]
axes.imshow(image,cmap='gray')
axes.axis('off')
axes.set_title('all')

模型预测

estimators1={}
estimators1['linear']=LinearRegression()
estimators1['ridge']=Ridge(alpha=0.1)
estimators1['lasso']=Lasso(alpha=1)
estimators1['knn']=KNeighborsRegressor(n_neighbors=5)
estimators1['tree']=DecisionTreeRegressor()
result1={}
for key,model in estimators1.items():model.fit(x_train1.reshape(-1,2048),y_train1.reshape(-1,2048))y1_=model.predict(x_test1.reshape(-1,2048))result1[key]=y1_print(key,'执行完成')
print('---------------执行结束--------------')

展示人脸

# 这种方法是选将人脸数据进行切分然后切分训练集和测试集,其实我们大可以先切分训练集和测试集,然后再切分人脸数据
plt.figure(figsize=(7*2,10*2))
for i in range(0,10):axes=plt.subplot(10,7,i*7+1) # 1个半边脸,5个预测出来的脸,1个完整的脸left_face=x_test1[i]axes.imshow(left_face,cmap=plt.cm.gray)axes.axis('off')if i==0:axes.set_title('up_face')# 绘制第七列,是我们的整张人脸axes=plt.subplot(10,7,i*7+7)right_face=y_test1[i]true_face1=np.hstack([left_face,right_face])axes.imshow(true_face1,cmap=plt.cm.gray)axes.axis('off')if i==0:axes.set_title('true_face1')# 绘制第二列到第六列,算法预测的数据在result当中,result是一个字典,key算法,value预测人脸   for j,key in enumerate(result1):axes=plt.subplot(10,7,i*7+2+j)y1_=result1[key]predict_right_face=y1_[i]predict_face=np.hstack((left_face,predict_right_face.reshape(64,32)))axes.imshow(predict_face,cmap='gray')axes.axis('off')if i ==0:axes.set_title(key)

【算法案例】人脸自动补全相关推荐

  1. 【阿旭机器学习实战】【15】人脸自动补全(多目标回归),并比较5种不同模型的预测效果

    [阿旭机器学习实战]系列文章主要介绍机器学习的各种算法模型及其实战案例,欢迎点赞,关注共同学习交流. 本文通过5种不同的机器学习模型:KNN回归模型,线性回归,岭回归,lasso回归,极端随机森林回归 ...

  2. 自动补足算法是什么_如何自定义Shell(Fish版)的自动补全规则?

    默认fish能自动补全的命令已经相当多了,常见的apt-get,rpm等都没问题,但今天却发现没有lsusb的补全规则,查看了下文档,发现规则比bash-completion简单不少,记录下- 简单补 ...

  3. 字符串匹配数据结构 --Trie树 高效实现搜索词提示 / IDE自动补全

    文章目录 1. 算法背景 2. Trie 树实现原理 2.1 Trie 树的构建 2.2 Trie树的查找 2.3 Trie树的遍历 2.4 Trie树的时间/空间复杂度 2.5 Trie 树 Vs ...

  4. 准确率可提升50%以上,Facebook用迁移学习改进代码自动补全

    视学算法报道 转载自:机器之心 编辑:陈萍.杜伟 来自 Facebook 的研究团队将迁移学习用于代码自动补全,提出的方法在非常小的微调数据集上提高 50% 以上的准确率,在 50k 标记示例上提高了 ...

  5. Matlab常用的11个快捷键【注释、自动对齐、跳转指定行、设置标签and断点、自动补全、历史命令、强制中断运行、退出、单行注释转多行】

    在使用Matlab进行编程时,有时可能需要不少时间.花时间的地方主要有两点: (1) 一方面在于调试算法的脑力劳动,比如检查算法是否解决了实际问题.程序是否优化等: (2) 另一方面则在于操作软件的体 ...

  6. dev c++代码自动补全_让代码自动补全的全套流程

    作者: 熊唯,黄飞 ,腾讯 PCG/QQ研发中心/CV应用研究组 AI 如果真的可以写代码了,程序员将何去何从?近几年,NLP 领域的生成式任务有明显的提升,那通过 AI 我们可以让代码自动完成后续补 ...

  7. 让代码自动补全的全套流程

    作者:熊唯,黄飞 ,腾讯 PCG/QQ研发中心/CV应用研究组 AI 如果真的可以写代码了,程序员将何去何从?近几年,NLP 领域的生成式任务有明显的提升,那通过 AI 我们可以让代码自动完成后续补全 ...

  8. linux-bash的基本-自动补全-快捷键-历史-命令的别名

    自动补全 命令补全 文件或目录名补全 输入指令的头几个词,如果不能维一对应 点击两下tab键可以显示出提示 如果是唯一的,就会直接补全 输入usera,再点击tab键 快捷键 终止前台运行的程序 ct ...

  9. 这个库厉害了,自动补全 Python 代码,节省 50% 敲码时间

    原文: https://blog.csdn.net/qq_4320... 摘要:介绍一个优秀代码自动补全工具库. 近日,Reddit 上的一篇帖子引起了网友的热议.帖子作者「mlvpj」称: 「我们使 ...

最新文章

  1. Storm具体的解释(二)、成为第一Storm申请书
  2. 写一个使两个整数进行交换的方法(不能使用临时变量) 【前端每日一题-27】...
  3. matlab中size(A 2),MATLAB中size(A,2)什么意思
  4. like 正则 mysql_mysql中使用LIKE,正则_MySQL
  5. win7php一键,批处理也能干大事之——如何实现Win7系统一键切换用户
  6. BZOJ3437 小P的牧场
  7. matlab2c使用c++实现matlab函数系列教程-circshift函数
  8. python开根号函数图像_使用matplotlib / python的平方根刻度
  9. EChart:基础学习
  10. xml属于php还是js,xml是什么
  11. Android 学生管理系统
  12. android wmv2格式视频,视频转换助手app下载
  13. XshellXftpPortable Xshell,Xftp便携版绿色版下载
  14. 常用的不透明度的值,以黑色为例
  15. matlab连通区域质心标记,连通域的质心
  16. Java 七参数计算
  17. 电商运营之业务数据报告
  18. openshift书籍推荐
  19. 近期对战体会 [20170102]
  20. zookeeper 集群搭建及常见问题解决(虚拟机)

热门文章

  1. Android开发——小技巧:推荐辅助工具(icon图标网站、在线取色网站以及视频学习网站)
  2. 蛋花花总结互联网营销最为常见的六种模式
  3. 用javascript调用搜狗地图实现景点的显示
  4. 指定TreeNode排序
  5. python 常用标准库
  6. 用python求三角形周长文件_Python中最大的周长三角形
  7. 我的第一个Python3 网络爬虫 百度百科爬虫
  8. 代发工资直接理财 微信已经可以代替银行 而且更方便
  9. Windows 2008R2 角色 Error
  10. sql_mode严格模式(ANSI/TRADITIONAL/STRICT_TRANS_TABLES)