对训练元组进行概念空间挖掘来实现分类(java实现)

挖掘概念空间来实现分类这种算法在现在已经不太实用,因为它分类准确率比较低 ,而且不太适用于大规模数据。

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.StringTokenizer; public class FindS { private Map<Integer, ArrayList<String>> datasets; //数据集 private int attrNum; //属性个数 /** * 构造函数 */ public FindS() { datasets = null; } /** * 设置要时行概念挖掘的数据集 * @param datasets:数据集 */ public void setDatasets(Map<Integer, ArrayList<String>> datasets){ this.datasets = datasets; } /** * 设置候选属性个数(分类属性和标识属性除外) * @param num:候选属性个数 */ public void setAttrNum(int num){ this.attrNum = num; } /** * 执行概念挖掘 * @return set:概念集 */ public String[] execute(){ if(this.datasets == null || this.datasets.size() == 0){ //没有数据,返回null System.out.println("No data to process!"); return null; } String[] strConcept = new String[attrNum - 1]; //存储临时概念 for(int i = 0; i < this.attrNum - 1; i++){ //初始将临时概念空间最特化,用0表示概念空间某属性值的最特 strConcept[i] = "0"; } ArrayList<String> instance; //当前训练元组实例 for(int j = 0; j < this.datasets.size(); j++){ //对每个实例,逐步最小程度泛化概念空间 instance = datasets.get(j + 1); if (instance.get(attrNum - 1).toLowerCase().equals("yes")) { //仅考虑正元组 for(int m = 0; m < attrNum - 1; m++){ if(!strConcept[m].toString().equals(instance.get(m).toString())){ if (strConcept[m].equals("0")) {//0与非0值的最小泛化就是该非0值 strConcept[m] = instance.get(m); }else {//非0值与另一个不同的非0值的最小泛化就用表示通配的?号来表示 strConcept[m] = "?"; } } } } } return strConcept; //返回概念空间 } /** * 从控制台读取要进行概念挖掘的训练数据 * @param data:数据容器 * @return map:训练集 * @throws IOException */ public Map<Integer, ArrayList<String>> readData(Map<Integer, ArrayList<String>> data) throws IOException{ BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String str = ""; while(!(str = reader.readLine()).equals("")){ StringTokenizer tokenizer = new StringTokenizer(str); String key = tokenizer.nextToken(); ArrayList<String> s = new ArrayList<String>(); while(tokenizer.hasMoreTokens()){ s.add(tokenizer.nextToken()); } data.put(Integer.parseInt(key), s); } return data; } public static void main(String[] args) { Map<Integer, ArrayList<String>> data = new HashMap<Integer, ArrayList<String>>(); FindS findS = new FindS(); try { findS.readData(data); } catch (IOException e) { System.out.println("IOException occurs when reading data!"); } findS.setAttrNum(6); findS.setDatasets(data); String[] concept = findS.execute(); for(int i = 0; i< concept.length; i++){ System.out.print(concept[i].toString() + " "); } System.out.println(); } } 测试算法: 训练元组: Date Sky AirTemp Humidity Wind Water Swimming 1 Sunny Warm High Strong Warm2 Yes 2 Sunny Warm Normal Strong Warm2 No 3 Rainy Cold High Strong Warm2 No 4 Sunny Warm High Strong Cool2 Yes 概念空间挖掘结果 Sunny Warm High Strong ? 由挖掘结果可知,当天气是Sunny,空气质量是Warm,湿度为High,风力为Strong,水温为任意值是,分类结果为yes,即会去游泳;反之不符合概念空间的元组分类为No

测试算法:

训练元组:

Date Sky AirTemp Humidity Wind Water Swimming

1 Sunny Warm High Strong Warm2 Yes

2 Sunny Warm Normal Strong Warm2 No

3 Rainy Cold High Strong Warm2 No

4 Sunny Warm High Strong Cool2 Yes

概念空间挖掘结果

Sunny Warm High Strong ?

由挖掘结果可知,当天气是Sunny,空气质量是Warm,湿度为High,风力为Strong,水温为任意值是,分类结果为yes,即会去游泳;反之不符合概念空间的元组分类为No

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值