Views
No views yet
1import joblib
2import numpy as np
3import pandas as pd
4
5# Load model and pipeline
6model = joblib.load('model.pkl')
7pipeline = joblib.load('pipeline.pkl')
8
9# Example input
10input_data = {
11 'start_location': 'Delhi',
12 'end_location': 'Mumbai',
13 'total_distance_km': 1400,
14 'season': 'Summer',
15 'day_type': 'Weekday',
16 'traffic_density': 0.5,
17 'user_budget': 5000,
18 'user_time_constraint_hr': 24
19}
20
21# Preprocessing logic (simplified - see app.py for full implementation)
22features = pipeline['features']
23input_row = []
24
25for feature in features:
26 if feature == 'start_location':
27 encoder = pipeline['label_encoders']['start_location']
28 encoded = encoder.transform([input_data[feature]])[0] if input_data[feature] in encoder.classes_ else 0
29 input_row.append(encoded)
30 elif feature == 'end_location':
31 encoder = pipeline['label_encoders']['end_location']
32 encoded = encoder.transform([input_data[feature]])[0] if input_data[feature] in encoder.classes_ else 0
33 input_row.append(encoded)
34 elif feature == 'season':
35 encoder = pipeline['label_encoders']['season']
36 encoded = encoder.transform([input_data[feature]])[0] if input_data[feature] in encoder.classes_ else 0
37 input_row.append(encoded)
38 elif feature == 'day_type':
39 encoder = pipeline['label_encoders']['day_type']
40 encoded = encoder.transform([input_data[feature]])[0] if input_data[feature] in encoder.classes_ else 0
41 input_row.append(encoded)
42 else:
43 input_row.append(input_data[feature])
44
45# Scale numerical features
46numerical_cols = ['total_distance_km', 'traffic_density', 'user_budget', 'user_time_constraint_hr']
47numerical_data = {col: [input_row[features.index(col)]] for col in numerical_cols}
48df_numerical = pd.DataFrame(numerical_data)
49numerical_scaled = pipeline['scaler'].transform(df_numerical)
50
51# Reconstruct full feature array
52input_scaled = []
53num_idx = 0
54for feature in features:
55 if feature in numerical_cols:
56 input_scaled.append(numerical_scaled[0][num_idx])
57 num_idx += 1
58 else:
59 input_scaled.append(input_row[features.index(feature)])
60
61input_scaled = np.array([input_scaled])
62
63# Predict
64prediction = model.predict(input_scaled)
65predicted_mode = pipeline['target_encoder'].inverse_transform(prediction)[0]
66
67probabilities = model.predict_proba(input_scaled)[0]
68mode_names = pipeline['target_encoder'].classes_
69prob_dict = {mode: float(prob) for mode, prob in zip(mode_names, probabilities)}
70
71print(f"Predicted mode: {predicted_mode}")
72print(f"Probabilities: {prob_dict}")model.pkl: Trained RandomForestClassifier modelpipeline.pkl: Preprocessing pipeline with encoders and scaler