0 前言
本人HIT计算机研在读,专业带队数学建模,长期更新建模教学,有需要的同学欢迎讨论~
本篇文章,学长列举一部分数学建模常用算法,会陆续更新每个算法的详细实现和使用教程。
1 算法原理与流程
CBA算法作为分类算法,他的分类情况也就是给定一些预先知道的属性,然后叫你判断出他的决策属性是哪个值。判断的依据就是Apriori算法挖掘出的频繁项,如果一个项集中包含预先知道的属性,同时也包含分类属性值,然后我们计算此频繁项能否导出已知属性值推出决策属性值的关联规则,如果满足规则的最小置信度的要求,那么可以把频繁项中的决策属性值作为最后的分类结果。具体的算法细节如下:
1、输入数据记录,就是一条条的属性值。
2、对属性值做数字的替换(按照列从上往下寻找属性值),就类似于Apriori中的一条条事务记录。
3、根据这个转化后的事务记录,进行Apriori算法计算,挖掘出频繁项集。
4、输入查询的属性值,找出符合条件的频繁项集(需要包含查询属性和分类决策属性),如果能够推导出这样的关联规则,就算分类成功,输出分类结果。
算法实现
这里给出CBA关联分析的实现类:
package DataMining_CBA;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import DataMining_CBA.AprioriTool.AprioriTool;
import DataMining_CBA.AprioriTool.FrequentItem;
/**
* CBA算法(关联规则分类)工具类
*
* @author lyq
*
*/
public class CBATool {
// 年龄的类别划分
public final String AGE = "Age";
public final String AGE_YOUNG = "Young";
public final String AGE_MIDDLE_AGED = "Middle_aged";
public final String AGE_Senior = "Senior";
// 测试数据地址
private String filePath;
// 最小支持度阈值率
private double minSupportRate;
// 最小置信度阈值,用来判断是否能够成为关联规则
private double minConf;
// 最小支持度
private int minSupportCount;
// 属性列名称
private String[] attrNames;
// 类别属性所代表的数字集合
private ArrayList<Integer> classTypes;
// 用二维数组保存测试数据
private ArrayList<String[]> totalDatas;
// Apriori算法工具类
private AprioriTool aprioriTool;
// 属性到数字的映射图
private HashMap<String, Integer> attr2Num;
private HashMap<Integer, String> num2Attr;
public CBATool(String filePath, double minSupportRate, double minConf) {
this.filePath = filePath;
this.minConf = minConf;
this.minSupportRate = minSupportRate;
readDataFile();
}
/**
* 从文件中读取数据
*/
private void readDataFile() {
File file = new File(filePath);
ArrayList<String[]> dataArray = new ArrayList<String[]>();
try {
BufferedReader in = new BufferedReader(new FileReader(file));
String str;
String[] tempArray;
while ((str