TypeError: 'numpy.float64' object is not iterable. While trying to make dataframe with results of model prediction

TypeError: 'numpy.float64' object is not iterable. While trying to make dataframe with results of model prediction

我正在使用线性回归来预测和评估预测,然后将所有这些信息输入到数据框中,但出现错误。 我使用的功能:

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

试穿和测量:

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)

制作数据帧并出现错误:

results_df = pd.DataFrame(data=[["Linear Regression", *evaluate(y_test, test_pred) , cross_val(LinearRegression())]], 
                          columns=['Model', 'MAE', 'MSE', 'RMSE', 'R2 Square', "Cross Validation"])

错误本身:

----> 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

问题出在求值函数中:

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

此处,当第一个 return 被命中时,函数将结束,不会执行任何其他操作。如果您希望所有值都被 returned,您需要将其修改为:

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