直接从表中获取数据时获得RMSE分数。

时间:2019-03-17 07:33:26

标签: sql

我在数据库中有一个表,该表具有许多功能,每个功能在其表中都有其自己的实际值和预测值,另外还有两列是Id_partner和Id_accounts。我的主要目标是获取每个功能的RMSE分数对于每个合作伙伴中的每个帐户,我都是通过for循环完成的,但是在PySpark中花费大量的时间来完成,有没有一种有效的方法可以直接在查询的帮助下直接读取数据,所以我得到了每个合作伙伴中每个帐户的RMSE得分。 我的桌子是这样的

Actual_Feature_1 = Act_F_1  
Predicted_Feature_1 = Pred_F_1  
Actual_Feature_1 = Act_F_2  
Predicted_Feature_1 = Pred_F_2  

表1:

ID_PARTNER | ID_ACCOUNT | Act_F_1 | Pred_F_1 | Act_F_2 | Pred_F_2 |  
     4     |    24      |   10    |    12    |   22    |    20    |  
     4     |    24      |   11    |    13    |   23    |    21    |  
     4     |    24      |   11    |    12    |   24    |    23    |  
     4     |    25      |   13    |    15    |   22    |    20    |  
     4     |    25      |   15    |    12    |   21    |    20    |  
     4     |    25      |   15    |    14    |   21    |    21    |  
     4     |    27      |   13    |    12    |   35    |    32    |  
     4     |    27      |   12    |    16    |   34    |    31    |  
     4     |    27      |   17    |    14    |   36    |    34    |  
     5     |    301     |   19    |    17    |   56    |    54    |  
     5     |    301     |   21    |    20    |   58    |    54    |  
     5     |    301     |   22    |    19    |   59    |    57    |  
     5     |    301     |   24    |    22    |   46    |    50    |  
     5     |    301     |   25    |    22    |   49    |    54    |  
     5     |    350     |   12    |    10    |   67    |    66    |  
     5     |    350     |   12    |    11    |   65    |    64    |  
     5     |    350     |   14    |    13    |   68    |    67    |  
     5     |    350     |   15    |    12    |   61    |    61    |  
     5     |    350     |   12    |    10    |   63    |    60    |  
     7     |    420     |   51    |    49    |   30    |    29    |  
     7     |    420     |   51    |    48    |   32    |    30    |  
     7     |    410     |   49    |    45    |   81    |    79    |  
     7     |    410     |   48    |    44    |   83    |    80    |  
     7     |    410     |   45    |    43    |   84    |    81    |

我需要采用这种格式的每个合作伙伴中的每个帐户的RMSE得分

结果表:

ID_PARTNER | ID_ACCOUNT |  FEATURE_1  |  FEATURE_2  |  
    4      |     24     | rmse_score  | rmse_score  |  
    4      |     25     | rmse_score  | rmse_score  |  
    4      |     27     | rmse_score  | rmse_score  |  
    5      |     301    | rmse_score  | rmse_score  |  
    5      |     350    | rmse_score  | rmse_score  |  
    7      |     420    | rmse_score  | rmse_score  |  
    7      |     410    | rmse_score  | rmse_score  |  

注意:为此,我们需要通过查看上表来同时考虑id_account和id_partner,即实际表中我们看到id_accounts可以仅用于获取rmse,但不同的id_partner可以具有与其他合作伙伴相同的帐户。 从数据库读取表时,我需要一个直接提供结果表的SQL查询。

1 个答案:

答案 0 :(得分:0)

是的,您可以在SQL中计算均方根误差。

SELECT ID_PARTNER, ID_ACCOUNT
  , SQRT(Avg( POWER(Act_F_1 - Pred_F_1 , 2) ) ) as feature_1_rmse
FROM ...
GROUP BY ID_PARTNER, ID_ACCOUNT