【机器学习】六种算法在人脸补全中的应用比较(K紧邻,线性,决策树,岭回归,套索回归,ElasticNet)

需求:

根据人的上半边脸预测下半边脸,用各种算法取得的结果与原图比较

  • 思考:

    这是一个回归问题,不是分类问题(人脸数据不固定) 数据集一共包含40个人,每一个人10张照片,分布规律
    每一个人取出8张照片作为训练数据,2张照片作为测试数据 样本特征和样本标签如何拆分?上半边脸作为样本特征,下半边脸作为特征标签

————————————————

人脸图像补全的方法用途及研究

导包

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_split

导入datasets中400位人脸数据数据

faces  = datasets.fetch_olivetti_faces()
X = faces.data
images = faces.images
y = faces.targetdisplay(X.shape)
display(images.shape)
display(y.shape)

(400, 4096)

(400, 64, 64)

(400,)

plt.figure(figsize=(2,2))
index = np.random.randint(0,400,size =1)[0]
img = images[index]
plt.imshow(img,cmap = plt.cm.gist_gray)

在这里插入图片描述

将X(人脸数据)分成上半张人脸和下半张人脸

X_up = X[:,:2048]
X_down = X[:,2048:] index = np.random.randint(0,400,size =1)[0]axes = plt.subplot(1,3,1)
up_face = X_up[index].reshape(32,64)
axes.imshow(up_face,cmap = plt.cm.gray)axes = plt.subplot(1,3,2)
down_face = X_down[index].reshape(32,64)
axes.imshow(down_face,cmap = plt.cm.gray)axes = plt.subplot(1,3,3)
face = X[index].reshape(64,64)
axes.imshow(face,cmap = plt.cm.gray)

在这里插入图片描述

X = X_up.copy()
y = X_down.copy()
display(X.shape,y.shape)

(400, 2048)
(400, 2048)

32*64

2048

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['knn'] = KNeighborsRegressor(n_neighbors=5)
estimators['lasso'] = Lasso(alpha=0.1)
estimators['ElasticNet'] = ElasticNet()estimators['tree'] = DecisionTreeRegressor()#决策树费时间 2048个样本特征
#criterion = 'mse'  线性的是gini 和熵 都是越小越好

分别调用这六个每个算法

result = {}
for key,model in estimators.items():model.fit(X_train,y_train)y_ = model.predict(X_test)#预测的是下班长人脸result[key] = y_

结果可视化

plt.figure(figsize=(8*2,2*10,))for i in range(0,10):#绘制第一列,上班张人脸axes = plt.subplot(10,8,i*8+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('upface')#第七列绘制整张人脸axes = plt.subplot(10,8,i*8+8)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('trueface')#绘制第二列到第六列 ,算法预测的数据result,#字典 key 算法value 预测人脸#用enumerate 循环增加了个jfor j , key in enumerate(result): #j,0,1,2,3,4axes = plt.subplot(10,8,i*8+2+j)y_ = result[key]pre_downface = y_[i].reshape(32,64)pre_face = np.concatenate([up_face,pre_downface])axes.imshow(pre_face,cmap = plt.cm.gray)axes.axis('off')if i == 0:axes.set_title(key)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

性能优化之NSDateFormatter

为什么要优化NSDateFormatter?首先,过度的创建NSDateFormatter用于NSDate与NSString之间转换,会导致App卡顿,打开Profile工具查一下性能,你会发现这种操作占CPU比例是非常高的。据官方说法,创建NSDateForma…

QuickTime文件格式解析

QuickTime文件格式解析Peter Lee 2008-06-14 一、简介 QuickTime是Apple公司开发的一套完整的多媒体平台架构,可以用来进行多种媒体的创建,生产,和分发,并为这一过程提供端到端的支持:包括媒体的实时捕捉,…

python的数据类型转换

数据类型转换 将数据由当前类型变化为其他类型的操作就是数据类型转换。数据类型转换分为两类,分别是自动数据类型转换 和 强制数据类型转换。 自动转换(隐式转换) 自动转换时程序根据运算要求进行的转换,不许要人工干预。 1.自动类型转换不需要人工干…

Linux文件属性及如何修改文件属性

ls -al:显示文件的文件名与相关属性并列出所有文件详细的权限与属性 dr-xr-x---. 7 root root 4096 Apr3 12:31 . 权限 连接 所有者 用户组 文件容量 修改日期 文件名 第一个字符代表这个文件是“目录,文件&#x…

SyntaxError:identifier starts immediately after numeric literal

1、错误描写叙述2、错误原因因为在改动方法传參的过程,须要传个id,可是这个id是字符串类型,传入的是数值型3、解决的方法在传參时,须要加入“”,变成字符串类型User.modify("id");

python中的运算和运算符

运算和运算符 运算: 由一个以上的值经过变化得到新值得过程,就是运算。 运算符: 用于运算的符号,就是运算符 运算的分类: 1.算数运算 2.比较运算/关系运算 3.赋值运算 4.逻辑运算 5.位运算 6.成员运算 7.身份运算算术…

【数据分析】reshape(-1,1)和numpy的广播机制

在创建DataFrame的时候常常使用reshape来更改数据的列数和行数。 reshape可以用于numpy库里的ndarray和array结构以及pandas库里面的DataFrame和Series结构。 源数据 reshape函数 reshape(行,列)可以根据指定的数值将数据转换为特定的行数和…

蓝桥杯-组素数-java

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: 蓝桥杯赛题 * 作 者: 彭俊豪 * 完成日期&#xf…

AVI文件规范

AVI文件规范PeterLee 2007-10-14 一、AVI文件简介 AVI的英文全称为Audio Video Interleaved,即音频视频交错格式,是将语音和影像同步组合在一起的文件格式。AVI于1992年被Microsoft公司推出,随Windows3.1一起被人们所认识和熟知。AVI文件格式…

python中的流程控制

流程控制 流程: 计算机执行代码的顺序,就是流程。 流程控制: 对计算机代码执行顺序的控制,就是流程控制。 流程分类: 流程控制一共分为三类,分别是 顺序结构、分支(选择)结构、循环结构。 顺序结构 顺序…

tomcat jdbc SlowQueryReport的实现解读

为什么80%的码农都做不了架构师?>>> ##序 tomcat提供了JdbcInterceptor可以用来监控jdbc的执行情况,默认提供了好几个现成的interceptor可以用,SlowQueryReport以及SlowQueryReportJmx就是其中的两个。 ##JdbcInterceptor的基本原…

【机器学习】Bagging和Boosting的区别(面试准备)

Baggging 和Boosting都是模型融合的方法,可以将弱分类器融合之后形成一个强分类器,而且融合之后的效果会比最好的弱分类器更好。 Bagging: 先介绍Bagging方法: Bagging即套袋法,其算法过程如下: 从原始样本集中抽取训…

python中的循环结构

循环结构 循环结构可以减少源程序重复书写的工作量(代码量),用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构。 Python中循环结构分为两类,分别是 while 和 for .. in while 格式1: num1,num2 3…

线性判别结合源码分析LDA原理

1. LDA的思想 LDA线性判别分析也是一种经典的降维方法,LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“投影后类内方…

RIFF文件规范

RIFF文件规范Peter Lee 2007-10-02 摘要:RIFF全称为资源互换文件格式(Resources Interchange File Format),RIFF文件是windows环境下大部分多媒体文件遵循的一种文件结构,常见的如WAV文件、AVI文件等。RIFF可以看成一种…

FB宣布将回购60亿美元股票 首席会计官将离职

11月19日消息,据美国媒体报道,Facebook宣布将回购60亿美元股票,回购计划将在明年第一季度开始实施。另外,该公司还宣布首席会计官贾斯艾特瓦尔将离职。 短期回购股票可使Facebook赢得时间,缓解投资长期项目如Instagram…

2017小目标

最美人间四月天,没有三月的傲寒,没有五月的燥热,桃花刚偷去了红,杨柳在风中扭着腰,樱花正开的烂漫。工作繁忙之余。做一下深呼吸,沾衣欲湿杏花雨,吹面不含杨柳风。不知不觉2017第一季度已经结束…

【机器学习】feature_importances_ 参数源码解析

在用sklearn的时候经常用到feature_importances_ 来做特征筛选,那这个属性到底是啥呢。 分析源码发现来源于每个base_estimator的决策树的 feature_importances_ 由此发现计算逻辑来源于cython文件,这个文件可以在其github上查看源代码 而在DecisionTree…

流行视频格式讲解

转自 豪杰技术 http://www.herosoft.com 流行视频格式讲解 *. MPEG/.MPG/.DAT MPEG也是Motion Picture Experts Group 的缩写。这类格式包括了 MPEG-1, MPEG-2 和 MPEG-4在内的多种视频格式。MPEG-1相信是大家接触得最多的了,因为目前其正在被广泛地应用在 VCD…

欧盟通过最新《数据保护法》

欧洲议会近日通过了最新的《数据保护法》,用以保护消费者的数据和隐私。该法案是数字时代的首个新规,取代了一套20年前的、在互联网发展初期阶段构想的规则。新规规定,当企业所拥有的消费者相关数据遭遇黑客攻击等泄露事件后,消费…