Untitled

 avatar
unknown
python
10 days ago
2.4 kB
3
Indexable
import numpy as np
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt

# Assume we have extracted features from multiple IQ files
# Each row in the dataset corresponds to one IQ sample with extracted features and a class label.

# === Generate Sample Dataset ===
# Simulating extracted features for multiple aircraft signals (replace with real data)
np.random.seed(42)
num_samples = 500  # Number of signal samples
num_classes = 5    # Number of different aircraft
features = ['mean_I', 'mean_Q', 'var_I', 'var_Q', 'skew_I', 'skew_Q',
            'kurt_I', 'kurt_Q', 'iq_correlation', 'mean_amplitude', 
            'var_amplitude', 'spectral_centroid', 'spectral_bandwidth',
            'spectrogram_mean', 'spectrogram_variance', 'wavelet_energy',
            'mfcc_mean', 'mfcc_var']

# Simulated dataset with random values (Replace this with real extracted features)
data = np.random.rand(num_samples, len(features))
labels = np.random.randint(0, num_classes, num_samples)  # Random labels for aircraft classes

# Convert to Pandas DataFrame
df = pd.DataFrame(data, columns=features)
df['aircraft_id'] = labels  # Target label

# === Train-Test Split ===
X = df.drop(columns=['aircraft_id'])  # Features
y = df['aircraft_id']  # Labels

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

# === Train XGBoost Classifier ===
xgb_classifier = xgb.XGBClassifier(
    objective="multi:softmax",  # Multi-class classification
    num_class=num_classes,
    eval_metric="mlogloss",  # Log loss for multi-class
    max_depth=6,
    learning_rate=0.1,
    n_estimators=100,
    use_label_encoder=False
)

xgb_classifier.fit(X_train, y_train)

# === Model Evaluation ===
y_pred = xgb_classifier.predict(X_test)

# Accuracy
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.4f}")

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

# Confusion Matrix
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(8,6))
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=range(num_classes), yticklabels=range(num_classes))
plt.xlabel("Predicted Class")
plt.ylabel("Actual Class")
plt.title("Confusion Matrix")
plt.show()
Editor is loading...
Leave a Comment