Menu
CoddyTech

StandardScaler

Fa parte della sezione Statistica per il machine learning del percorso Machine Learning di Coddy. Lezione 50 di 64.

Un modello deve scalare ogni nuovo campione esattamente come ha scalato i dati di addestramento. StandardScaler di scikit-learn standardizza e ricorda come:

Un diagramma: i 4 lavori passati di un lavavetri, X_train, passano attraverso fit in uno scaler che ricorda mean_ 8 e 22 e scale_ 4.47 e 9.72. Un nuovo lavoro, 8 e 30, passa attraverso transform, usando quei numeri, e diventa 0.00 e 0.82

Nel codice, per ogni lavoro vengono pulite le finestre e vengono registrati i minuti impiegati:

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]])  # un campione: una tabella con una riga
print(np.round(scaler.transform(X_new), 2))

Stampa questo:

[[0.   0.82]]

fit apprende la media e la deviazione standard di ogni colonna (dividendo per n, come np.std), che vengono conservate in scaler.mean_ e scaler.scale_. transform le applica.

Non eseguire mai il fit su nuovi dati: il job avrebbe la propria media e diventerebbe [[0. 0.]]. Sui dati di addestramento, fit_transform esegue entrambe le operazioni con una sola chiamata.

challenge icon

Sfida

Medio

Un classificatore è stato addestrato sugli avocado in X_train: peso, consistenza e giorni dalla raccolta. Il programma legge un nuovo avocado nella tabella di una riga new_avocado, ma la scalatura iniziale stampa [[0. 0. 0.]] per ogni avocado.

  1. Correggila: scala il nuovo avocado usando le medie e le deviazioni standard dei dati di addestramento.
  2. Conta le misurazioni che si discostano di più di 2 deviazioni standard dalla media dei dati di addestramento, in entrambe le direzioni, e stampa come sotto.

Per un altro lotto:

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

Provalo tu

import numpy as np
from sklearn.preprocessing import StandardScaler

# Training avocados, one row each: weight in grams, firmness from 1 to 10, days since harvest
X_train = np.array([[210, 8, 2],
                    [185, 5, 6],
                    [240, 7, 3],
                    [170, 3, 9],
                    [225, 6, 5],
                    [195, 4, 7]])
# A new avocado on the belt
weight = float(input())
firmness = float(input())
days = float(input())
new_avocado = np.array([[weight, firmness, days]])

# This prints [[0. 0. 0.]] for every avocado: fix it
scaler = StandardScaler()
scaled = scaler.fit_transform(new_avocado)
print("New avocado:", np.round(scaled, 2))

# Write your code below
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Statistica per il machine learning

Esercitati da solo: Compilatore Python online