Menu
CoddyTech

Drzewa zadają pytania

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

Ten rozdział kończy się drzewem, które wyjaśnia, czy przyznać pożyczkę rolniczą. Drzewo decyzyjne zadaje pytania jak w grze w dwadzieścia pytań: za każdym razem jedno pytanie o cechę, na które można odpowiedzieć tak lub nie, aż do uzyskania odpowiedzi:

Diagram drzewa. Górne pole pyta: czy szerokość płatka wynosi 0,8 cm lub mniej? Odpowiedź tak prowadzi do setosa. Odpowiedź nie prowadzi do drugiego pola: czy długość płatka wynosi 4,95 cm lub mniej? Odpowiedź tak prowadzi do versicolor, a odpowiedź nie do virginica

Podczas trenowania każde pytanie jest wybierane tak, aby jego odpowiedzi dzieliły klasy możliwie najczyściej:

from sklearn.tree import DecisionTreeClassifier

tree = DecisionTreeClassifier(max_depth=2, random_state=0)
tree.fit(X_train, y_train)  # długość i szerokość płatka, cm
print(tree.predict([[4.5, 1.4]]))

To wypisuje [1], versicolor. max_depth=2 pozwala na dwa pytania na ścieżkę. Skalowanie nie jest potrzebne: każde pytanie odczytuje jedną cechę.

challenge icon

Wyzwanie

Średni

Wypożyczalnia sprzętu fotograficznego wysyła przypomnienie, gdy sprzęt może wrócić z opóźnieniem. Kod początkowy dzieli dane o wcześniejszych wypożyczeniach i wczytuje nowe wypożyczenie do tabeli z jednym wierszem new_rental.

  1. Wytrenuj drzewo decyzyjne z maksymalnie 2 pytaniami na ścieżkę (random_state=0).
  2. Wypisz jego dokładność testową (3 miejsca po przecinku) oraz odpowiedź dla nowego wypożyczenia: likely late dla 1, likely on time dla 0.

Dla innej wypożyczalni:

Test accuracy: 0.792
This rental: likely on time

Spróbuj swoich sił

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# Poprzednie wypożyczenia: 1 w late oznacza, że sprzęt zwrócono po terminie
rentals = pd.read_csv("rentals.csv")
features = ["rental_weeks", "gear_value_usd", "customer_age", "late_before"]
X_train, X_test, y_train, y_test = train_test_split(rentals[features], rentals["late"], test_size=0.25, random_state=0)

# Nowe wypożyczenie: liczba zarezerwowanych tygodni, wartość sprzętu, wiek klienta i liczba jego dotychczasowych zwrotów po terminie
weeks = int(input())
value = int(input())
age = int(input())
late_before = int(input())
new_rental = pd.DataFrame([[weeks, value, age, late_before]], columns=features)

# 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 Uczenie nadzorowane

Poćwicz samodzielnie: Kompilator Python online