Menu
CoddyTech

StandardScaler

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

Model musi skalować każdą nową próbkę dokładnie tak samo, jak skalował dane treningowe. StandardScaler z biblioteki scikit-learn standaryzuje dane i zapamiętuje sposób skalowania:

Schemat: 4 poprzednie zlecenia mycia okien, X_train, przechodzą przez fit do skalera, który zapamiętuje mean_ 8 i 22 oraz scale_ 4.47 i 9.72. Nowe zlecenie, 8 i 30, przechodzi przez transform z użyciem tych liczb i uzyskuje wartości 0.00 i 0.82

W kodzie każde zlecenie jest opisane liczbą umytych okien i poświęconych minut:

from sklearn.preprocessing import StandardScaler

X_train = np.array([[2, 8], [10, 25], [6, 20], [14, 35]])
scaler = StandardScaler()
scaler.fit(X_train)
X_new = np.array([[8, 30]])  # jedna próbka: tabela z jednym wierszem
print(np.round(scaler.transform(X_new), 2))

To wyświetla:

[[0.   0.82]]

fit oblicza średnią i odchylenie standardowe każdej kolumny (dzieląc przez n, tak jak np.std), które są przechowywane w scaler.mean_ i scaler.scale_. transform stosuje te wartości.

Nigdy nie dopasowuj do nowych danych: ich średnia byłaby równa im samym, a wynik wyniósłby [[0. 0.]]. Na danych treningowych fit_transform wykonuje obie te czynności w jednym wywołaniu.

challenge icon

Wyzwanie

Średni

Sorter nauczył się na awokado ze zbioru X_train: wagi, jędrności i liczby dni od zbioru. Program wczytuje nowe awokado do jednowierszowej tablicy new_avocado, ale skalowanie w kodzie startowym wypisuje [[0. 0. 0.]] dla każdego awokado.

  1. Napraw to: przeskaluj nowe awokado, używając średnich i odchyleń standardowych ze zbioru treningowego.
  2. Policz jego pomiary, które różnią się od średniej treningowej o więcej niż 2 odchylenia standardowe w dowolnym kierunku, i wypisz wynik jak poniżej.

Dla kolejnej partii:

New avocado: [[2.98 0.   0.09]]
1 of 3 measurements are more than 2 std from the training avocados

Spróbuj swoich sił

import numpy as np
from sklearn.preprocessing import StandardScaler

# Awokado w zbiorze treningowym, po jednym w każdym wierszu: masa w gramach, twardość od 1 do 10, liczba dni od zbioru
X_train = np.array([[210, 8, 2],
                    [185, 5, 6],
                    [240, 7, 3],
                    [170, 3, 9],
                    [225, 6, 5],
                    [195, 4, 7]])
# Nowe awokado na taśmie
weight = float(input())
firmness = float(input())
days = float(input())
new_avocado = np.array([[weight, firmness, days]])

# To wypisuje [[0. 0. 0.]] dla każdego awokado: popraw to
scaler = StandardScaler()
scaled = scaler.fit_transform(new_avocado)
print("New avocado:", np.round(scaled, 2))

# Napisz 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