Untitled
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