Fyp 4
Fyp 4
import pandas as pd
import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, LabelEncoder
def preprocess_data(data):
# Step 1: Drop the 'drate' column if it exists
if 'drate' in data.columns:
data = data.drop(columns=['drate'])
return data
train_data = preprocess_data(train_data)
test_data = preprocess_data(test_data)
# Normal Traffic
else:
return 0 # Normal
import os
import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.ensemble import RandomForestClassifier,
GradientBoostingClassifier, VotingClassifier
from sklearn.metrics import classification_report, accuracy_score
# Features and target variable
X_train = train_data[['Srate', 'Rate', 'Protocol Type', 'ARP']] #
Main features
y_train = train_data['attack_class']
ensemble_model = VotingClassifier(
estimators=[('rf', rf_model), ('gb', gb_model)],
voting='soft'
)
VotingClassifier(estimators=[('rf',
RandomForestClassifier(random_state=42)),
('gb',
GradientBoostingClassifier(random_state=42))],
voting='soft')
import joblib
Classification Report:
precision recall f1-score support
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import classification_report
Classification Report:
precision recall f1-score support
Normal 1.0 1.0 1.0 379103.0
DDoS 1.0 1.0 1.0 636984.0
DoS 1.0 1.0 1.0 13518.0
Recon 1.0 1.0 1.0 577939.0
Spoofing 1.0 1.0 1.0 6638.0
accuracy 1.0 1.0 1.0 1.0
macro avg 1.0 1.0 1.0 1614182.0
weighted avg 1.0 1.0 1.0 1614182.0
from sklearn.metrics import classification_report, confusion_matrix,
accuracy_score
import matplotlib.pyplot as plt
import seaborn as sns
# Confusion Matrix
cm = confusion_matrix(test_data['attack_class'], y_test_pred)
plt.figure(figsize=(10, 8))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=[
"Normal", "DDoS", "DoS", "Recon", "Spoofing" ],
yticklabels=[
"Normal", "DDoS", "DoS", "Recon", "Spoofing" ])
plt.xlabel("Predicted")
plt.ylabel("Actual")
plt.title("Confusion Matrix")
plt.show()
else:
print("Ground truth labels are not available in the test
dataset.")
}
test_data['predicted_attack_name'] =
test_data['predicted_attack_class'].map(attack_type_mapping)
# Visualization of predictions
predictions_count = test_data['predicted_attack_name'].value_counts()
plt.figure(figsize=(10, 6))
sns.barplot(x=predictions_count.index, y=predictions_count.values,
palette="viridis")
plt.title("Distribution of Predicted Attack Classes")
plt.xlabel("Attack Type")
plt.ylabel("Count")
plt.xticks(rotation=45)
plt.show()
Accuracy: 1.00
Classification Report:
precision recall f1-score support
Sample of Predictions:
predicted_attack_class predicted_attack_name
0 0 Normal
1 0 Normal
2 1 DDoS
3 1 DDoS
4 0 Normal
C:\Users\Students\AppData\Local\Temp\7\
ipykernel_32976\1383133409.py:54: FutureWarning:
sns.barplot(x=predictions_count.index, y=predictions_count.values,
palette="viridis")
import os