forked from pms/uczenie-maszynowe
4.7 KiB
4.7 KiB
Uczenie maszynowe — laboratoria
Korzystanie z gotowych implementacji algorytmów na przykładzie pakietu _scikit-learn
Scikit-learn jest otwartoźródłową biblioteką programistyczną dla języka Python wspomagającą uczenie maszynowe. Zawiera implementacje wielu algorytmów uczenia maszynowego.
Poniżej przykład, jak stworzyć klasyfikator regresji liniowej wielu zmiennych z użyciem scikit-learn
.
Na podobnej zasadzie można korzystać z innych modeli dostępnych w bibliotece.
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression # Model regresji liniowej z biblioteki scikit-learn
from sklearn.metrics import mean_squared_error
FEATURES = [
'Powierzchnia w m2',
'Liczba pokoi',
'Liczba pięter w budynku',
'Piętro',
'Rok budowy',
'ładne w opisie'
]
def preprocess(data):
"""Wstępne przetworzenie danych, np. zamiana wartości tekstowych na liczby"""
data = data.replace({'parter': 0, 'poddasze': 0}, regex=True)
data = data.applymap(np.nan_to_num) # Zamienia "NaN" na liczby
return data
# Nazwy plików
dataset_filename = 'flats.tsv'
# Wczytanie danych
data = pd.read_csv(dataset_filename, header=0, sep='\t')
# Jeżeli chcemy, możemy stworzyć nową cechę (kolumnę) na podstawie istniejącej
# Poniższa cecha mówi, czy kolumna "opis" zawiera słowo "ładne"
data['ładne w opisie'] = data['opis'].apply(
lambda x: True if 'ładne' in str(x) else False)
data = data[FEATURES + ['cena']] # wybór cech
data = data[(data["Powierzchnia w m2"] < 10000) & (data["cena"] > 1000)] # Odrzucenie obserwacji odstających
data = preprocess(data) # wstępne przetworzenie danych
# Podział danych na zbiory uczący i testowy
split_point = int(0.8 * len(data))
data_train = data[:split_point]
data_test = data[split_point:]
# Uczenie modelu
y_train = pd.DataFrame(data_train['cena'])
x_train = pd.DataFrame(data_train[FEATURES])
model = LinearRegression() # definicja modelu
model.fit(x_train, y_train) # dopasowanie modelu
# Predykcja wyników dla danych testowych
y_expected = pd.DataFrame(data_test['cena'])
x_test = pd.DataFrame(data_test[FEATURES])
y_predicted = model.predict(x_test) # predykcja wyników na podstawie modelu
print(y_predicted[:10]) # Pierwsze 10 wyników
# Ewaluacja
mse = mean_squared_error(y_predicted, y_expected) # Błąd średniokwadratowy na zbiorze testowym
print("Błąd średniokwadratowy wynosi ", mse)
[[302322.47270869] [283694.74995925] [276290.72977935] [477362.89530745] [420862.62245119] [312510.3868097 ] [362445.20969959] [335753.83506582] [759239.88142398] [684376.72797254]] Błąd średniokwadratowy wynosi 29811493540.217434
Biblioteka _scikit-learn dostarcza również narzędzi do wstępnego przetwarzania danych, np. skalowania i normalizacji: https://scikit-learn.org/stable/modules/preprocessing.html