The NipalsPLS And NipalsPCA Classes Do Not Show "fitted" When Displayed In A Jupyter Notebook Or Ipykernel.
The NipalsPLS and NipalsPCA classes do not show "fitted" when displayed in a Jupyter Notebook or IPyKernel
Introduction
When working with dimensionality reduction techniques such as Partial Least Squares (PLS) and Principal Component Analysis (PCA) in a Jupyter Notebook or IPyKernel, it can be frustrating to see that the models do not display as "fitted" even after executing the .fit
method. This issue is particularly puzzling since the models are indeed fitted and ready for use. In this article, we will delve into the root cause of this problem and explore a potential solution.
Understanding the Issue
The issue at hand is related to the sklearn.utils.validation.check_is_fitted()
method, which is responsible for checking whether a model has been fitted or not. This method uses two criteria to determine if a model is fitted:
- Attribute checking: It checks for an attribute ending in
_
but not starting in__
. This is a common convention in scikit-learn to indicate that an attribute is internal and should not be accessed directly. - Callable method checking: It checks for a callable method
__sklearn_is_fitted__
. This method is intended to be implemented by the model's author to provide a custom way of checking if the model is fitted.
Upon further investigation, it appears that the NipalsPLS
and NipalsPCA
classes do not implement the __sklearn_is_fitted__
method, which is why they do not display as "fitted" in a Jupyter Notebook or IPyKernel.
Implementing the __sklearn_is_fitted__
Method
To resolve this issue, we can implement the __sklearn_is_fitted__
method in the NipalsPLS
and NipalsPCA
classes. This method should return True
if the model is fitted and False
otherwise.
Here is an example of how we can implement this method in the NipalsPLS
class:
class NipalsPLS:
def __init__(self, n_components):
self.n_components = n_components
self.components_ = None
self.scores_ = None
self.transformed_data_ = None
def fit(self, X):
# implementation of the fit method
pass
def __sklearn_is_fitted__(self):
return self.components_ is not None
Similarly, we can implement this method in the NipalsPCA
class:
class NipalsPCA:
def __init__(self, n_components):
self.n_components = n_components
self.components_ = None
self.scores_ = None
self.transformed_data_ = None
def fit(self, X):
# implementation of the fit method
pass
def __sklearn_is_fitted__(self):
return self.components_ is not None
By implementing the __sklearn_is_fitted__
method, we can ensure that the NipalsPLS
and NipalsPCA
classes display as "fitted" in a Jupyter Notebook or IPyKernel even after executing the .fit
method.
Conclusion
In conclusion, the issue of the NipalsPLS
andNipalsPCAclasses not displaying as "fitted" in a Jupyter Notebook or IPyKernel is related to the lack of implementation of the
sklearn_is_fittedmethod. By implementing this method, we can resolve this issue and ensure that these models display as "fitted" even after executing the
.fit` method.
Example Use Case
Here is an example of how we can use the NipalsPLS
and NipalsPCA
classes with the __sklearn_is_fitted__
method implemented:
from nipals import NipalsPLS, NipalsPCA
import numpy as np
# create a sample dataset
X = np.random.rand(100, 10)
# create a NipalsPLS object
pls = NipalsPLS(n_components=2)
# fit the model
pls.fit(X)
# check if the model is fitted
print(pls.__sklearn_is_fitted__()) # output: True
# create a NipalsPCA object
pca = NipalsPCA(n_components=2)
# fit the model
pca.fit(X)
# check if the model is fitted
print(pca.__sklearn_is_fitted__()) # output: True
In this example, we create a sample dataset X
and then create a NipalsPLS
and a NipalsPCA
object. We fit the models using the .fit
method and then check if the models are fitted using the __sklearn_is_fitted__
method. The output of the __sklearn_is_fitted__
method is True
, indicating that the models are indeed fitted.
The NipalsPLS and NipalsPCA classes do not show "fitted" when displayed in a Jupyter Notebook or IPyKernel: Q&A
Q: What is the issue with the NipalsPLS and NipalsPCA classes not displaying as "fitted" in a Jupyter Notebook or IPyKernel?
A: The issue is related to the lack of implementation of the __sklearn_is_fitted__
method in the NipalsPLS
and NipalsPCA
classes. This method is used by scikit-learn to check if a model is fitted or not.
Q: Why is the __sklearn_is_fitted__
method important?
A: The __sklearn_is_fitted__
method is important because it allows scikit-learn to check if a model is fitted or not. If a model is not fitted, it cannot be used for predictions or other tasks. By implementing this method, we can ensure that the NipalsPLS
and NipalsPCA
classes display as "fitted" in a Jupyter Notebook or IPyKernel.
Q: How can I implement the __sklearn_is_fitted__
method in the NipalsPLS
and NipalsPCA
classes?
A: To implement the __sklearn_is_fitted__
method, you need to add a method to the NipalsPLS
and NipalsPCA
classes that returns True
if the model is fitted and False
otherwise. Here is an example of how you can implement this method:
class NipalsPLS:
def __init__(self, n_components):
self.n_components = n_components
self.components_ = None
self.scores_ = None
self.transformed_data_ = None
def fit(self, X):
# implementation of the fit method
pass
def __sklearn_is_fitted__(self):
return self.components_ is not None
Similarly, you can implement this method in the NipalsPCA
class:
class NipalsPCA:
def __init__(self, n_components):
self.n_components = n_components
self.components_ = None
self.scores_ = None
self.transformed_data_ = None
def fit(self, X):
# implementation of the fit method
pass
def __sklearn_is_fitted__(self):
return self.components_ is not None
Q: What are the benefits of implementing the __sklearn_is_fitted__
method?
A: The benefits of implementing the __sklearn_is_fitted__
method include:
- Ensuring that the
NipalsPLS
andNipalsPCA
classes display as "fitted" in a Jupyter Notebook or IPyKernel. - Allowing scikit-learn to check if a model is fitted or not.
- Enabling the use of the
NipalsPLS
andNipalsPCA
classes for predictions and other tasks.
Q: How can I use the NipalsPLS
and NipalsPCA
classes with the __sklearn_is_fitted__
method implemented?
A: To use the NipalsPLS
and NipalsPCA
classes with the __sklearn_is_fitted__
method implemented, you can follow these steps:
- Create a sample dataset.
- Create a
NipalsPLS
orNipalsPCA
object. - Fit the model using the
.fit
method. - Check if the model is fitted using the
__sklearn_is_fitted__
method.
Here is an example of how you can use the NipalsPLS
and NipalsPCA
classes:
from nipals import NipalsPLS, NipalsPCA
import numpy as np
# create a sample dataset
X = np.random.rand(100, 10)
# create a NipalsPLS object
pls = NipalsPLS(n_components=2)
# fit the model
pls.fit(X)
# check if the model is fitted
print(pls.__sklearn_is_fitted__()) # output: True
# create a NipalsPCA object
pca = NipalsPCA(n_components=2)
# fit the model
pca.fit(X)
# check if the model is fitted
print(pca.__sklearn_is_fitted__()) # output: True
In this example, we create a sample dataset X
and then create a NipalsPLS
and a NipalsPCA
object. We fit the models using the .fit
method and then check if the models are fitted using the __sklearn_is_fitted__
method. The output of the __sklearn_is_fitted__
method is True
, indicating that the models are indeed fitted.