Spaces:
Runtime error
Runtime error
Download ml_models/train_model.py from KaustavMP/NetWokie-AI: direct link, hf CLI and curl.
- Browser
- Download file 2.55 kB
-
https://huggingface.co/spaces/KaustavMP/NetWokie-AI/resolve/main/ml_models/train_model.py
- Command line
-
hf download hf://spaces/KaustavMP/NetWokie-AI/ml_models/train_model.py
-
curl -L -o train_model.py https://huggingface.co/spaces/KaustavMP/NetWokie-AI/resolve/main/ml_models/train_model.py
2.55 kB
| import pandas as pd | |
| import numpy as np | |
| import os | |
| import joblib | |
| from sklearn.ensemble import RandomForestClassifier | |
| from sklearn.preprocessing import StandardScaler, LabelEncoder | |
| from sklearn.model_selection import train_test_split | |
| BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
| DATASET_PATH = os.path.join(BASE_DIR, "datasets", "dataset_2.csv") | |
| MODEL_DIR = os.path.join(BASE_DIR, "ml_models") | |
| os.makedirs(MODEL_DIR, exist_ok=True) | |
| MODEL_PATH = os.path.join(MODEL_DIR, "device_classifier.pkl") | |
| SCALER_PATH = os.path.join(BASE_DIR, "datasets", "scaler.pkl") | |
| LE_PATH = os.path.join(BASE_DIR, "datasets", "label_encoder.pkl") | |
| def train(): | |
| print("Loading dataset...") | |
| df = pd.read_csv(DATASET_PATH) | |
| print("Columns available:", list(df.columns)) | |
| print("Preprocessing data...") | |
| # Drop NaNs | |
| df.dropna(subset=['device_type', 'packet_size', 'protocol_type', 'bandwidth_usage', 'transmission_time'], inplace=True) | |
| # Encode protocol (TCP/UDP mapping) | |
| print("Encoding protocol...") | |
| df['protocol'] = df['protocol_type'].apply(lambda x: 0 if str(x).upper() == 'TCP' else (1 if str(x).upper() == 'UDP' else 2)) | |
| # Map features | |
| df['flow_duration'] = df['transmission_time'] | |
| df['packet_rate'] = df['bandwidth_usage'] # Simple mapping | |
| features = ['packet_size', 'protocol', 'packet_rate', 'flow_duration'] | |
| X = df[features] | |
| y = df['device_type'] | |
| print("Encoding Labels...") | |
| le = LabelEncoder() | |
| y_encoded = le.fit_transform(y) | |
| print("Scaling Features...") | |
| scaler = StandardScaler() | |
| X_scaled = scaler.fit_transform(X) | |
| print("Splitting...") | |
| X_train, X_test, y_train, y_test = train_test_split(X_scaled, y_encoded, test_size=0.2, random_state=42) | |
| print("Training Model...") | |
| clf = RandomForestClassifier(n_estimators=100, random_state=42, n_jobs=-1) | |
| clf.fit(X_train, y_train) | |
| print(f"Accuracy: {clf.score(X_test, y_test):.4f}") | |
| print("Saving artifacts...") | |
| pd.DataFrame(X_test, columns=features).to_csv(os.path.join(BASE_DIR, "datasets", "X_test.csv"), index=False) | |
| pd.DataFrame(y_test, columns=['device_type']).to_csv(os.path.join(BASE_DIR, "datasets", "y_test.csv"), index=False) | |
| joblib.dump(clf, MODEL_PATH) | |
| joblib.dump(scaler, SCALER_PATH) | |
| joblib.dump(le, LE_PATH) | |
| print(f"Saved model to {MODEL_PATH}") | |
| print(f"Saved scaler to {SCALER_PATH}") | |
| print(f"Saved label encoder to {LE_PATH}") | |
| print("Done!") | |
| if __name__ == "__main__": | |
| train() | |