数据库

 首页 > 数据库 > MySql > Apriori算法的Python实现

Apriori算法的Python实现

分享到:
【字体:
导读:
         摘要:Apriori算法是数据挖掘中频发模式挖掘的鼻祖,从60年代就开始流行,其算法思想也十分简单朴素,首先挖掘出长度为1的频繁模式,然后k=2将这些频繁模式合并组成长度为k的频繁模式,算出它们的频繁次数,而且要保证其所有k-1长度的子集也是频繁的,值得注意的是,为了避免重复,合并的时候,只合并那些前k-2个字符都相同,而k...

Apriori算法的Python实现

Apriori算法是数据挖掘中频发模式挖掘的鼻祖,从60年代就开始流行,其算法思想也十分简单朴素,首先挖掘出长度为1的频繁模式,然后k=2

将这些频繁模式合并组成长度为k的频繁模式,算出它们的频繁次数,而且要保证其所有k-1长度的子集也是频繁的,值得注意的是,为了避免重复,合并的时候,只合并那些前k-2个字符都相同,而k-1的字符一边是少于另一边的。

以下是算法的Python实现:

__author__ = 'linfuyuan'
min_frequency = int(raw_input('please input min_frequency:'))
file_name = raw_input('please input the transaction file:')
transactions = []


def has_infrequent_subset(candidate, Lk):
    for i in range(len(candidate)):
        subset = candidate[:-1]
        subset.sort()
        if not ''.join(subset) in Lk:
            return False
        lastitem = candidate.pop()
        candidate.insert(0, lastitem)
    return True


def countFrequency(candidate, transactions):
    count = 0
    for transaction in transactions:
        if transaction.issuperset(candidate):
            count += 1
    return count


with open(file_name) as f:
    for line in f.readlines():
        line = line.strip()
        tokens = line.split(',')
        if len(tokens) > 0:
            transaction = set(tokens)
            transactions.append(transaction)
currentFrequencySet = {}
for transaction in transactions:
    for item in transaction:
        time = currentFrequencySet.get(item, 0)
        currentFrequencySet[item] = time + 1
Lk = set()
for (itemset, count) in currentFrequencySet.items():
    if count >= min_frequency:
        Lk.add(itemset)
print ', '.join(Lk)

while len(Lk) > 0:
    newLk = set()
    for itemset1 in Lk:
        for itemset2 in Lk:
            cancombine = True
            for i in range(len(itemset1)):
                if i < len(itemset1) - 1:
                    cancombine = itemset1[i] == itemset2[i]
                    if not cancombine:
                        break
                else:
                    cancombine = itemset1[i] < itemset2[i]
                    if not cancombine:
                        break
            if cancombine:
                newitemset = []
                for char in itemset1:
                    newitemset.append(char)
                newitemset.append(itemset2[-1])
                if has_infrequent_subset(newitemset, Lk) and countFrequency(newitemset, transactions) >= min_frequency:
                    newLk.add(''.join(newitemset))
    print ', '.join(newLk)
    Lk = newLk


Apriori算法的Python实现
分享到:
sql server 中的case when then 语句
sql server 中的case when then 语句--select DataName , --case Code -- -- when &#039;W01&#039;  then &#039;男&#039; -- -- when &#039;W07&#039;  then &#039;女&#039; -- -- else &#039;其他&#039; -- -- end as Code --from dbo.HistoryData select DataName, ( case when Code=&#039;W01&#039;  then &#039;...
sqoop使用例子
sqoop使用例子简介: sqoop是工具,一个可以把ORACLE、MYSQL中的数据导入到HDFS、HIVE、HBASE中(反过来也可以)的工具。下面是一些使用的例子。留下做个参考: #从Mysql中抽取数据到HDFS.问题:文件太多,全他妈是小文件;目标目录如果已经存在会报错 sqoop import --connect jdbc:mysql://10.10.244.137/test --username ...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……