小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【阿旭機(jī)器學(xué)習(xí)實(shí)戰(zhàn)】【15】人臉自動(dòng)補(bǔ)全(多目標(biāo)回歸),并比較5種不同模型的預(yù)測(cè)效果

 漢無(wú)為 2022-11-20 發(fā)布于湖北

本文通過(guò)5種不同的機(jī)器學(xué)習(xí)模型:KNN回歸模型,線性回歸,嶺回歸,lasso回歸,極端隨機(jī)森林回歸,通過(guò)對(duì)人臉的上半部分進(jìn)行訓(xùn)練模型,來(lái)補(bǔ)全人臉的下半部分,并且比較其預(yù)測(cè)結(jié)果。

目錄

    • 目標(biāo)

    • 數(shù)據(jù)集

    • 數(shù)據(jù)切分

    • 劃分?jǐn)?shù)據(jù)集

    • 建立不同的回歸模型并訓(xùn)練

    • 不同模型預(yù)測(cè)的人臉結(jié)果與實(shí)際的對(duì)比

人臉自動(dòng)補(bǔ)全(多目標(biāo)預(yù)測(cè))

目標(biāo)

通過(guò)上半部分的人臉圖案來(lái)預(yù)測(cè)下邊部分人臉,進(jìn)行人臉補(bǔ)全。

實(shí)質(zhì)是一個(gè)多目標(biāo)預(yù)測(cè)問(wèn)題,對(duì)每一個(gè)目標(biāo)點(diǎn)都會(huì)進(jìn)行模型建模,然后通過(guò)相應(yīng)模型對(duì)各個(gè)點(diǎn)進(jìn)行預(yù)測(cè)

數(shù)據(jù)集

采用Olivetti人臉數(shù)據(jù)集包含400張灰度的64*64像素的人臉圖像,每個(gè)圖像被展平為大小為4096的一維向量,40個(gè)不同的人拍照十次。

from sklearn.neighbors import KNeighborsRegressor
from sklearn.linear_model import LinearRegression,Ridge,Lasso
from sklearn.ensemble import ExtraTreesRegressor
from sklearn import datasets
faces = datasets.fetch_olivetti_faces()
faces
{'data': array([[0.30991736, 0.3677686 , 0.41735536, ..., 0.15289256, 0.16115703,
         0.1570248 ],
        [0.45454547, 0.47107437, 0.5123967 , ..., 0.15289256, 0.15289256,
         0.15289256],
        ...,
        [0.5165289 , 0.46280992, 0.28099173, ..., 0.35950413, 0.3553719 ,
         0.38429752]], dtype=float32),
 'images': array([[[0.30991736, 0.3677686 , 0.41735536, ..., 0.37190083,
          0.3305785 , 0.30578512],
         ...,
         [0.20247933, 0.20661157, 0.20247933, ..., 0.15289256,
          0.16115703, 0.1570248 ]],
         [0.3677686 , 0.40495867, 0.3966942 , ..., 0.35950413,
          0.3553719 , 0.38429752]]], dtype=float32),
 'target': array([ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  1,  1,
         1,  1,  1,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,
         3,  3,  3,  3,  3,  3,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  5,
         5,  5,  5,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,  6,  6,  6,  6,
         6,  6,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,
         8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10,
        ...,
        35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37,
        37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39,
        39, 39, 39, 39, 39, 39, 39, 39, 39]),
 'DESCR': 'Modified Olivetti faces dataset.\n\nThe original database was available from\n\n    http://www.cl./research/dtg/attarchive/facedatabase.html\n\nThe version retrieved here comes in MATLAB format from the personal\nweb page of Sam Roweis:\n\n    http://www.cs./~roweis/\n\nThere are ten different images of each of 40 distinct subjects. For some\nsubjects, the images were taken at different times, varying the lighting,\nfacial expressions (open / closed eyes, smiling / not smiling) and facial\ndetails (glasses / no glasses). All the images were taken against a dark\nhomogeneous background with the subjects in an upright, frontal position (with\ntolerance for some side movement).\n\nThe original dataset consisted of 92 x 112, while the Roweis version\nconsists of 64x64 images.\n'}
data = faces.data
target = faces.target
data.shape
(400, 4096)
faces.images.shape
(400, 64, 64)
import matplotlib.pyplot as plt
%matplotlib inline
# 打印一張人臉圖片
plt.imshow(data[100].reshape((64,64)),cmap='gray')
圖片
請(qǐng)?zhí)砑訄D片描述

數(shù)據(jù)切分

切分特征數(shù)據(jù)數(shù)據(jù)和標(biāo)簽數(shù)據(jù),特征是上半邊臉,標(biāo)簽是下半邊臉

# 特征是上半邊臉
faces_up = data[:,:2048]
# 需要預(yù)測(cè)的目標(biāo):標(biāo)簽是下半邊臉
faces_down = data[:,2048:]
plt.figure(figsize=(2,2))
plt.imshow(faces_up[10].reshape((32,64)),cmap='gray')
<matplotlib.image.AxesImage at 0x25eca1c8828>
圖片
請(qǐng)?zhí)砑訄D片描述
plt.figure(figsize=(2,2))
plt.imshow(faces_down[10].reshape((32,64)),cmap='gray')
圖片
請(qǐng)?zhí)砑訄D片描述

劃分?jǐn)?shù)據(jù)集

# 數(shù)據(jù)切分
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(faces_up,faces_down,test_size=0.02)
y_train[1]
array([0.5082645 , 0.5082645 , 0.5123967 , ..., 0.16115703, 0.17768595,
       0.1694215 ], dtype=float32)

建立不同的回歸模型并訓(xùn)練

此處分別用KNN回歸模型,線性回歸,嶺回歸,lasso回歸,極端隨機(jī)森林回歸這幾種不同的模型來(lái)進(jìn)行建模

estimators = {
    'knn':KNeighborsRegressor(),
    'linear':LinearRegression(),
    'ridge':Ridge(),
    'lasso':Lasso(),
    'extra':ExtraTreesRegressor()  #極端隨機(jī)森林回歸
}
# 定義一個(gè)字典,用于保存每個(gè)算法預(yù)測(cè)結(jié)果
faces_pre = dict()
for key,estimator in estimators.items():
    # 對(duì)算法進(jìn)行模型訓(xùn)練
    estimator.fit(x_train,y_train)
    # 預(yù)測(cè)
    y_ = estimator.predict(x_test)
    # 把預(yù)測(cè)的結(jié)果保存
    faces_pre[key] = y_
    # 得分
    score = estimator.score(x_test, y_test)
    print(key, score)
knn 0.4880642098170732
linear 0.18894319531680143
ridge 0.5157197923145055
lasso -0.2100687498661858
extra 0.35087195680524175
faces_pre['knn']
array([[0.4471074 , 0.41652894, 0.42066115, ..., 0.54793394, 0.5355372 ,
        0.546281  ],
       [0.34876034, 0.34214878, 0.346281  , ..., 0.42727274, 0.42809922,
        0.43057853],
       [0.5355372 , 0.546281  , 0.58016527, ..., 0.56611574, 0.56280994,
        0.5644628 ],
       ...,
       [0.64793384, 0.67685956, 0.7049587 , ..., 0.41487604, 0.3586777 ,
        0.36776862],
       [0.3942149 , 0.41322312, 0.43553716, ..., 0.45785123, 0.43471074,
        0.39173552],
       [0.47520667, 0.47024792, 0.51404965, ..., 0.631405  , 0.6256199 ,
        0.59173554]], dtype=float32)

不同模型預(yù)測(cè)的人臉結(jié)果與實(shí)際的對(duì)比

import numpy as np
plt.figure(figsize=(6*3,8*3))
for i in range(8):
    axes = plt.subplot(8,6,i*6+1)
    axes.axis('off')
    face_up = x_test[i]
    face_down = y_test[i]
    face = np.concatenate([face_up,face_down])
    axes.imshow(face.reshape((64,64)),cmap='gray')
    if i==0:
        axes.set_title('True')
    # 把機(jī)器學(xué)習(xí)預(yù)測(cè)出來(lái)的下半邊臉和上半邊臉拼接
    for j,key in enumerate(faces_pre):
        axes = plt.subplot(8,6,i*6+2+j)
        axes.axis('off')
        if i==0:
            axes.set_title(key)
        face_up = x_test[i]
        y_pre = faces_pre[key]
        face_down_pre = y_pre[i]
        
        face =np.concatenate([face_up,face_down_pre])
        axes.imshow(face.reshape((64,64)),cmap='gray')
圖片
請(qǐng)?zhí)砑訄D片描述

通過(guò)對(duì)比發(fā)現(xiàn),上述案例中通過(guò)KNN預(yù)測(cè)的結(jié)果的臉型要好一些只是有明顯的分界線,需要進(jìn)一步處理,線性回歸與嶺回歸預(yù)測(cè)的結(jié)果沒(méi)有明顯分界線,但是實(shí)際預(yù)測(cè)效果沒(méi)有那么好;lasso回歸,極端隨機(jī)森林預(yù)測(cè)出的人臉結(jié)果不理想。

如果內(nèi)容對(duì)你有幫助,感謝點(diǎn)贊+關(guān)注哦!

end



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多