forked from apache/predictionio
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Data.scala
121 lines (107 loc) · 3.35 KB
/
Data.scala
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package io.prediction.engines.itemrank
import com.github.nscala_time.time.Imports._
import io.prediction.{
//BaseEvaluationParams,
BaseValidationParams,
BaseEvaluationDataParams,
BaseTrainingDataParams,
BaseValidationDataParams,
BaseTrainingData,
BaseFeature,
BasePrediction,
BaseActual,
BaseModel,
BaseAlgoParams,
BaseValidationUnit,
BaseValidationResults,
BaseCrossValidationResults
}
// param to evaluator, it applies to both DataPrep and Validator
class EvalParams(
// TODO
//val iterations: Int
val appid: Int,
val itypes: Option[Set[String]],
// action for training
val actions: Map[String, Option[Int]], // ((view, 1), (rate, None))
val conflict: String, // conflict resolution, "latest" "highest" "lowest"
//val recommendationTime: Long,
val seenActions: Option[Set[String]], // (view, rate)
//val ignoreInactive: Boolean,
val hours: Int,
val trainStart: DateTime,
val testStart: DateTime,
val testUntil: DateTime,
val goal: Set[String]
) extends BaseEvaluationDataParams with BaseValidationParams {
override def toString = s"appid=${appid},itypes=${itypes}" +
s"actions=${actions}, conflict=${conflict}"
}
// param for preparing training
class TrainDataPrepParams(
val appid: Int,
val itypes: Option[Set[String]],
val actions: Map[String, Option[Int]], // ((view, 1), (rate, None))
val conflict: String, // conflict resolution, "latest" "highest" "lowest"
//val recommendationTime: Long,
val seenActions: Option[Set[String]], // (view, rate)
//val ignoreInactive: Boolean
// use all data if None
val startUntil: Option[Tuple2[DateTime, DateTime]]
) extends BaseTrainingDataParams {
override def toString = {
startUntil.map( x => s"start=${x._1} until=${x._2}").getOrElse("All")
}
}
// param for preparing evaluation data
class ValidationDataPrepParams(
val appid: Int,
val itypes: Option[Set[String]],
val startUntil: Tuple2[DateTime, DateTime],
val goal: Set[String] // action name
) extends BaseValidationDataParams {
override def toString = s"start=${startUntil._1} until=${startUntil._2}"
}
class ItemTD(
val iid: String,
val itypes: Seq[String],
val starttime: Option[Long],
val endtime: Option[Long],
val inactive: Boolean) extends Serializable
class RatingTD(
val uindex: Int,
val iindex: Int,
val rating: Int,
val t: Long) extends Serializable
class TrainingData(
val users: Map[Int, String], // uindex->uid
val items: Map[Int, ItemTD], // iindex->itemTD
//val possibleItems: Set[Int], // iindex
val rating: Seq[RatingTD],
val seen: Set[(Int, Int)] // uindex->iindex
) extends BaseTrainingData {}
// "Feature" here means prediction Input
class Feature(
val uid: String,
val items: Seq[String] // items to be ranked
) extends BaseFeature {
override def toString = s"[${uid}, ${items}]"
}
// prediction output
class Prediction(
// the ranked items and score
val items: Seq[(String, Double)]) extends BasePrediction {
override def toString = s"${items}"
}
class Actual(
// actual items the user has performed actions on
val items: Seq[String]) extends BaseActual {
override def toString = s"${items}"
}
class ValidationUnit(
val f: Feature,
val p: Prediction,
val a: Actual,
val score: Double,
val baseline: Double
) extends BaseValidationUnit {}