-
Notifications
You must be signed in to change notification settings - Fork 66
/
Copy pathlmPredictStats_.daph
63 lines (59 loc) · 2.44 KB
/
lmPredictStats_.daph
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#-------------------------------------------------------------
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# Modifications 2023 The DAPHNE Consortium.
#
#-------------------------------------------------------------
# This script has been manually translated from Apache SystemDS.
# This builtin function computes and prints a summary of accuracy
# measures for regression problems.
#
# INPUT:
# ------------------------------------------------------------------------------
# yhat column vector of predicted response values y
# ytest column vector of actual response values y
# lm indicator if used for linear regression model
# ------------------------------------------------------------------------------
#
# OUTPUT:
# ------------------------------------------------------------------------------
# R column vector holding avg_res, ss_avg_res, and R2
# ------------------------------------------------------------------------------
def lmPredictStats(yhat:matrix<f64>, ytest:matrix<f64>, lm:bool, verbose:bool)
{
y_residual = ytest - yhat;
avg_res = sum(y_residual) / nrow(ytest);
ss_res = sum(y_residual^2);
ss_avg_res = ss_res - nrow(ytest) * avg_res^2;
R2 = 0.0; // TODO This should not be necessary.
if( lm )
R2 = 1 - ss_res / (sum(ytest^2) - nrow(ytest) * (sum(ytest)/nrow(ytest))^2);
else
R2 = sum((yhat - mean(ytest))^2) / sum((ytest - mean(ytest))^2);
if(verbose) {
print("\nAccuracy:" +
"\n--sum(ytest) = " + sum(ytest) +
"\n--sum(yhat) = " + sum(yhat) +
"\n--AVG_RES_Y: " + avg_res +
"\n--SS_AVG_RES_Y: " + ss_avg_res +
"\n--R2: " + R2 );
}
R = rbind(rbind(as.matrix(avg_res), as.matrix(ss_avg_res)), as.matrix(R2));
return R;
}