Menu
CoddyTech

Potoki

Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 45 z 58.

Rzeczywiste tabele zawierają braki, słowa i różne skale. W tym rozdziale zbudujesz jeden obiekt, który je czyści i przewiduje — potok:

Schemat zatytułowany: Surowe kolumny na wejściu, przewidywania na wyjściu. Liczby z brakami biegną jednym torem, SimpleImputer uzupełnia braki, a następnie pojawia się StandardScaler. Słowa biegną drugim torem, a OneHotEncoder zamienia je na zera i jedynki. Oba tory łączą się przy modelu. Przerywana ramka wokół kroków zawiera napis: jeden potok — dopasuj go, a następnie przewiduj

Zacznij od małego kroku: make_pipeline łączy skalowanie i model:

from sklearn.pipeline import make_pipeline

pipe = make_pipeline(StandardScaler(), KNeighborsClassifier())
pipe.fit(X_train, y_train)
print(pipe.score(X_test, y_test))

Dla 200 spawów testowych, mocnych lub słabych, wyświetla to 0.86 w porównaniu z 0.74 bez skalowania.

fit uczy się skalowania na podstawie wierszy treningowych, a następnie trenuje. Każdy kolejny wiersz jest automatycznie skalowany w ten sam sposób.

challenge icon

Wyzwanie

Średni

Firma balonowa każdego wieczoru decyduje, czy jutro będzie dzień lotów. Starter skaluje dane ręcznie: dokładność testowa jest dobra, ale prognoza nigdy nie jest skalowana, więc dla każdej pogody zwraca yes.

  1. Zastąp go potokiem: najpierw skalowanie, potem k-NN, dopasowanym do wierszy treningowych.
  2. Wypisz jego dokładność testową i oceń za jego pomocą prognozę.

Inna firma, dzień 20, 32, 7000, 9:

Test accuracy: 0.880
Flying day: no

Spróbuj swoich sił

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline

# Minione dni w firmie organizującej loty balonem: dzień z lotami (1) lub bez lotów (0)
days = pd.read_csv("balloons.csv")
X = days[["wind_kmh", "gusts_kmh", "visibility_m", "passengers"]].to_numpy()
y = days["flying_day"].to_numpy()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

# Prognoza na jutro: wiatr, porywy wiatru, widoczność, liczba zarezerwowanych pasażerów
day = np.array([[float(input()), float(input()), float(input()), float(input())]])

# Ręczne skalowanie: wynik wygląda dobrze, ale dane z prognozy nigdy nie są skalowane
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
model = KNeighborsClassifier()
model.fit(X_train_scaled, y_train)
print(f"Test accuracy: {model.score(X_test_scaled, y_test):.3f}")
if model.predict(day)[0] == 1:
    print("Flying day: yes")
else:
    print("Flying day: no")
quiz iconSprawdź się

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

Wszystkie lekcje w sekcji Uczenie nadzorowane

Poćwicz samodzielnie: Kompilator Python online