Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2017 (14.x) i nowsze wersje
usługi Azure SQL Managed Instance
W trzeciej części tej pięcioczęściowej serii samouczków dowiesz się, jak tworzyć funkcje na podstawie danych pierwotnych przy użyciu funkcji Transact-SQL. Następnie wywołasz tę funkcję z procedury składowanej SQL, aby utworzyć tabelę zawierającą wartości funkcji.
Proces inżynierii cech, tworzenie funkcji na podstawie danych pierwotnych, może być krytycznym krokiem w zaawansowanym modelowaniu analiz.
W tym artykule dowiesz się:
- Modyfikowanie funkcji niestandardowej w celu obliczenia odległości podróży
- Zapisz cechy przy użyciu innej funkcji niestandardowej
W części 1 zainstalowano wymagania wstępne i przywrócono przykładową bazę danych.
W drugiej części zapoznaliśmy się z przykładowymi danymi i wygenerowaliśmy niektóre wykresy.
W czwartej części załadujesz moduły i wywołasz niezbędne funkcje, aby utworzyć i wytrenować model przy użyciu procedury składowanej programu SQL Server.
W części piątej dowiesz się, jak operacjonalizować modele, które zostały wytrenowane i zapisane w części czwartej.
Definiowanie funkcji
Wartości odległości zgłoszone w oryginalnych danych są oparte na zgłoszonej odległości miernika i nie muszą reprezentować odległości geograficznej ani odległości podróży. W związku z tym należy obliczyć bezpośrednią odległość między punktami pick-up i drop-off, używając współrzędnych dostępnych w źródłowym zestawie danych NYC Taxi. Można to zrobić przy użyciu formuły Haversine w niestandardowej funkcji Transact-SQL.
Użyjesz jednej niestandardowej funkcji języka T-SQL, fnCalculateDistance, aby obliczyć odległość przy użyciu formuły Haversine i użyć drugiej niestandardowej funkcji języka T-SQL, fnEngineerFeatures, aby utworzyć tabelę zawierającą wszystkie funkcje.
Oblicz odległość podróży przy użyciu fnCalculateDistance
Funkcja fnCalculateDistance jest zawarta w przykładowej bazie danych. Pośmiń chwilę na przejrzenie kodu:
W programie Management Studio rozwiń Programowalność, rozwiń Funkcje, a następnie Funkcje wartości skalarnych.
Kliknij prawym przyciskiem myszy pozycję fnCalculateDistance i wybierz polecenie Modyfikuj , aby otworzyć skrypt Transact-SQL w nowym oknie zapytania.
Powinna to wyglądać następująco:
CREATE FUNCTION [dbo].[fnCalculateDistance] (@Lat1 float, @Long1 float, @Lat2 float, @Long2 float) -- User-defined function that calculates the direct distance between two geographical coordinates RETURNS float AS BEGIN DECLARE @distance decimal(28, 10) -- Convert to radians SET @Lat1 = @Lat1 / 57.2958 SET @Long1 = @Long1 / 57.2958 SET @Lat2 = @Lat2 / 57.2958 SET @Long2 = @Long2 / 57.2958 -- Calculate distance SET @distance = (SIN(@Lat1) * SIN(@Lat2)) + (COS(@Lat1) * COS(@Lat2) * COS(@Long2 - @Long1)) --Convert to miles IF @distance <> 0 BEGIN SET @distance = 3958.75 * ATAN(SQRT(1 - POWER(@distance, 2)) / @distance); END RETURN @distance END GO
Uwagi:
- Funkcja jest funkcją skalarną zwracającą pojedynczą wartość danych wstępnie zdefiniowanego typu.
- Funkcja przyjmuje wartości szerokości i długości geograficznej jako danymi wejściowymi, uzyskanymi z lokalizacji miejsca odbioru i miejsca wysiadania. Formuła Haversine konwertuje lokalizacje na radiany i używa tych wartości do obliczenia bezpośredniej odległości w milach między tymi dwiema lokalizacjami.
Zapisywanie funkcji przy użyciu narzędzia fnEngineerFeatures
Aby dodać obliczoną wartość do tabeli, która może służyć do trenowania modelu, użyjesz niestandardowej funkcji T-SQL fnEngineerFeatures. Ta funkcja jest funkcją z wartością tabeli, która przyjmuje wiele kolumn jako danych wejściowych i generuje tabelę z wieloma kolumnami funkcji. Celem tej funkcji jest utworzenie zestawu funkcji do użycia w tworzeniu modelu. Funkcja fnEngineerFeatures wywołuje wcześniej utworzoną funkcję T-SQL, fnCalculateDistance, aby uzyskać bezpośrednią odległość między lokalizacjami odbioru i dropoff.
Pośmiń chwilę na przejrzenie kodu:
CREATE FUNCTION [dbo].[fnEngineerFeatures] (
@passenger_count int = 0,
@trip_distance float = 0,
@trip_time_in_secs int = 0,
@pickup_latitude float = 0,
@pickup_longitude float = 0,
@dropoff_latitude float = 0,
@dropoff_longitude float = 0)
RETURNS TABLE
AS
RETURN
(
-- Add the SELECT statement with parameter references here
SELECT
@passenger_count AS passenger_count,
@trip_distance AS trip_distance,
@trip_time_in_secs AS trip_time_in_secs,
[dbo].[fnCalculateDistance](@pickup_latitude, @pickup_longitude, @dropoff_latitude, @dropoff_longitude) AS direct_distance
)
GO
Aby sprawdzić, czy ta funkcja działa, można użyć jej do obliczenia odległości geograficznej dla tych podróży, w których mierzona odległość wynosiła 0, ale lokalizacje odbioru i drop-off były inne.
SELECT tipped, fare_amount, passenger_count,(trip_time_in_secs/60) as TripMinutes,
trip_distance, pickup_datetime, dropoff_datetime,
dbo.fnCalculateDistance(pickup_latitude, pickup_longitude, dropoff_latitude, dropoff_longitude) AS direct_distance
FROM nyctaxi_sample
WHERE pickup_longitude != dropoff_longitude and pickup_latitude != dropoff_latitude and trip_distance = 0
ORDER BY trip_time_in_secs DESC
Jak widać, odległość zgłoszona przez miernik nie zawsze odpowiada odległości geograficznej. Dlatego inżynieria cech jest ważna.
W następnej części dowiesz się, jak używać tych funkcji danych do tworzenia i trenowania modelu uczenia maszynowego przy użyciu języka Python.
Dalsze kroki
W tym artykule dowiesz się:
- Zmodyfikowano funkcję niestandardową w celu obliczenia odległości podróży
- Zapisano funkcje przy użyciu innej funkcji niestandardowej