数据挖掘课程设计报告
题 目: 关联规则挖掘系统
姓 名: xxxxxx
班 级: 计算机0901
学 号: xxxxxxxxxxx
20##年 6 月 19 日
一、设计目的
该程序实现了对简单数据进行频繁项集挖掘的功能,主要使用 Apriori算法,即使用候选产生发现频繁项集。通过这次编程增强编程能力。
二、设计要求
实现数据挖掘的关联规则,能够挖掘数据之间的关联信息,能够读取文件中的数据,能够保存分析结果。界面友好。
三、设计实现流程图
四、实现环境
操作系统WindowsXP
开发环境Netbeans7.1
运行环境 Windows系列操作系统(装有Java运行时环境)
五、实现结果
完整输出结果:
run:
顾客1
商品A
商品B
商品C
顾客2
商品A
商品B
顾客3
商品B
商品C
顾客4
商品C
商品B
商品1
,,,,,,,,,,,,,,,,,,,,,,,,,,,,
3
***************************************************************************************************
候选集1:[商品A] [商品B] [商品C]
频繁集1:[商品A] [商品B] [商品C]
***************************************************************************************************
候选集2:[商品A,商品B] [商品A,商品C] [商品B,商品C]
频繁集2:[商品A,商品B] [商品B,商品C]
***************************************************************************************************
候选集3:[商品A,商品B,商品C]
频繁集3:
***************************************************************************************************
最大频繁集:[商品A,商品B] [商品B,商品C]
***************************************************************************************************
关联规则:
[商品A]=========>[商品B] 1.0
[商品B]=========>[商品A] 0.6666666666666666
[商品B]=========>[商品C] 0.6666666666666666
[商品C]=========>[商品B] 1.0
六、设计小结
这学期学的数据挖掘课程丰富了我的知识面,让我看到了信息技术的巨大生命力和前景。数据挖掘涉及多学科技术的集成,包括数据库和数据仓库技术、统计学、机器学习、高性能计算、模式识别、神经网络、数据可视化、信息检索等技术。通过数据挖掘,可以从数据库提取有趣的知识、规律或高层信息,并可以从不同角度观察或浏览它们,发现的知识可以用于做决策、过程控制、信息管理、查询处理。利用数据挖掘技术可以帮助获得决策所需的多种知识。在许多情况下,用户并不知道数据存在哪些有价值的信息知识,因此对于一个数据挖掘系统而言,它应该能够同时搜索发现多种模式的知识,以满足用户的期望和实际需要。此外数据挖掘系统还应能够挖掘出多种层次(抽象水平)的模式知识。数据挖掘系统还应容许用户指导挖掘搜索有价值的模式知识。
通过这次实践,我对数据挖掘技术有了一个整体的认识。同样在编写程序的时候也遇到了这样或那样的问题。但在老师及同学们的帮助下,艰难的完成了这个系统。这让我对数据挖掘技术以后的深入学习打下了良好的基础。同时我的编程能力进一步提高,Java方面的实战经验进一步丰富。优秀的设计要付诸实践,用户需要的是真真实实的产品,知识转化为产品,才能体现它的价值。
附录:主要代码
1、 APPF.Java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package datamining;
/**
*
* @author Administrator
*/
public class APPF extends javax.swing.JFrame {
/**
* Creates new form APPF
*/
public APPF() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
jTextField2 = new javax.swing.JTextField();
jLabel3 = new javax.swing.JLabel();
jTextField3 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jScrollPane2 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null},
{null, null},
{null, null},
{null, null},
{null, null},
{null, null},
{null, null},
{null, null},
{null, null},
{null, null}
},
new String [] {
"序列", "项目"
}
));
jScrollPane1.setViewportView(jTable1);
jLabel1.setText("支持度:");
jLabel3.setText("挖掘深度:");
jButton1.setText("开始分析");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane2.setViewportView(jTextArea1);
jLabel4.setBackground(new java.awt.Color(255, 255, 255));
jLabel4.setFont(new java.awt.Font("新宋体", 0, 36)); // NOI18N
jLabel4.setText("数据挖掘");
jLabel5.setText("置信度:");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(33, 33, 33)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane2)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jLabel3)
.addGap(41, 41, 41)
.addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jLabel5)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jTextField2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 40, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jButton1)
.addGap(69, 69, 69)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(130, 130, 130))))))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(34, 34, 34)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(24, 24, 24)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel5)
.addComponent(jButton1))
.addGap(25, 25, 25)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 188, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(18, 18, 18)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 167, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
DBManager db = new DBManager();
TransactionContainer transactionContainer = db.getTransactionContainer(jTable1);
Apriori apriori = new Apriori();
//设置参数
double support = Double.parseDouble(jTextField1.getText());
apriori.setMinSupport(support);
double confidence = Double.parseDouble(jTextField2.getText());
apriori.setMinConfidence(confidence);
int deep = Integer.parseInt(jTextField3.getText());
apriori.setDeep(deep); //设置最大挖掘深度,否则直到不产生新频繁集而自动停止
apriori.setContainer(transactionContainer);
//进行分析
apriori.analyse();
//打印信息
String info = apriori.printInfo();
jTextArea1.append(info);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/*
* Set the Nimbus look and feel
*/
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/*
* If Nimbus (introduced in Java SE 6) is not available, stay with the
* default look and feel. For details see
* http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(APPF.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(APPF.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(APPF.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(APPF.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/*
* Create and display the form
*/
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new APPF().setVisible(true);
}
});
}
2、 Apriori.java:
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
static javax.swing.JTable jTable1;
static javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
// End of variables declaration
}
package datamining;
import java.util.*;
public class Apriori {
private double minSupport; //最小支持度
private double minConfidence; //最小置信度
private Map container; //交易数据容器
private int totalSize; //样品数据条数
private List canditateSetList = new ArrayList(); //候选集链表
private List frequentSetList = new ArrayList(); //频繁集链表
private List maxFrequentSetList = new ArrayList(); //最大频繁集
private int maxDeep = -1;
private int curDeep = 0;
private boolean isStop = false;
private Set elementSet = new TreeSet();
private List ruleList = new ArrayList();
//设置挖掘深度,如果为-1,表明直到不产生新的频繁集才停止挖掘
public void setDeep(int k) {
this.maxDeep = k;
}
private double getMinConfidence() {
return minConfidence;
}
public void setMinConfidence(double minConfidence) {
this.minConfidence = minConfidence;
}
private double getMinSupport() {
return minSupport;
}
public void setMinSupport(double minSupport) {
this.minSupport = minSupport;
}
private Map getContainer() {
return container;
}
public void setContainer(TransactionContainer transactionContainer) {
this.container = transactionContainer.getContainer();
this.totalSize = this.container.size();
System.out.println(",,,,,,,,,,,,,,,,,,,,,,,,,,,,");
System.out.println(totalSize);
}
private boolean isStop() {
return this.isStop || (maxDeep > 0 && curDeep == maxDeep);
}
private void stopAnalyse() {
this.isStop = true;
}
/**
* 根据最小支持度,最小自信度,样品数据 进行数据分析
*
*/
public void analyse() {
//计算候选集、频繁集
this.makeCanditateSet1();
this.makeFrequentSet1();
while (!isStop()) {
this.curDeep++; //深度+1
this.makeCanditateSet(); //创建候选集
this.makeFrequentSet(); //创建频繁集
}
//计算最大频繁集
this.makeMaxFrequentSet();
//计算规则
this.makeRules();
}
/**
* 创建规则
*
*/
private void makeRules() {
int ruleNum = 0;
for (Object form : this.maxFrequentSetList) {
TransactionForm tf = (TransactionForm) form;
ruleNum = (1 << tf.getItems().size()) - 2;
for (int i = 1; i <= ruleNum; i++) {
Rule rule = new Rule();
TransactionForm A = new TransactionForm();
TransactionForm B = new TransactionForm();
int j = 0;
Set items = tf.getItems();
for (Object object : items) {
String item = (String) object;
if (((1 << j) & i) != 0) {
A.addItem(item);
} else {
B.addItem(item);
}
j++;
}
TransactionForm AB = new TransactionForm();
AB.addAll(A.getItems());
AB.addAll(B.getItems());
if (getSupportNum(AB) >= (getSupportNum(A) * minConfidence)) {
double confidence = this.getSupportNum(AB) * 1.0 / this.getSupportNum(A);
rule.setA(A);
rule.setB(B);
rule.setConfidence(confidence);
this.ruleList.add(rule);
}
}
}
}
/**
* 计算1项候选集
*
*/
private void makeCanditateSet1() {
Set keySet = container.keySet();
Iterator keyIterator = keySet.iterator();
String TID;
TransactionForm transactionForm;
List list = new ArrayList(); //存放1项候选集
Set item1 = new TreeSet();
while (keyIterator.hasNext()) {
TID = (String) keyIterator.next();
transactionForm = (TransactionForm) (container.get(TID));
Set items = transactionForm.getItems();
for (Object object : items) {
item1.add(object);
}
}
elementSet.addAll(item1);
for (Object object : item1) {
TransactionForm tf = new TransactionForm();
tf.addItem(object);
list.add(tf);
}
this.canditateSetList.add(list);
this.curDeep = 1;
}
/**
* 计算k项候选集
*
*/
private void makeCanditateSet() {
//读取前一个频繁集
List frontFrequentSetList = (List) this.frequentSetList.get(this.curDeep - 2);
List newCanditateList = new ArrayList();
for (Object obj : frontFrequentSetList) {
TransactionForm tf = (TransactionForm) obj;
for (Object item : this.elementSet) {
Set items = new TreeSet();
items.addAll(tf.getItems());
items.add(item);
if (items.size() != this.curDeep) {
continue;
}
TransactionForm newTransactionForm = new TransactionForm();
newTransactionForm.setItems(items);
if (this.getSupportNum(newTransactionForm) != 0) {
if (!isExit(newCanditateList, newTransactionForm)) {
newCanditateList.add(newTransactionForm);
}
}
}
}
this.canditateSetList.add(newCanditateList);
}
/**
* 判断链表中是否存在相同的交易表单
*
*/
private boolean isExit(List list, TransactionForm newForm) {
for (Object form : list) {
Set curSet = ((TransactionForm) form).getItems();
Set newSet = newForm.getItems();
Set tempSet = new TreeSet();
tempSet.addAll(curSet);
int beginSize = tempSet.size();
tempSet.addAll(newSet);
int endSize = tempSet.size();
if (endSize <= beginSize) { //只要有一个集合没变大,说明已存在
return true;
}
}
return false;
}
/**
* 创建最大频繁集
*
*/
private void makeMaxFrequentSet() {
for (int i = frequentSetList.size() - 1; i >= 0; i--) {
List list = (List) frequentSetList.get(i);
for (Object form : list) {
if (!isExit(maxFrequentSetList, (TransactionForm) form)) {
this.maxFrequentSetList.add(form);
}
}
}
}
/**
* 创建频繁集
*
*/
private void makeFrequentSet() {
List frequentList = new ArrayList();
List canditateList = (List) this.canditateSetList.get(this.curDeep - 1);
for (Object form : canditateList) {
TransactionForm tf = (TransactionForm) form;
if (this.getSupportNum(tf) >= minSupport * totalSize) {
frequentList.add(tf);
}
}
this.frequentSetList.add(frequentList);
if (frequentList.size() == 0) {
this.stopAnalyse(); //如果没有新的频繁集,则可停止分析
}
}
/**
* 创建频繁1项集
*
*/
private void makeFrequentSet1() {
List canditateList = (List) canditateSetList.get(0);
List frequentList = new ArrayList();
for (Object object : canditateList) {
TransactionForm tf = (TransactionForm) object;
if (this.getSupportNum(tf) >= minSupport * totalSize) {
frequentList.add(tf);
}
}
this.frequentSetList.add(frequentList);
if (frequentList.size() == 0) {
this.stopAnalyse(); //如果没有新的频繁集,则可停止分析
}
}
/**
* 计算支持数 样品清单对newForm的支持数
*
*/
private int getSupportNum(TransactionForm newForm) {
int counter = 0;
Set keySet = container.keySet();
Iterator keyIterator = keySet.iterator();
String TID;
TransactionForm transactionForm;
while (keyIterator.hasNext()) { //该循环不可以跳出,一定要执行到结束
TID = (String) keyIterator.next();
transactionForm = (TransactionForm) container.get(TID); //样品中的某一清单
Iterator items = transactionForm.getItems().iterator();
Iterator newItems = newForm.getItems().iterator();
boolean isMatch = true;
while (newItems.hasNext()) { //配置新清单中的所有项
String newItem = (String) newItems.next();
boolean findItem = false;
while (items.hasNext()) {
String item = (String) items.next();
if (newItem.equals(item)) {
findItem = true;
break;
}
}
if (!findItem) {
isMatch = false;
break;
}
}
if (isMatch) {
counter++;
}
}
return counter;
}
/**
* 打印分析结果信息
*
*/
public String printInfo() {
for (int i = 0; i < this.curDeep; i++) {
List list = (List) this.canditateSetList.get(i);
if (list.size() == 0) {
continue;
}
System.out.print("候选集" + (i + 1) + ":");
info+="候选集" + (i + 1) + ":";
for (Object object : list) {
TransactionForm transactionForm = (TransactionForm) object;
Set items = transactionForm.getItems();
StringBuffer sb = new StringBuffer("[");
for (Object item : items) {
sb.append(item).append(",");
}
sb.setCharAt(sb.length() - 1, ']');
System.out.print(sb + " ");
info+=sb + " ";
}
list = (List) this.frequentSetList.get(i);
System.out.print("\n频繁集" + (i + 1) + ":");
info+="\n频繁集" + (i + 1) + ":";
for (Object object : list) {
TransactionForm transactionForm = (TransactionForm) object;
Set items = transactionForm.getItems();
StringBuffer sb = new StringBuffer("[");
for (Object item : items) {
sb.append(item).append(",");
}
sb.setCharAt(sb.length() - 1, ']');
System.out.print(sb + " ");
info+=sb + " ";
}
System.out.println("\n***************************************************************************************************");
info+="\n**********************************\n";
}
System.out.print("最大频繁集:");
info+="最大频繁集:";
for (Object object : this.maxFrequentSetList) {
TransactionForm transactionForm = (TransactionForm) object;
Set items = transactionForm.getItems();
StringBuffer sb = new StringBuffer("[");
for (Object item : items) {
sb.append(item).append(",");
}
sb.setCharAt(sb.length() - 1, ']');
System.out.print(sb + " ");
info+=sb + " ";
}
System.out.println("关联规则:");
info+="\n关联规则:\n";
for (Object object : this.ruleList) {
Rule rule = (Rule) object;
Set items = rule.getA().getItems();
StringBuffer A = new StringBuffer("[");
for (Object item : items) {
A.append(item).append(",");
}
A.setCharAt(A.length() - 1, ']');
items = rule.getB().getItems();
StringBuffer B = new StringBuffer("[");
for (Object item : items) {
B.append(item).append(",");
}
B.setCharAt(B.length() - 1, ']');
System.out.println(A + "=========>" + B + "\t" + rule.getConfidence());
info+=A + "=========>" + B + "\t" + rule.getConfidence()+"\n";
}
return info;
}
}
3、TransactionContainer
package datamining;
import java.util.HashMap;
import java.util.Map;
public class TransactionContainer {
private Map container;
TransactionContainer(){
container = new HashMap();
}
public void addForm(TransactionForm transactionForm){
container.put(transactionForm.getTID(), transactionForm);
}
public Map getContainer(){
return container;
}
}
4、TransactionForm
package datamining;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class TransactionForm {
private String TID;
private Set items;
TransactionForm(){
this.items = new TreeSet();
}
public Set getItems() {
return items;
}
public void addItem(Object item){
this.items.add(item);
}
public void setItems(Set items){
this.items = items;
}
public void addAll(Collection collection){
this.items.addAll(collection);
}
public String getTID() {
return TID;
}
public void setTID(String tid) {
TID = tid;
}
}
ID3算法的改进摘要本文基于ID3算法的原有思路再把属性的重要性程度值纳入了属性选择的度量标准中以期获得更适合实际应用的分类划分结…
本科课程设计及实验期末成绩评估系统的数据仓库和数据挖掘设计课程名称数据挖掘课程编号08060116学生姓名cwl学号20xx052…
目录第1章数据挖掘基本理论211数据挖掘的产生212数据挖掘的概念313数据挖掘的步骤3第2章系统分析421系统用户分析422系统…
数据挖掘课程设计报告题目姓名班级学号关联规则挖掘系统xxxxxx计算机0901xxxxxxxxxxx20xx年6月19日1一设计目…
数据挖掘聚类问题PlantsDataSet实验报告1数据源描述11数据特征本实验用到的是关于植物信息的数据集其中包含了每一种植物种…
目录第1章数据挖掘基本理论211数据挖掘的产生212数据挖掘的概念313数据挖掘的步骤3第2章系统分析421系统用户分析422系统…
ID3算法的改进摘要本文基于ID3算法的原有思路再把属性的重要性程度值纳入了属性选择的度量标准中以期获得更适合实际应用的分类划分结…
本科课程设计及实验期末成绩评估系统的数据仓库和数据挖掘设计课程名称数据挖掘课程编号08060116学生姓名cwl学号20xx052…
一设计目的1更深的了解关联规则挖掘的原理和算法2能将数据挖掘知识与计算机编程相结合编写出合理的程序3深入了解Apriori算法二设…
数据挖掘聚类问题PlantsDataSet实验报告1数据源描述11数据特征本实验用到的是关于植物信息的数据集其中包含了每一种植物种…
数据挖掘实验报告一实验名称有线电视服务销售CampR树二实验目的1学习和了解数据挖掘的基础知识学会使用SPSSClementine…