Finding frequent item sets
The first step of the algorithm that we implement is based on the support measure. This function returns a set of all item sets with support larger than minSupport
:
func frequentItemSets(minSupport: Double) -> Set<ItemSet> { var itemSets = Set<ItemSet>() let emptyItemSet: ItemSet = ItemSet() supporters[emptyItemSet] = Array(0 ..< transactions.count)
Here we use the priority queue data structure to keep track of possible extensions.
Note
There is no priority queue implementation in the Foundation or Swift standard libraries, and standard data structures are out of the scope of this book. We are using the open source implementation by David Kopec (MIT license): https://github.com/davecom/SwiftPriorityQueue.
To make it work with item sets we had to change the code a bit—instead of being parameterized with the comparable types, it is now parameterized with types conforming to the equatable protocol:
var queue = PriorityQueue...