I am trying to deploy my ML model using flask. My model contains both categorical and numerical variables. Below is my model.py code:-
#PIPELINE FOR PREPROCESSING dtr_pipe = Pipeline(steps = [('preproc', preproc), ('model', dtr_model)]) train_x, test_x, train_y, test_y = train_test_split(data2, y, test_size = 0.2, random_state = 69) #OPTUNA def objective(trial): model__max_depth = trial.suggest_int('model__max_depth', 2, 32) model__max_leaf_nodes = trial.suggest_int('model__max_leaf_nodes', 50, 500) model__max_features = trial.suggest_float('model__max_features', 0.0, 1.0) model__min_samples_leaf=trial.suggest_int('model__min_samples_leaf', 1, 50) params = {'model__max_depth' : model__max_depth, 'model__max_leaf_nodes' : model__max_leaf_nodes, 'model__max_features' : model__max_features, 'model__min_samples_leaf' : model__min_samples_leaf} dtr_pipe.set_params(**params) return np.mean(-1 * cross_val_score(dtr_pipe, train_x, train_y, cv = 5, n_jobs = -1, scoring = 'neg_mean_squared_error')) dtr_study = optuna.create_study(direction = 'minimize') dtr_study.optimize(objective, n_trials = 10) dtr_pipe.set_params(**dtr_study.best_params) dtr_pipe.fit(train_x, train_y) pickle.dump(dtr_pipe, open('model.pkl', 'wb')) model = pickle.load(open('model.pkl', 'rb')) Below is my app.py code:-
@app.route('/', methods = ['GET', 'POST']) def main(): if request.method == 'GET': return render_template('index.html') if request.method == 'POST': powerPS = request.form['powerPS'] model = request.form['model'] kilometer = request.form['kilometer'] fuelType = request.form['fuelType'] vehicleType = request.form['vehicleType'] gearbox = request.form['gearbox'] notRepairedDamage = request.form['notRepairedDamage'] brand = request.form['brand'] age = request.form['age'] data = [[powerPS, model, kilometer, fuelType, vehicleType, gearbox, notRepairedDamage, brand, age]] input_variables = pd.DataFrame(data,columns=['powerPS', 'model', 'kilometer', 'fuelType', 'vehicleType','gearbox', 'notRepairedDamage', 'brand', 'age'], dtype='float', index=['input']) predictions = model.predict(input_variables)[0] print(predictions) return render_template('index.html', original_input={'powerPS': powerPS, 'model': model, 'kilometer': kilometer, 'fuelType':fuelType, 'vehicleType': vehicleType, 'gearbox': gearbox, 'notRepairedDamage': notRepairedDamage, 'brand': brand, 'age':age}, result=predictions) If I run only my ML model, it runs perfectly without error. But when I deploy it using flask (above code), and enter the values in the respective fields and press submit, I get following error:-
AttributeError: 'str' object has no attribute 'predict' Why am I getting this error and what's the solution?