#使用多种回归模型完成人脸图像下半部的绘制
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()
使用多种回归模型完成人脸图像下半部的绘制
最新推荐文章于 2024-06-19 23:22:26 发布