Open
Description
I think it would be great to have this feature, as I think sklearn is often used for tabular data. I tried to use skorch, but skorch does not allow TensorFrames and did not work well.
(examples/tutorial.py
)
from skorch import NeuralNetClassifier
net = NeuralNetClassifier(module=model, max_epochs=args.epochs, lr=args.lr,
device=device, batch_size=args.batch_size,
classes=dataset.num_classes, iterator_train=DataLoader,
iterator_valid=DataLoader, train_split=None)
net.fit(train_dataset, y=None)
Traceback (most recent call last):
File "\examples\tutorial.py", line 346, in <module>
net.fit(train_dataset, y=None)
File "\site-packages\skorch\classifier.py", line 165, in fit
return super(NeuralNetClassifier, self).fit(X, y, **fit_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\site-packages\skorch\net.py", line 1319, in fit
self.partial_fit(X, y, **fit_params)
File "\site-packages\skorch\net.py", line 1278, in partial_fit
self.fit_loop(X, y, **fit_params)
File "\site-packages\skorch\net.py", line 1190, in fit_loop
self.run_single_epoch(iterator_train, training=True, prefix="train",
File "\site-packages\skorch\net.py", line 1226, in run_single_epoch
step = step_fn(batch, **fit_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\site-packages\skorch\net.py", line 1105, in train_step
self._step_optimizer(step_fn)
File "\site-packages\skorch\net.py", line 1060, in _step_optimizer
optimizer.step(step_fn)
File "\site-packages\torch\optim\optimizer.py", line 373, in wrapper
out = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "\site-packages\torch\optim\optimizer.py", line 76, in _use_grad
ret = func(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\site-packages\torch\optim\sgd.py", line 66, in step
loss = closure()
^^^^^^^^^
File "\site-packages\skorch\net.py", line 1094, in step_fn
step = self.train_step_single(batch, **fit_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\site-packages\skorch\net.py", line 993, in train_step_single
y_pred = self.infer(Xi, **fit_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\site-packages\skorch\net.py", line 1517, in infer
x = to_tensor(x, device=self.device)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\site-packages\skorch\utils.py", line 104, in to_tensor
return [to_tensor_(x) for x in X]
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\site-packages\skorch\utils.py", line 104, in <listcomp>
return [to_tensor_(x) for x in X]
^^^^^^^^^^^^^
File "\site-packages\skorch\utils.py", line 118, in to_tensor
raise TypeError("Cannot convert this data type to a torch tensor.")
TypeError: Cannot convert this data type to a torch tensor.
I think the following changes are needed:
- Add an ability to convert from DataFrame to TensorFrame without much prior information.
- Create a wrapper that passes Tensor to skorch or create a scikit-learn compatible estimator specifically for this package.
I am sorry, but I cannot take much time to assist in creating this feature, so if it is not possible, please close this.