📄 apriori.java
字号:
package apriori;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class Apriori {
public static double v = 0.4;
public static void main(String args[]) throws Exception {
System.out.println(System.currentTimeMillis());
ItemSetDB itemSetDB = new ItemSetDB();
DBConnect.getConnection();
String sql = "select * from apriori;";
try {
// 获取原始数据
ResultSet rs = DBConnect.statement.executeQuery(sql);
while (rs.next()) {
int tid = rs.getInt("tid");
String content = rs.getString("item");
Item item = new Item(tid, content);
itemSetDB.insert(item);
}
// 发现 频繁项目集 集合算法
// 1.获取L1
ArrayList<ItemSet> itemSetList = itemSetDB.itemSetList;
ArrayList<ItemSet> tempL = new ArrayList<ItemSet>();
ArrayList<ItemSet> l = new ArrayList<ItemSet>();
// 判断是否符合支持度
for (int i = 0; i < itemSetList.size(); i++) {
if (itemSetList.get(i).number >= itemSetList.size() * v) {
tempL.add(itemSetList.get(i));
l.add(itemSetList.get(i));
}
}
// 循环判断当前的k-1_频繁项目集集合
while (tempL.size() > 0) {
ArrayList<ItemSet> tempC = aprioriGen(tempL);
tempL = new ArrayList<ItemSet>();
for (itemSetDB.setFirst(); itemSetDB.isInList(); itemSetDB
.next()) {
for (int i = 0; i < tempC.size(); i++) {
ArrayList<Item> itemSet = (ArrayList<Item>) itemSetDB
.currValue();
ArrayList<Item> temp = tempC.get(i).getItemList();
int j;
for (j = 0; j < temp.size(); j++) {
int k;
for (k = 0; k < itemSet.size(); k++) {
if (temp.get(j).getObj().equals(
itemSet.get(k).getObj())) {
break;
}
}
if (k == itemSet.size())
break;
}
if (j == temp.size()) {
tempC.get(i).number++;
}
}
}
for (int i = 0; i < tempC.size(); i++) {
if (tempC.get(i).number >= itemSetList.size() * v) {
l.add(tempC.get(i));
tempL.add(tempC.get(i));
}
}
}
for (int i = 0; i < l.size(); i++) {
ArrayList<Item> itemList = l.get(i).getItemList();
for (int j = 0; j < itemList.size(); j++) {
System.out.print(itemList.get(j).getObj());
}
System.out.println("\t" + l.get(i).number);
}
System.out.println(System.currentTimeMillis());
// 关联规则算法
/*ArrayList<ItemSet> maxFrequentItemSet = new ArrayList<ItemSet>();
ArrayList<ItemSet> maxFrequentItemSubset = new ArrayList<ItemSet>();
ArrayList<Dependence> dependence = new ArrayList<Dependence>();
for(int i=l.size()-1;i >= 0;i--){
ItemSet itemSetTemp = l.get(i);
if(isNotExist(itemSetTemp,maxFrequentItemSubset)){
maxFrequentItemSet.add(itemSetTemp);
int size = itemSetTemp.getItemList().size();
for(int j =1 ;j<Math.pow(2, size);j++){
ItemSet itemSetTempSub = new ItemSet();
ArrayList<Item> itemList = new ArrayList<Item>();
while(j!=0){
itemList.add(itemSetTemp.getItemList().get(j%2));
}
maxFrequentItemSubset.
}
}
}
*/
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 生成候选项的方法
public static ArrayList<ItemSet> aprioriGen(ArrayList<ItemSet> tempL) {
ArrayList<ItemSet> tempC = new ArrayList<ItemSet>();
for (int i = 0; i < tempL.size(); i++)
for (int j = i + 1; j < tempL.size(); j++) {
ItemSet tempI = new ItemSet();
ArrayList<Item> itemListTemp = new ArrayList<Item>();
ArrayList<Item> temp = ((ItemSet) tempL.get(i)).getItemList();
for (int k = 0; k < temp.size(); k++) {
itemListTemp.add(temp.get(k));
}
tempI.setItemList(itemListTemp);
ItemSet tempJ = (ItemSet) tempL.get(j);
int size = tempI.getItemList().size();
int k;
for (k = 0; k < size - 1; k++) {
if (!tempI.getItemList().get(k).getObj().equals(
tempJ.getItemList().get(k).getObj()))
break;
}
if (k == size - 1) {
ArrayList<Item> itemList = new ArrayList<Item>();
itemList = tempI.getItemList();
itemList.add(tempJ.getItemList().get(k));
tempI.setItemList(itemList);
if (!hasInfrequent(tempI, tempL))
tempC.add(tempI);
}
}
return tempC;
}
// 判断是否有 非频繁项目集 的子集,有返回true无返回false
public static boolean hasInfrequent(ItemSet itemSet,
ArrayList<ItemSet> tempL) {
ArrayList<Item> itemList = itemSet.getItemList();
for (int i = 0; i < itemList.size(); i++) {
ArrayList<Item> temp = new ArrayList<Item>();
for (int j = 0; j < itemList.size(); j++) {
if (j != i)
temp.add(itemList.get(j));
}
int j;
for (j = 0; j < tempL.size(); j++) {
ArrayList<Item> itemListTemp = tempL.get(j).getItemList();
int k;
for (k = 0; k < temp.size(); k++) {
if (!(temp.get(k).getObj().equals(itemListTemp.get(k)
.getObj()))) {
break;
}
}
if (k == temp.size())
break;
}
if (j == tempL.size())
return true;
}
return false;
}
public static boolean isNotExist(ItemSet itemSet,ArrayList<ItemSet> maxFrequentItemSubset){
for(int i = 0;i<maxFrequentItemSubset.size();i++){
if(itemSet.equal(maxFrequentItemSubset.get(i)))
return false;
}
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -