Defining data structures
What we want to have by the end of this chapter is a rule learning algorithm called Apriori. We will learn about the algorithm details later; for now, we only want to define the data structures that we will work with throughout the chapter, along with some utility functions.
The generic structure for the algorithm is as follows:
public struct Apriori<Item: Hashable & Equatable> {
In the simplest case, the ordering of the items in the transaction doesn't matter, and neither does their number nor the associated timestamps. This means that we consider our item sets and transactions as mathematical or Swift sets:
public typealias ItemSet = Set<Item>
The parameter I
is a type of item in your transactions. Next, we have to implement some structures for subsets and rules:
class Subsets: Sequence { var subsets: [ItemSet] init(_ set: ItemSet) { self.subsets = Array(set).combinations().map(Set.init) } func makeIterator() -> AnyIterator<ItemSet...