0% found this document useful (0 votes)
8 views12 pages

Datascience

The document outlines two Python scripts for classification and regression using decision trees on the Iris dataset and a synthetic dataset, respectively. It includes steps for data selection, preprocessing, multicollinearity checks, model building, evaluation, and visualization. The scripts utilize libraries such as sklearn and matplotlib to implement machine learning techniques and generate visual outputs.

Uploaded by

sajjadirshad170
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views12 pages

Datascience

The document outlines two Python scripts for classification and regression using decision trees on the Iris dataset and a synthetic dataset, respectively. It includes steps for data selection, preprocessing, multicollinearity checks, model building, evaluation, and visualization. The scripts utilize libraries such as sklearn and matplotlib to implement machine learning techniques and generate visual outputs.

Uploaded by

sajjadirshad170
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Submitted By:

Ahsan Azeem Zahid

Reg#:

FA22-BCS-213

Submitted To:

Mam Maryam Mazhar

Assigment #

03
dt_classification_iris.py

# Import necessary libraries

import numpy as np

import pandas as pd

import [Link] as plt

from [Link] import load_iris # Built-in dataset for classification

from sklearn.model_selection import train_test_split # For splitting data

from [Link] import StandardScaler # For scaling features

from [Link] import DecisionTreeClassifier, plot_tree # DT model and viz

from [Link] import accuracy_score, confusion_matrix, classification_report #


Evaluation metrics

from [Link].outliers_influence import variance_inflation_factor # For VIF

import warnings

[Link]('ignore') # Ignore warnings for clean output

# Step 1: Data Selection

# Load the Iris dataset (150 samples, 4 features, 3 classes: setosa, versicolor, virginica)

iris = load_iris()

X = [Link]([Link], columns=iris.feature_names) # Features: sepal/petal


length/width

y = [Link] # Target: class labels 0,1,2

print("Dataset shape:", [Link])

print("Target classes:", [Link](y))

# Step 2: Data Preprocessing


# Split into train/test (80/20)

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

# Scale features to standardize (mean=0, std=1) - important for DT to avoid bias

scaler = StandardScaler()

X_train_scaled = scaler.fit_transform(X_train)

X_test_scaled = [Link](X_test)

print("\nPreprocessing complete. Train shape:", X_train_scaled.shape)

# Step 3: Multi-collinearity Check

# Calculate VIF for each feature to detect multicollinearity (VIF > 5-10 indicates issue)

vif_data = [Link]()

vif_data["feature"] = [Link]

vif_data["VIF"] = [variance_inflation_factor(X_train_scaled, i) for i in range(len([Link]))]

print("\nVIF Scores:\n", vif_data)

# Insight: High VIF (e.g., >10) suggests correlated features; may need feature selection

# Step 4: Model Building

# Build Decision Tree Classifier (from sklearn; from-scratch would use Gini/entropy for
splits)

clf = DecisionTreeClassifier(random_state=42, max_depth=3) # Limit depth to prevent


overfitting

[Link](X_train_scaled, y_train) # Train on scaled data

# Step 5: Model Evaluation

y_pred = [Link](X_test_scaled) # Predict on test

accuracy = accuracy_score(y_test, y_pred) # Accuracy score

print("\nAccuracy:", accuracy)
print("\nConfusion Matrix:\n", confusion_matrix(y_test, y_pred))

print("\nClassification Report:\n", classification_report(y_test, y_pred))

# Step 6: Visualization

# Plot the decision tree

[Link](figsize=(12,8))

plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names,


filled=True)

[Link]('Decision Tree for Iris Classification')

[Link]('iris_tree.png') # Save plot

[Link]() # Display if running locally

# Feature Importance Bar Plot

importances = [Link]({'feature': iris.feature_names, 'importance':


clf.feature_importances_}).sort_values('importance', ascending=False)

[Link](figsize=(8,6))

[Link](x='feature', y='importance')

[Link]('Feature Importance in Iris DT')

[Link]('iris_importance.png') # Save plot

[Link]() # Display if running locally

print("\nPlots saved as iris_tree.png and iris_importance.png")

Output:
dt_regression_synthetic.py.
# Import necessary libraries

import numpy as np

import pandas as pd

import [Link] as plt

from sklearn.model_selection import train_test_split # For splitting

from [Link] import StandardScaler # For scaling

from [Link] import DecisionTreeRegressor, plot_tree # DT model and viz

from [Link] import mean_squared_error, r2_score # Evaluation metrics

from [Link].outliers_influence import variance_inflation_factor # For VIF

import warnings

[Link]('ignore') # Ignore warnings


# Step 1: Data Selection

# Generate synthetic dataset (200 samples, 4 features, 1 target) - simulates correlated


features for multicollinearity

[Link](42)

n_samples = 200

X = [Link](n_samples, 4)

# Introduce multicollinearity: Feature3 correlated with Feature1

X[:, 2] = X[:, 0] * 0.8 + [Link](n_samples) * 0.2

feature_names = ['Feature1', 'Feature2', 'Feature3_Corr', 'Feature4']

X = [Link](X, columns=feature_names)

y = X['Feature1'] + 2 * X['Feature2'] + 0.5 * X['Feature3_Corr'] +


[Link](n_samples) * 0.1 # Target with linear relation + noise

print("Dataset shape:", [Link])

print("Target range:", [Link](), "to", [Link]())

# Step 2: Data Preprocessing

# Split into train/test (80/20)

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

# Scale features

scaler = StandardScaler()

X_train_scaled = scaler.fit_transform(X_train)

X_test_scaled = [Link](X_test)

print("\nPreprocessing complete. Train shape:", X_train_scaled.shape)

# Step 3: Multi-collinearity Check

vif_data = [Link]()
vif_data["feature"] = feature_names

vif_data["VIF"] = [variance_inflation_factor(X_train_scaled, i) for i in


range(len(feature_names))]

print("\nVIF Scores:\n", vif_data)

# Insight: High VIF for correlated features indicates multicollinearity; consider dropping one

# Step 4: Model Building

reg = DecisionTreeRegressor(random_state=42, max_depth=5) # Limit depth to prevent


overfitting

[Link](X_train_scaled, y_train) # Train

# Step 5: Model Evaluation

y_pred = [Link](X_test_scaled)

mse = mean_squared_error(y_test, y_pred)

r2 = r2_score(y_test, y_pred)

print("\nMSE:", mse)

print("R2 Score:", r2)

# Step 6: Visualization

# Plot tree (limit depth for readability)

[Link](figsize=(12,8))

plot_tree(reg, feature_names=feature_names, filled=True, max_depth=3)

[Link]('Decision Tree for Regression')

[Link]('regression_tree.png')

[Link]()

# Feature Importance
importances = [Link]({'feature': feature_names, 'importance':
reg.feature_importances_}).sort_values('importance', ascending=False)

[Link](figsize=(8,6))

[Link](x='feature', y='importance')

[Link]('Feature Importance in Regression DT')

[Link]('regression_importance.png')

[Link]()

# Actual vs Predicted Scatter

[Link](figsize=(8,6))

[Link](y_test, y_pred, alpha=0.5)

[Link]([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=2)

[Link]('Actual')

[Link]('Predicted')

[Link]('Actual vs Predicted Values')

[Link]('regression_pred.png')

[Link]()

print("\nPlots saved as regression_tree.png, regression_importance.png,


regression_pred.png")
Output:

You might also like