好了,本章的最後一個例子很酷,而你有可能正在想:「夥計,這個算法應該很快,因為只有1400條推文!」你的想法是正確的。下面在更大的文件上看下運行效果。在源數據集合中,有一個kosarak.dat文件,它包含將近100萬條記錄1。該文件中的每一行包含某個用戶瀏覽過的新聞報道。一些用戶只看過一篇報道,而有些用戶看過2498篇報道。用戶和報道被編碼成整數,所以查看頻繁項集很難得到更多的東西,但是該數據對於展示FP-growth算法的速度十分有效。
1. Hungarian online news portal clickstream retrieved July 11, 2011; from Frequent Itemset Mining Dataset Repository, http://fimi.ua.ac.be/data/, donated by Ferenc Bodon.
首先,將數據集導入到列表:
>>> parsedDat = [line.split for line in open('kosarak.dat').readlines]
接下來需要對初始集合格式化:
>>> initSet = fpGrowth.createInitSet(parsedDat)
然後構建FP樹,並從中尋找那些至少被10萬人瀏覽過的新聞報道。
>>> myFPtree, myHeaderTab = fpGrowth.createTree(initSet, 100000)
在我這台簡陋的筆記本電腦上,構建樹以及掃瞄100萬行只需要幾秒鐘,這展示了FP-growth算法的強大威力。下面需要創建一個空列表來保存這些頻繁項集:
>>> myFreqList =
>>> fpGrowth.mineTree(myFPtree, myHeaderTab, 100000, set(), myFreqList)
接下來看下有多少新聞報道或報道集合曾經被10萬或者更多的人瀏覽過:
>>> len(myFreqList)
9
總共有9個。下面看看都是哪些:
>>> myFreqList
[set(['1']), set(['1', '6']), set(['3']), set(['11', '3']), set(['11', '3','6']), set(['3', '6']), set(['11']), set(['11', '6']), set(['6'])]
可以使用其他設置來查看運行結果,比如降低置信度級別。