Menu
CoddyTech

Atalet

Coddy'nin Machine Learning Journey'sinin Denetimsiz Öğrenme bölümünün bir parçası. Ders 6 / 51.

Bu bölüm k seçimiyle ilgilidir. Bölümün sonunda, bir fırının teslimatları için k değerini seçecek ve bölgeleri haritalandıracaksın:

Bir şehrin teslimat duraklarının haritası; doğu yönü km cinsinden yatayda, kuzey yönü metre cinsinden dikeyde gösterilmiştir. 45, 40 ve 25 duraktan oluşan üç bölgeye ayrılmıştır ve her bölgenin ortasında siyah bir yıldız vardır

Önce bir puan. Atalet, her noktanın kendi merkezine olan uzaklığının karesini toplar: noktalar merkezlerine yakın olduğunda değer küçüktür.

Üç gruptaki 36 elmanın her biri, grubun siyah yıldız şeklindeki merkezine ince gri bir çizgiyle bağlı. Atalet, her çizginin uzunluğunun karesini alır ve hepsini toplar

KMeans bunu inertia_ içinde tutar. 180 elma için:

for k in [1, 2, 3, 4]:
    km = KMeans(n_clusters=k, n_init=10, random_state=0)
    km.fit(X)
    print(k, round(km.inertia_))

Bu, şunu yazdırır:

1 1718
2 752
3 230
4 196

Daha fazla merkez, daha kısa kollar: k arttıkça inertia her zaman azalır. Her nokta için bir merkez olduğunda 0 olur; bu nedenle en küçük değer en iyisi değildir.

challenge icon

Görev

Kolay

Bir seramik atölyesi vazoları birkaç boyutta üretilen kutulara paketler. Her vazo en yakın boyuttaki kutuya yerleştirilir; atalet, ne kadar kötü eşleştiklerini ölçer. Program, seramik atölyesinin kabul ettiği en yüksek uyumsuzluk olan budget değerini okur.

  1. k = 1, 2, 3 ve böyle devam ederek dene: vases üzerinde KMeans'i uydur ve her k için ataleti yuvarlanmış olarak yazdır.
  2. Ataleti bütçe dahilinde olan ilk k değerinde dur ve bu değeri yazdır.

Başka bir seramik atölyesi için:

k = 1, inertia 15120
k = 2, inertia 4811
k = 3, inertia 1290
Box sizes needed: 3

Kendin dene

import numpy as np
from sklearn.cluster import KMeans

# Aşağıdaki satırları değiştirmeyin
rng = np.random.default_rng(8)
# Dört vazo türü: cm cinsinden tipik yükseklik ve genişlikleri ile her türden kaç tane olduğu
kinds = [(15, 8, 25), (38, 13, 25), (22, 22, 20), (58, 26, 10)]
parts = []
for h, w, n in kinds:
    parts.append(np.column_stack([rng.normal(h, 2.5, n), rng.normal(w, 2, n)]))
# 80 vazo, her biri bir satırda: cm cinsinden yükseklik ve genişlik
vases = np.round(np.concatenate(parts), 1)

# Çömlek atölyesinin inertia olarak kabul ettiği en yüksek uyumsuzluk
budget = int(input())

# Kodunuzu aşağıya yazın
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Denetimsiz Öğrenme bölümündeki tüm dersler

Kendi başına pratik yap: Online Python derleyicisi