Spec-Zone.ru › Polars

polars.DataFrame.to_torch

DataFrame.to_torch(
    return_type: TorchExportType = 'tensor',
    *,
    label: str | Expr | Sequence[str | Expr] | None = None,
    features: str | Expr | Sequence[str | Expr] | None = None,
    dtype: PolarsDataType | None = None,
) → torch.Tensor | dict[str, torch.Tensor] | PolarsDataset

Преобразует DataFrame в тензор PyTorch, Dataset или словарь тензоров.

Добавлено в версии 0.20.23.

Предупреждение

В настоящее время эта функциональность считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось несовместимым изменением.

Параметры:
return_type{“tensor”, “dataset”, “dict”}

Задаёт тип возвращаемого значения: тензор PyTorch, PolarsDataset (TensorDataset, специализированный для фреймов) или словарь тензоров.

label

Одно или несколько имён столбцов, выражений или селекторов, задающих данные меток; если return_type равно «dataset», PolarsDataset будет возвращать (features, label) кортежи тензоров для каждой строки. В противном случае он возвращает (features,) кортежи тензоров, в которых признаки содержат все данные строки.

features

Одно или несколько имён столбцов, выражений или селекторов, содержащих данные признаков; если параметр не указан, используются все столбцы, не назначенные метками.

dtype

Приводит dtype всех возвращаемых тензоров к единому типу; перед преобразованием в Tensor столбцы, тип которых не совпадает с требуемым, приводятся к нему. Это относится и к столбцу меток, если только метка не является выражением (например, pl.col("label_column").cast(pl.Int16)).

См. также

to_dummies
to_jax
to_numpy

Примеры

>>> df = pl.DataFrame(
...     {
...         "lbl": [0, 1, 2, 3],
...         "feat1": [1, 0, 0, 1],
...         "feat2": [1.5, -0.5, 0.0, -2.25],
...     }
... )

Стандартный тип возвращаемого значения (Tensor) с супертипом f32:

>>> df.to_torch(dtype=pl.Float32)
tensor([[ 0.0000,  1.0000,  1.5000],
        [ 1.0000,  0.0000, -0.5000],
        [ 2.0000,  0.0000,  0.0000],
        [ 3.0000,  1.0000, -2.2500]])

В виде словаря отдельных тензоров:

>>> df.to_torch("dict")
{'lbl': tensor([0, 1, 2, 3]),
 'feat1': tensor([1, 0, 0, 1]),
 'feat2': tensor([ 1.5000, -0.5000,  0.0000, -2.2500], dtype=torch.float64)}

В виде словаря «label» и «features»; обратите внимание: поскольку «features» не задан, по умолчанию используются все столбцы, которых нет в «label»:

>>> df.to_torch("dict", label="lbl", dtype=pl.Float32)
{'label': tensor([[0.],
         [1.],
         [2.],
         [3.]]),
 'features': tensor([[ 1.0000,  1.5000],
         [ 0.0000, -0.5000],
         [ 0.0000,  0.0000],
         [ 1.0000, -2.2500]])}

В виде PolarsDataset с супертипом f64:

>>> ds = df.to_torch("dataset", dtype=pl.Float64)
>>> ds[3]
(tensor([ 3.0000,  1.0000, -2.2500], dtype=torch.float64),)
>>> ds[:2]
(tensor([[ 0.0000,  1.0000,  1.5000],
         [ 1.0000,  0.0000, -0.5000]], dtype=torch.float64),)
>>> ds[[0, 3]]
(tensor([[ 0.0000,  1.0000,  1.5000],
         [ 3.0000,  1.0000, -2.2500]], dtype=torch.float64),)

Для удобства в PolarsDataset можно включить использование данных с половинной точностью для экспериментов (обычно эта настройка задаётся для модели или конвейера):

>>> list(ds.half())
[(tensor([0.0000, 1.0000, 1.5000], dtype=torch.float16),),
 (tensor([ 1.0000,  0.0000, -0.5000], dtype=torch.float16),),
 (tensor([2., 0., 0.], dtype=torch.float16),),
 (tensor([ 3.0000,  1.0000, -2.2500], dtype=torch.float16),)]

Передача PolarsDataset в DataLoader с указанием метки:

>>> from torch.utils.data import DataLoader
>>> ds = df.to_torch("dataset", label="lbl")
>>> dl = DataLoader(ds, batch_size=2)
>>> batches = list(dl)
>>> batches[0]
[tensor([[ 1.0000,  1.5000],
         [ 0.0000, -0.5000]], dtype=torch.float64), tensor([0, 1])]

Обратите внимание, что метки можно задавать в виде выражений, благодаря чему их dtype может отличаться от dtype столбцов признаков (поддерживаются метки из нескольких столбцов).

>>> ds = df.to_torch(
...     return_type="dataset",
...     dtype=pl.Float32,
...     label=pl.col("lbl").cast(pl.Int16),
... )
>>> ds[:2]
(tensor([[ 1.0000,  1.5000],
         [ 0.0000, -0.5000]]), tensor([0, 1], dtype=torch.int16))

Простая интеграция, например, со scikit-learn и другими наборами данных:

>>> from sklearn.datasets import fetch_california_housing  
>>> housing = fetch_california_housing()  
>>> df = pl.DataFrame(
...     data=housing.data,
...     schema=housing.feature_names,
... ).with_columns(
...     Target=housing.target,
... )  
>>> train = df.to_torch("dataset", label="Target")  
>>> loader = DataLoader(
...     train,
...     shuffle=True,
...     batch_size=64,
... )  

© 2020 Ritchie Vink
© 2022 Polars contributors
Licensed under the MIT License.
https://docs.pola.rs/api/python/stable/reference/dataframe/api/polars.DataFrame.to_torch.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API