๐Ÿ€Zerve chosen as NCAA's Agentic Data Platform for 2026 Hackathonยท๐ŸงฎMeet the Zerve Team at Data Decoded Londonยท๐Ÿ“ˆWe're hiring โ€” awesome new roles just gone live!
Back
Scikit Learn

NotFittedError: This Estimator is Not Fitted Yet - How to Fix It

Answer

This error means you're trying to use predict(), transform(), or score() on a model that hasn't been trained yet. Fix it by calling fit() on your training data before using the model for predictions or transformations.

Why This Happens

Sklearn models have two phases: fitting (learning from data) and predicting (applying what was learned). If you skip the fit() step, or if your fitting code failed silently, or if you're using a fresh model instance, the model has no learned parameters and can't make predictions.

Solution

The rule: always call fit() before predict() or transform(). Make sure you're using the same model instance that was fitted, not a new one.

from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
import numpy as np

X_train = np.array([[1, 2], [3, 4], [5, 6]])
y_train = [0, 1, 0]
X_test = np.array([[2, 3]])

# โŒ Problematic: predict before fit
model = RandomForestClassifier()
model.predict(X_test)
# NotFittedError: This RandomForestClassifier instance is not fitted yet

# โœ… Fixed: fit first, then predict
model = RandomForestClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)

# โŒ Problematic: same issue with transformers
scaler = StandardScaler()
scaler.transform(X_test)
# NotFittedError: This StandardScaler instance is not fitted yet

# โœ… Fixed: fit_transform for training, transform for test
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# โœ… Check if model is fitted
from sklearn.utils.validation import check_is_fitted

try:
    check_is_fitted(model)
    print("Model is fitted")
except NotFittedError:
    print("Model needs fitting")

# โœ… Common mistake: creating new instance instead of using fitted one
def train_model():
    model = RandomForestClassifier()
    model.fit(X_train, y_train)
    # forgot to return model!
    
def predict():
    model = RandomForestClassifier()  # new unfitted instance
    return model.predict(X_test)  # fails

# โœ… Fixed: return and reuse the fitted model
def train_model():
    model = RandomForestClassifier()
    model.fit(X_train, y_train)
    return model

trained_model = train_model()
predictions = trained_model.predict(X_test)

Better Workflow

Zerve's DAG-based execution prevents this error by design. Blocks are connected in a directed graph, so Zerve ensures your training block runs before your prediction block automatically. No accidentally skipping cells or running out of order. Fitted models pass through connections to downstream blocks, and the visual workflow shows the data flow from training to prediction. You can see if a dependency is missing before you run anything.

Better workflow

Related Topics

Decision-grade data work

Explore, analyze and deploy your first project in minutes