用java写Apriori算法
时间: 2024-05-13 10:15:07 浏览: 21
下面是一个简单的 Java 实现 Apriori 算法的例子:
```java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
public class Apriori {
public static ArrayList<ArrayList<String>> apriori(ArrayList<ArrayList<String>> transactionList, double minSupport) {
ArrayList<ArrayList<String>> itemSetList = new ArrayList<>();
HashMap<ArrayList<String>, Integer> supportCountMap = new HashMap<>();
HashMap<Integer, ArrayList<ArrayList<String>>> frequentItemSetMap = new HashMap<>();
//初始化
for (ArrayList<String> transaction : transactionList) {
for (String item : transaction) {
ArrayList<String> itemSet = new ArrayList<>();
itemSet.add(item);
if (!itemSetList.contains(itemSet)) {
itemSetList.add(itemSet);
}
}
}
//获取频繁项集
int k = 1;
while (!itemSetList.isEmpty()) {
ArrayList<ArrayList<String>> freqItemSetList = new ArrayList<>();
for (ArrayList<String> itemSet : itemSetList) {
int count = 0;
for (ArrayList<String> transaction : transactionList) {
if (transaction.containsAll(itemSet)) {
count++;
}
}
double support = (double) count / transactionList.size();
if (support >= minSupport) {
supportCountMap.put(itemSet, count);
freqItemSetList.add(itemSet);
}
}
if (!freqItemSetList.isEmpty()) {
frequentItemSetMap.put(k, freqItemSetList);
itemSetList = generateCandidateItemSets(freqItemSetList);
k++;
} else {
break;
}
}
//返回频繁项集
ArrayList<ArrayList<String>> frequentItemSets = new ArrayList<>();
for (int key : frequentItemSetMap.keySet()) {
frequentItemSets.addAll(frequentItemSetMap.get(key));
}
return frequentItemSets;
}
private static ArrayList<ArrayList<String>> generateCandidateItemSets(ArrayList<ArrayList<String>> itemSetList) {
ArrayList<ArrayList<String>> candidateItemSetList = new ArrayList<>();
for (int i = 0; i < itemSetList.size(); i++) {
for (int j = i + 1; j < itemSetList.size(); j++) {
ArrayList<String> itemSet1 = itemSetList.get(i);
ArrayList<String> itemSet2 = itemSetList.get(j);
if (itemSet1.subList(0, itemSet1.size() - 1).equals(itemSet2.subList(0, itemSet2.size() - 1))) {
ArrayList<String> candidateItemSet = new ArrayList<>(itemSet1);
candidateItemSet.add(itemSet2.get(itemSet2.size() - 1));
candidateItemSetList.add(candidateItemSet);
}
}
}
return candidateItemSetList;
}
public static void main(String[] args) {
ArrayList<ArrayList<String>> transactionList = new ArrayList<>();
transactionList.add(new ArrayList<>(Arrays.asList("A", "B", "C")));
transactionList.add(new ArrayList<>(Arrays.asList("A", "B", "D")));
transactionList.add(new ArrayList<>(Arrays.asList("B", "C", "D")));
transactionList.add(new ArrayList<>(Arrays.asList("A", "C", "D")));
transactionList.add(new ArrayList<>(Arrays.asList("A", "B", "E")));
transactionList.add(new ArrayList<>(Arrays.asList("B", "C", "E")));
double minSupport = 0.5;
ArrayList<ArrayList<String>> frequentItemSets = apriori(transactionList, minSupport);
for (ArrayList<String> frequentItemSet : frequentItemSets) {
System.out.println(frequentItemSet);
}
}
}
```
在这个例子中,我们使用了一个名为 `apriori` 的函数来实现 Apriori 算法。该函数接受两个参数:一个事务列表和最小支持度。该函数返回频繁项集列表。
在函数中,我们首先初始化了一个项集列表和一个支持计数映射。然后我们循环执行以下步骤:
1. 扫描每个项集,计算它们在事务列表中的支持度。
2. 如果支持度大于或等于最小支持度,则将该项集添加到频繁项集列表中。
3. 生成下一个项集列表。
在生成下一个项集列表时,我们使用了一个名为 `generateCandidateItemSets` 的函数。该函数接受一个项集列表,并返回一个包含所有可能的候选项集的列表。
最后,我们在主函数中使用了一个简单的事务列表和最小支持度值来测试我们的实现。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)