DEV Community

Cover image for How to Check if Decision Trees Works for Your Dataset
likhitha manikonda
likhitha manikonda

Posted on

How to Check if Decision Trees Works for Your Dataset

1. Is Your Problem Classification or Regression?

Classification: Predicting categories (e.g., yes/no, types of flowers).
Regression: Predicting numbers (e.g., house price).

Decision trees can do both!

Why Use Linear or Logistic Regression When Decision Trees Can Do Both?

a. Simplicity and Interpretability
Linear Regression: Very simple, easy to interpret, and fast. You get a clear formula: y=mx+c
Logistic Regression: Also simple and gives you probabilities for classification.
Decision Trees: Can be more complex, especially as they grow deeper.

b. Performance on Different Data

Linear/Logistic Regression: Work best when the relationship between features and target is straight (linear).
Decision Trees: Can handle complex, non-linear relationships, but may overfit (memorize training data and perform poorly on new data).

c. Overfitting

Decision Trees: Prone to overfitting, especially with small datasets or many features.
Linear/Logistic Regression: Less likely to overfit if the data fits their assumptions.

d. Speed and Resources

Linear/Logistic Regression: Faster to train and use, especially with large datasets.
Decision Trees: Can be slower and use more memory as they grow.

e. Interpretability
Linear/Logistic Regression: Easy to explain to others (especially in business or science).
Decision Trees: Can be interpreted visually, but complex trees are harder to explain.

f. Assumptions

Linear Regression: Assumes a linear relationship.
Logistic Regression: Assumes a linear boundary between classes.
Decision Trees: No strict assumptions, but can be unstable with small changes in data.

2. Prepare Your Data

Clean your data (remove missing or weird values).
Choose relevant features and target variable.

3. Train a Decision Tree Model

Use DecisionTreeClassifier for classification.
Use DecisionTreeRegressor for regression.

4. Make Predictions

Use the trained model to predict on your test data.

5. Evaluate the Model

For classification: Check accuracy, confusion matrix, precision, recall, F1-score.
For regression: Check R² score, RMSE, MAE.

6. Visualize the Tree

Plot the tree to see how it splits the data.

7. Check for Overfitting

If the tree is very deep and perfect on training data but poor on test data, it’s overfitting.
Limit tree depth (max_depth) to avoid this.

How to Know If Decision Trees Work Well

Good fit: High accuracy (classification) or high R² (regression) on test data.
Poor fit: Low accuracy or R², or big difference between training and test scores (overfitting).
Interpretability: You can easily see which features the tree uses to make decisions.

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

# Load your data
df = pd.read_csv('your_dataset.csv')
X = df[['feature1', 'feature2', 'feature3']]
y = df['target']

# Split data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Train decision tree
dt_model = DecisionTreeClassifier(max_depth=3)
dt_model.fit(X_train, y_train)

# Predict and evaluate
y_pred = dt_model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
print("Confusion Matrix:\n", confusion_matrix(y_test, y_pred))

# Visualize the tree
plt.figure(figsize=(12,8))
plot_tree(dt_model, feature_names=X.columns, filled=True)
plt.show()
Enter fullscreen mode Exit fullscreen mode

How to tune decision trees for better results
✅ 1. Model Performance

Default Decision Tree

RMSE: 79,976.03
R² Score: 0.7090

Tuned Decision Tree (max_depth=4)

RMSE: 58,553.52
R² Score: 0.8440

👉 Tuning the tree by limiting depth improved accuracy and reduced overfitting.

✅ 2. How to Tune Decision Trees

max_depth: Controls how deep the tree can grow. Lower depth = less overfitting.
min_samples_split: Minimum samples needed to split a node.
min_samples_leaf: Minimum samples in a leaf node.
max_features: Limit number of features considered at each split.

Example:
tuned_tree = DecisionTreeRegressor(max_depth=4, min_samples_split=10, random_state=42)

How to visualize the decision tree
Here’s the visualization of the tuned tree (max_depth=4):
Here’s how to plot the tree using matplotlib:

import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

plt.figure(figsize=(20, 10))
plot_tree(tuned_tree, feature_names=['RM', 'LSTAT', 'PTRATIO'], filled=True, rounded=True)
plt.title("Decision Tree Regression (max_depth=4)")
plt.show()
Enter fullscreen mode Exit fullscreen mode

What you’ll see:

Each node shows a split condition (e.g., RM ≤ 6.94).
Branches split data based on feature values.
Leaves (bottom nodes) show predicted house prices.

How to Read the Visualization
Top node: First split (most important feature).
Branches: Show how data is divided at each step.
Leaves: Final predictions for house prices.

✅ Why Visualization Matters
Helps you understand which features are most important.
Shows how the model makes decisions step by step.


🧩 Puzzle pieces aligned — the model’s getting sharper. Let’s drop out distractions and batch the next insight! 🧠
https://dev.to/codeneuron/ridge-regression-and-lasso-regression-6me

Top comments (0)