Menu
CoddyTech

Dlaczego skalować cechy

Część sekcji Statystyka w uczeniu maszynowym ścieżki Machine Learning w Coddy. Lekcja 47 z 64.

Który klient jest najbardziej podobny do nowego? Wiele modeli mierzy odległość między próbkami: podnosi różnicę każdej cechy do kwadratu, sumuje je i oblicza pierwiastek kwadratowy.

Osoba w wieku 25 lat zarabiająca 52 000 $ w porównaniu z osobą w wieku 61 lat zarabiającą 53 000 $:

Dwa słupki pokazujące, ile każda cecha wnosi do odległości między tymi dwoma klientami: wiek, różnica 36 lat, wnosi 1296, pasek tak cienki, że go nie widać; dochód, różnica 1000 $, wnosi 1 000 000, długi pasek

Dla całej tablicy axis=1 sumuje kwadraty w każdym wierszu, a .argmin() znajduje najbliższy wiersz:

a = np.array([25, 52000])  # wiek, dochód
X = np.array([[61, 53000],   # 61-latek
              [26, 55000]])  # 26-latek zarabiający $55,000
dists = np.sqrt(((X - a) ** 2).sum(axis=1))
print(np.round(dists, 2))
print(dists.argmin())

To wyświetla:

[1000.65 3000.  ]
0

Osoba w wieku 61 lat jest najbliżej: kwoty w dolarach mają większe wartości liczbowe, więc $1,000 przeważa nad 36 latami. Bez skalowania decydują największe jednostki.

Ten rozdział daje każdej funkcji równą szansę.

challenge icon

Wyzwanie

Średni

Sklep porównuje pralki pod względem ceny ($), zużycia energii (kWh rocznie) i wody (litry na jedno pranie), wymienionych w features. Program odczytuje pozycje dwóch pralek, i i j. Wypisz:

  1. Squared gaps: różnicę dla każdej cechy, podniesioną do kwadratu.
  2. Distance: zaokrągloną do 2 miejsc po przecinku.
  3. Dominant feature: nazwę cechy z największą różnicą podniesioną do kwadratu.

Dla dwóch innych pralek:

Squared gaps: [2500 6400    1]
Distance: 94.35
Dominant feature: energy

Spróbuj swoich sił

import numpy as np

features = ["price", "energy", "water"]
# Jeden wiersz na pralkę: cena w dolarach, zużycie energii w kWh rocznie, zużycie wody w litrach na jedno pranie
machines = np.array([[499, 160, 48],
                     [349, 210, 55],
                     [899, 120, 42],
                     [529, 250, 50],
                     [279, 230, 60],
                     [749, 140, 45]])
i = int(input())
j = int(input())

# Wpisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Statystyka w uczeniu maszynowym

Poćwicz samodzielnie: Kompilator Python online