I'm using Linear Regression to predict and evaluate predictions, and following that input all this info into dataframe but I got an error. Functions that I use:
def cross_val(model):
pred = cross_val_score(model, X, y, cv=10)
return pred.mean()
def print_evaluate(true, predicted):
mae = metrics.mean_absolute_error(true, predicted)
mse = metrics.mean_squared_error(true, predicted)
rmse = np.sqrt(metrics.mean_squared_error(true, predicted))
r2_square = metrics.r2_score(true, predicted)
print('MAE: ', mae)
print('MSE: ', mse)
print('RMSE: ', rmse)
print('R2 SQUARE: ', r2_square)
def evaluate(true, predicted):
mae = metrics.mean_absolute_error(true, predicted)
mse = metrics.mean_squared_error(true, predicted)
rmse = np.sqrt(metrics.mean_squared_error(true, predicted))
r2_square = metrics.r2_score(true, predicted)
return mae
return mse
return rmse
return r2_squre
Fitting and getting measurements:
lin_reg.fit(X_train, y_train)
y_pred = lin_reg.predict(X_test)
print('-' * 30)
print('Accuracy of Predictions \n')
print_evaluate(y_test, y_pred)
Making dataframe and getting an error:
results_df = pd.DataFrame(data=[["Linear Regression", *evaluate(y_test, test_pred) , cross_val(LinearRegression())]],
columns=['Model', 'MAE', 'MSE', 'RMSE', 'R2 Square', "Cross Validation"])
Error itself:
----> 1 results_df = pd.DataFrame(data=[["Linear Regression", *evaluate(y_test, test_pred) , cross_val(LinearRegression())]],
2 columns=['Model', 'MAE', 'MSE', 'RMSE', 'R2 Square', "Cross Validation"])
TypeError: 'numpy.float64' object is not iterable
CodePudding user response:
The problem is in the evaluate function:
def evaluate(true, predicted):
mae = metrics.mean_absolute_error(true, predicted)
mse = metrics.mean_squared_error(true, predicted)
rmse = np.sqrt(metrics.mean_squared_error(true, predicted))
r2_square = metrics.r2_score(true, predicted)
return mae
return mse
return rmse
return r2_squre
Here when the first return is hit the function will end and nothing else would be executed. If you want all the values to be returned you need to modify it to:
def evaluate(true, predicted):
mae = metrics.mean_absolute_error(true, predicted)
mse = metrics.mean_squared_error(true, predicted)
rmse = np.sqrt(metrics.mean_squared_error(true, predicted))
r2_square = metrics.r2_score(true, predicted)
return mae, mse, rmse, r2_squre
