使用多种回归模型完成人脸图像下半部的绘制

#使用多种回归模型完成人脸图像下半部的绘制
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from sklearn.datasets import fetch_olivetti_faces
from sklearn.utils.validation import check_random_state
from sklearn.ensemble import ExtraTreesRegressor
from sklearn.neighbors import KNeighborsRegressor
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import RidgeCV


#加载人脸数据
data,targets=fetch_olivetti_faces(return_X_y=True)
#划分训练集和测试,测试集为30人测试集为30-128
train =data[targets<30]
test = data[targets>=30]

#选择一个人的子集
n_faces = 5
rng = check_random_state(4)#随机数种子随机数生成器
face_ids =rng.randint(test.shape[0],size=(n_faces,))#随机选择5个人
test = test[face_ids,:]#选择这5个人的数据

n_pixels = data.shape[1]
#脸的上半部分
X_train = train[:,:(n_pixels+1)//2]
X_test = test[:,:(n_pixels+1)//2]
y_train = train[:,n_pixels//2:]
y_test = test[:,n_pixels//2:]

#各种训练的模型
estimators = {
    "Extra tree": ExtraTreesRegressor(n_estimators=10,max_features=32,random_state=0),#随机森林随机森林
    "KNN": KNeighborsRegressor(),#
    "Linear regression": LinearRegression(),
    "Ridge": RidgeCV()
}
#训练模型训练模型
y_test_pred = dict()
for name,estimator in estimators.items():
    estimator.fit(X_train,y_train)
    y_test_pred[name] = estimator.predict(X_test)
#绘制完整的人脸
image_shape = (64,64)
#绘制人脸绘制的图片大小
n_cols =1+len(estimators)#列数绘制的列数
plt.figure(figsize=(2.*n_cols,2.26*n_faces))#绘制的图片大小
plt.suptitle("Face completion with multi-output estimators",size=64)#设置图片大小

#绘制上半部分绘制图片
for i in range(n_faces):
    true_face = np.hstack((X_test[i],y_test[i]))#拼接上半部分和下半部分绘制真实的人脸
    if i:
        sub=plt.subplot(n_faces,n_cols,i*n_cols+1)#绘制上半部分绘制图片
    else:
        sub=plt.subplot(n_faces,n_cols,i*n_cols+1,title="True face")#绘制上半部分绘制图片
    sub.axis("off")
    sub.imshow(true_face.reshape(image_shape),cmap=plt.cm.gray,interpolation="nearest")#绘制上半部分绘制图片
    for j,name in enumerate(sorted(estimators)):#绘制下半部分绘制图片
        compeleted_face = np.hstack((X_test[i],y_test_pred[name][i]))#绘制下半部分绘制图片绘制完整的人脸
        if i:
            sub=plt.subplot(n_faces,n_cols,i*n_cols+j+2)#绘制下半部分绘制图片
        else:
            sub=plt.subplot(n_faces,n_cols,i*n_cols+j+2,title=name)
        sub.axis("off")
        sub.imshow(compeleted_face.reshape(image_shape),cmap=plt.cm.gray,interpolation="nearest")#绘制下半部分绘制图片绘制完整的人脸
plt.show()

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值