00001
00010 #include <GKlib.h>
00011
00012
00013
00014
00015
00016 float ComputeAccuracy(int n, gk_fkv_t *list)
00017 {
00018 int i, P, N, TP, FN = 0;
00019 float bAccuracy = 0.0;
00020 float acc;
00021
00022 for (P=0, i=0;i<n;i++)
00023 P += (list[i].val == 1? 1 : 0);
00024 N = n - P;
00025
00026 TP = FN = 0;
00027
00028 for(i=0; i<n; i++){
00029 if (list[i].val == 1)
00030 TP++;
00031 else
00032 FN++;
00033
00034 acc = (TP + N - FN) * 100.0/ (P + N) ;
00035 if (acc > bAccuracy)
00036 bAccuracy = acc;
00037 }
00038
00039 return bAccuracy;
00040 }
00041
00042
00043
00044
00045
00046
00047 float ComputeROCn(int n, int maxN, gk_fkv_t *list)
00048 {
00049 int i, P, TP, FP, TPprev, FPprev, AUC;
00050 float prev;
00051
00052 FP = TP = FPprev = TPprev = AUC = 0;
00053 prev = list[0].key -1;
00054
00055 for (P=0, i=0; i<n; i++)
00056 P += (list[i].val == 1 ? 1 : 0);
00057
00058 for (i=0; i<n && FP < maxN; i++) {
00059 if (list[i].key != prev) {
00060 AUC += (TP+TPprev)*(FP-FPprev)/2;
00061 prev = list[i].key;
00062 FPprev = FP;
00063 TPprev = TP;
00064 }
00065 if (list[i].val == 1)
00066 TP++;
00067 else {
00068 FP++;
00069 }
00070 }
00071 AUC += (TP+TPprev)*(FP-FPprev)/2;
00072
00073 return (TP*FP > 0 ? (float)(1.0*AUC/(P*FP)) : 0.0);
00074 }
00075
00076
00077
00078
00079
00080
00081 float ComputeMedianRFP(int n, gk_fkv_t *list)
00082 {
00083 int i, P, N, TP, FP;
00084
00085 P = N = 0;
00086 for (i=0; i<n; i++) {
00087 if (list[i].val == 1)
00088 P++;
00089 else
00090 N++;
00091 }
00092
00093 FP = TP = 0;
00094 for (i=0; i<n && TP < (P+1)/2; i++) {
00095 if (list[i].val == 1)
00096 TP++;
00097 else
00098 FP++;
00099 }
00100
00101 return 1.0*FP/N;
00102 }
00103
00104
00105
00106
00107 float ComputeMean (int n, float *values)
00108 {
00109 int i;
00110 float mean = 0.0;
00111
00112 for(i=0; i < n; i++)
00113 mean += values[i];
00114
00115 return 1.0 * mean/ n;
00116 }
00117
00118
00119
00120
00121 float ComputeStdDev(int n, float *values)
00122 {
00123 int i;
00124 float mean = ComputeMean(n, values);
00125 float stdDev = 0;
00126
00127 for(i=0;i<n;i++){
00128 stdDev += (values[i] - mean)* (values[i] - mean);
00129 }
00130
00131 return sqrt(1.0 * stdDev/n);
00132 }