Ex 7: Face completion with a multi-output estimators

通用範例/範例七: Face completion with a multi-output estimators

http://scikit-learn.org/stable/auto_examples/plot_multioutput_face_completion.html

這個範例用來展示scikit-learn如何用 extremely randomized trees, k nearest neighbors, linear regressionridge regression 演算法來完成人臉估測。

(一)引入函式庫及內建影像資料庫

引入之函式庫如下

  1. sklearn.datasets: 用來繪入內建之影像資料庫

  2. sklearn.utils.validation: 用來取亂數

  3. sklearn.ensemble

  4. sklearn.neighbors

  5. sklearn.linear_model

使用 datasets.load_digits() 將資料存入, data 為一個dict型別資料,我們看一下資料的內容。

from sklearn.datasets import fetch_olivetti_faces
data = fetch_olivetti_faces()
targets = data.target
data = data.images.reshape((len(data.images), -1))

顯示

說明

('images', (400, 64, 64))

共有40個人,每個人各有10張影像,共有 400 張影像,影像大小為 64x64

('data', (400, 4096))

data 則是將64x64的矩陣攤平成4096個元素之一維向量

('targets', (400,))

說明400張圖與40個人之分類對應 0-39,記錄每張影像是哪一個人

DESCR

資料之描述

前面30個人當訓練資料,之後當測試資料

測試影像從100張亂數選5張出來,變數test的大小變成(5,4096)

把每張訓練影像和測試影像都切割成上下兩部分:

X人臉上半部分, Y人臉下半部分。

(二)資料訓練

分別用以下四種演算法來完成人臉下半部估測

  1. extremely randomized trees (絕對隨機森林演算法)

  2. k nearest neighbors (K-鄰近演算法)

  3. linear regression (線性回歸演算法)

  4. ridge regression (脊回歸演算法)

分別把訓練資料人臉上、下部分放入estimator.fit()中進行訓練。上半部分人臉為條件影像,下半部人臉為目標影像。

y_test_predict為一個dict型別資料,存放5位測試者分別用四種演算法得到的人臉下半部估計結果。

(三)matplotlib.pyplot畫出結果

每張影像都是64*64,總共有5位測試者,每位測試者分別有1張原圖,加上使用4種演算法得到的估測結果。

Last updated