CART = Classification and Regression Tree, and for classification problem, criterion="gini" uses the Gini impurity criterion.
CART = Classification and Regression Tree, and for regression problem, criterion="squared_error" uses the squared_error impurity criterion.
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree
# Read weather.csv
df = pd.read_csv("weather.csv")
print(df.head())
print(df.columns)
# Create encoders
encoders = {}
# Encode categorical columns
for column in df.columns:
le = LabelEncoder()
df[column] = le.fit_transform(df[column])
encoders[column] = le
X_features = df.drop("Play", axis=1)
y_target = df["Play"]
X_train, X_test, y_train, y_test = train_test_split(
X_features,
y_target,
test_size=0.2,
random_state=42
)
model = DecisionTreeClassifier(
criterion="gini",
random_state=42
)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print("Predicted:", y_pred)
print("Actual:", y_test.values)
print("Accuracy:", accuracy_score(y_test, y_pred))
plt.figure(figsize=(18, 15))
plot_tree(
model,
feature_names=X_features.columns,
class_names=encoders["Play"].classes_,
filled=True,
fontsize=18
)
plt.title("CART Decision Tree")
plt.show()
from sklearn import tree
clf=DecisionTreeClassifier(
criterion="gini",
random_state=42
)
model=clf.fit(X_train, y_train)
text_representation = tree.export_text(
clf,
feature_names=list(X_train.columns)
)
print(text_representation)
new_data = pd.DataFrame([{
"Outlook": "Sunny",
"Temperature": "Cool",
"Humidity": "High",
"Windy": False
}])
# Convert False/True to the same format as training data
new_data["Windy"] = new_data["Windy"].astype(str)
# Encode new data using the SAME encoders
# Encode new data using existing encoders
for column in X_features.columns:
new_data[column] = encoders[column].transform(new_data[column])
# Predict
prediction = model.predict(new_data)
# Convert encoded prediction back to Yes/No
prediction_label = encoders["Play"].inverse_transform(prediction)
print("\nNew Data Prediction:", prediction_label[0])