Apriori挖掘频繁模式,关联规则(附代码实现 java+mysql)

Apriori算法在数据挖掘中主要挖掘频繁模式和关联规则,这个算法比较简单,但是开销很大,需要扫描数据库。

预备知识:
支持度(Support)的公式是:Support(A->B)=P(A U B)。支持度揭示了A与B同时出现的概率。如果A与B同时出现的概率小,说明A与B的关系不大;如果A与B同时出现的非常频繁,则说明A与B总是相关的。支持度: P(A∪B),即A和B这两个项集在事务集D中同时出现的概率。
置信度(Confidence)的公式式:Confidence(A->B)=P(A | B)。置信度揭示了A出现时,B是否也会出现或有多大概率出现。如果置信度度为100%,则A和B可以捆绑销售了。如果置信度太低,则说明A的出现与B是否出现关系不大。置信度: P(B|A),即在出现项集A的事务集D中,项集B也同时出现的概率。

示例:某销售手机的商场中,70%的手机销售中包含充电器的销售,而在所有交易中56%的销售同时包含手机和充电器。则在此例中,支持度为56%,置信度为70%。

算法原理:扫描整体数据集,寻找满足支持度阈值和置信度阈值的频繁项集。每一次依次增加一项,就是说第1次找满足支持度阈值和置信度阈值的频繁1项集,第2次找满足支持度阈值和置信度阈值的频繁2项集;第k次找满足支持度阈值和置信度阈值的频繁k项集。

过程描述:

这里写图片描述

实现代码:
目的:挖掘频繁项集和关联规则;数据可以使数字也可以是文本。

package ne;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class apriori2
{
   
  private final static int SUPPORT = 2; // 支持度阈值
  private final static double CONFIDENCE = 0.7; 
  // 置信度阈值
  private final static String ITEM_SPLIT = ";"; 
  // 项之间的分隔符
  private final static String CON = "->";
   // 项之间的分隔符

  /**
   * 算法主程序
   * @param dataList
   * @return
   */
  public Map<String, Integer> apriori(ArrayList<String> dataList)
  {
    Map<String, Integer> stepFrequentSetMap = new HashMap<>();
    stepFrequentSetMap.putAll(findFrequentOneSets(dataList));

    Map<String, Integer> frequentSetMap = new HashMap<String, Integer>();//频繁项集
  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
以下是一个简单的 Apriori 算法实现,用于关联规则挖掘: ```python import itertools def apriori(transactions, support_threshold, confidence_threshold): # 计算每个项的支持度 items = {} for transaction in transactions: for item in transaction: if item in items: items[item] += 1 else: items[item] = 1 # 去除不满足支持度阈值的项 items = {item: count for item, count in items.items() if count >= support_threshold} # 构建频繁项集 frequent_itemsets = [{item} for item in items] k = 2 while True: candidate_itemsets = set(itertools.chain(*[set(itertools.combinations(itemset, k)) for itemset in frequent_itemsets])) if not candidate_itemsets: break # 计算候选项集的支持度 item_counts = {itemset: 0 for itemset in candidate_itemsets} for transaction in transactions: for itemset in candidate_itemsets: if set(itemset).issubset(transaction): item_counts[itemset] += 1 # 去除不满足支持度阈值的候选项集 candidate_itemsets = {itemset for itemset, count in item_counts.items() if count >= support_threshold} # 构建频繁项集 frequent_itemsets = list(candidate_itemsets) k += 1 # 构建关联规则 rules = [] for itemset in frequent_itemsets: for item in itemset: antecedent = itemset - {item} consequent = {item} confidence = items[itemset] / items[antecedent] if confidence >= confidence_threshold: rules.append((antecedent, consequent, confidence)) return rules ``` 这个实现接受三个参数:transactions(事务列表),support_threshold(支持度阈值)和confidence_threshold(置信度阈值)。输入的事务列表应该是一个列表,其中每个元素表示一个事务,是一个由项组成的集合。支持度和置信度阈值应该是介于0和1之间的浮点数。函数将返回一个规则列表,其中每个规则由前提、后件和置信度组成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值