import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split from sklearn.linear_model import Perceptron
from sklearn.metrics import accuracy_score
# Read dataset
data = pd.read_csv(r"E:\Kiran\DSI\ML and NN\Lab\Program 9\student_perceptron_2D.csv")
print("First 5 Records:")
print(data.head())
# Separate input and output
X = data[["Study_Hours", "Assignment_Score"]]
y = data["Result"]
# Split data
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.30,
random_state=42,
stratify=y
)
print("\nTraining Samples:", len(X_train))
print("Testing Samples:", len(X_test))
# Create Perceptron
model = Perceptron(
max_iter=1000,
eta0=0.01,
random_state=42
)
# Train
model.fit(X_train, y_train)
# Predict test data
y_pred = model.predict(X_test)
print("\nTest Data Predictions:")
print(y_pred)
# Accuracy
accuracy = accuracy_score(y_test, y_pred)
print("\nTesting Accuracy:", accuracy) # Weights and bias
w1 = model.coef_[0][0]
w2 = model.coef_[0][1]
b = model.intercept_[0]
print("\nWeights:", model.coef_)
print("Bias:", model.intercept_)
# Decision boundary
x1 = np.linspace(
X["Study_Hours"].min(),
X["Study_Hours"].max(),
100
)
x2 = -(w1 * x1 + b) / w2
# Plot data
plt.scatter(
X[y == 0]["Study_Hours"],
X[y == 0]["Assignment_Score"],
marker="o",
label="Fail"
)
plt.scatter(
X[y == 1]["Study_Hours"],
X[y == 1]["Assignment_Score"],
marker="s",
label="Pass"
)
# Plot decision boundary
plt.plot(
x1,
x2,
label="Decision Boundary"
)
plt.xlabel("Study Hours")
plt.ylabel("Assignment Score")
plt.title("Single-Layer Perceptron Decision Boundary")
plt.legend()
plt.grid(True)
plt.show()