تعلم القاموس عبر الإنترنت لأجزاء الوجوه#

يستخدم هذا المثال مجموعة كبيرة من الوجوه لتعلم مجموعة من الصور مقاس 20x20 التي تشكل الوجوه.

من وجهة نظر البرمجة، إنه مثير للاهتمام لأنه يظهر كيفية استخدام واجهة برمجة التطبيقات عبر الإنترنت لـ scikit-learn لمعالجة مجموعة كبيرة جدًا من البيانات على شكل أجزاء. الطريقة التي نتبعها هي أننا نحمل صورة في كل مرة ونستخرج عشوائيًا 50 رقعة من هذه الصورة. بمجرد أن نكون قد جمعنا 500 من هذه الرقع (باستخدام 10 صور)، فإننا نستخدم طريقة partial_fit للكائن KMeans عبر الإنترنت، MiniBatchKMeans.

يسمح الإعداد المفصل على MiniBatchKMeans برؤية أنه يتم إعادة تعيين بعض المجموعات أثناء المكالمات المتتالية لـ partial-fit. هذا لأن عدد الرقع التي تمثلها أصبح منخفضًا للغاية، ومن الأفضل اختيار مجموعة جديدة عشوائية.

# المؤلفون: مطوري scikit-learn
# معرف SPDX-License: BSD-3-Clause

تحميل البيانات#

from sklearn import datasets

faces = datasets.fetch_olivetti_faces()
downloading Olivetti faces from https://ndownloader.figshare.com/files/5976027 to /root/scikit_learn_data

تعلم قاموس الصور#

import time

import numpy as np

from sklearn.cluster import MiniBatchKMeans
from sklearn.feature_extraction.image import extract_patches_2d

print("Learning the dictionary... ")
rng = np.random.RandomState(0)
kmeans = MiniBatchKMeans(n_clusters=81, random_state=rng, verbose=True, n_init=3)
patch_size = (20, 20)

buffer = []
t0 = time.time()

# جزء التعلم عبر الإنترنت: دورة عبر مجموعة البيانات الكاملة 6 مرات
index = 0
for _ in range(6):
    for img in faces.images:
        data = extract_patches_2d(img, patch_size, max_patches=50, random_state=rng)
        data = np.reshape(data, (len(data), -1))
        buffer.append(data)
        index += 1
        if index % 10 == 0:
            data = np.concatenate(buffer, axis=0)
            data -= np.mean(data, axis=0)
            data /= np.std(data, axis=0)
            kmeans.partial_fit(data)
            buffer = []
        if index % 100 == 0:
            print("Partial fit of %4i out of %i" % (index, 6 * len(faces.images)))

dt = time.time() - t0
print("done in %.2fs." % dt)
Learning the dictionary...
[MiniBatchKMeans] Reassigning 8 cluster centers.
[MiniBatchKMeans] Reassigning 5 cluster centers.
Partial fit of  100 out of 2400
[MiniBatchKMeans] Reassigning 3 cluster centers.
Partial fit of  200 out of 2400
[MiniBatchKMeans] Reassigning 1 cluster centers.
Partial fit of  300 out of 2400
[MiniBatchKMeans] Reassigning 3 cluster centers.
Partial fit of  400 out of 2400
Partial fit of  500 out of 2400
Partial fit of  600 out of 2400
Partial fit of  700 out of 2400
Partial fit of  800 out of 2400
Partial fit of  900 out of 2400
Partial fit of 1000 out of 2400
Partial fit of 1100 out of 2400
Partial fit of 1200 out of 2400
Partial fit of 1300 out of 2400
Partial fit of 1400 out of 2400
Partial fit of 1500 out of 2400
Partial fit of 1600 out of 2400
Partial fit of 1700 out of 2400
Partial fit of 1800 out of 2400
Partial fit of 1900 out of 2400
Partial fit of 2000 out of 2400
Partial fit of 2100 out of 2400
Partial fit of 2200 out of 2400
Partial fit of 2300 out of 2400
Partial fit of 2400 out of 2400
done in 1.62s.

رسم النتائج#

import matplotlib.pyplot as plt

plt.figure(figsize=(4.2, 4))
for i, patch in enumerate(kmeans.cluster_centers_):
    plt.subplot(9, 9, i + 1)
    plt.imshow(patch.reshape(patch_size), cmap=plt.cm.gray, interpolation="nearest")
    plt.xticks(())
    plt.yticks(())


plt.suptitle(
    "Patches of faces\nTrain time %.1fs on %d patches" % (dt, 8 * len(faces.images)),
    fontsize=16,
)
plt.subplots_adjust(0.08, 0.02, 0.92, 0.85, 0.08, 0.23)

plt.show()
Patches of faces Train time 1.6s on 3200 patches

Total running time of the script: (0 minutes 3.866 seconds)

Related examples

مقارنة خوارزميات التجميع K-Means و MiniBatchKMeans

مقارنة خوارزميات التجميع K-Means و MiniBatchKMeans

إزالة تشويش الصور باستخدام تعلم القاموس

إزالة تشويش الصور باستخدام تعلم القاموس

تجميع الميزات

تجميع الميزات

تجميع مستندات النص باستخدام k-means

تجميع مستندات النص باستخدام k-means

Gallery generated by Sphinx-Gallery