数据仓库与数据挖掘技术
答案
一、简答
1.为什么需要对数据进行预处理?数据预处理主要包括哪些工作(需要对数据进行哪些方面预处理)?
(1)现实世界的数据是杂乱的,数据多了什么问题会出现。数据库极易受到噪音数据(包含错误或孤立点)、遗漏数据(有些感兴趣的属性缺少属性值或仅包含聚集数据)和不一致数据(在编码或者命名上存在差异)的侵扰,因为数据库太大,常常多达几G或更多。进行数据预处理,提高数据质量,从而提高挖掘结果质量。
(2)数据预处理主要包括:数据清理:去除数据中的噪音、纠正不一致;数据集成:将数据由多个源合并成一致的数据存储,如数据仓库或数据方;数据交换:规范化或聚集可以改进涉及距离度量的挖掘算法精度和有效性;数据归约:通过聚集、删除冗余特征或聚类等方法来压缩数据。数据离散化:属于数据归约的一部分,通过概念分层和数据的离散化来规约数据,对数字型数据特别重要。
2. 什么叫有监督学习?什么叫无监督学习?
监督学习(Supervised learning) 是通过发现数据属性和类别属性之间的关联模式,并通过利用这些模式来预测未知数据实例的类别属性。监督学习又称为分类Classification或归纳学习Inductive Learning。
无监督学习(Unsupervised learning)即聚类技术。在一些应用中,数据的类别属性是缺失的,用户希望通过浏览数据来发现其的某些内在结构。聚类就是发现这种内在结构的技术。 3.什么是数据仓库的星形模式?它与雪花模式有何不同?
雪花模式与星形模式不同在于:雪花模式的维表可能是规范化形式,以便减少冗余。这种表易于维护,并节省存储空间,因为当维结构作为列包含在内时,大维表可能非常大。然而,与巨大的事实表相比,这种空间的节省可以忽略。此外,由于执行查询更多的连接操作,雪花结构可能降低浏览的性能。这样系统的性能可能受影响。因此,在数据仓库设计中,雪花模式不如星形模式流行。
二、写出伪代码
三
答:(1)所有频繁项集为:[E,K,O] [K,M] [K,Y] (2) 关联规则:
[O]->[E,K] 1.0
[E,O] -> [K] 1.0 [K,O] -> [E] 1.0 [M] -> [K] 1.0 [Y] -> [K] 1.0
答:
a) 决策树表示一种树型结构,它由它的分来对该类型对象依靠属性进行分类。每个决策树
可以依靠对源数据库的分割进行数据测试。这个过程以递归的方式对树进行修剪。当不能再分割时,递归完成。因此决策树不会无限循环。 b) 0 c) size
d) Children,SIN,class
public class BayesClassifier {
private TrainingDataManager tdm;//训练集管理器 private String trainnigDataPath;//训练集路径 private static double zoomFactor = 10.0f; /**
* 默认的构造器,初始化训练集 */
public BayesClassifier() {
tdm =new TrainingDataManager(); }
/**
* 计算给定的文本属性向量X在给定的分类Cj中的类条件概率 * ClassConditionalProbability连乘值 * @param X 给定的文本属性向量 * @param Cj 给定的类别
* @return 分类条件概率连乘值,即
*/
float calcProd(String[] X, String Cj) {
float ret = 1.0F; // 类条件概率连乘
for (int i = 0; i String Xi = X[i]; ret *=ClassConditionalProbability.calculatePxc(Xi, Cj)*zoomFactor; } // 再乘以先验概率 ret *= PriorProbability.calculatePc(Cj); return ret; } /** * 去掉停用词 * @param text 给定的文本 * @return 去停用词后结果 */ public String[] DropStopWords(String[] oldWords) { Vector if(StopWordsHandler.IsStopWord(oldWords[i])==false) {//不是停用词 v1.add(oldWords[i]); } } String[] newWords = new String[v1.size()]; v1.toArray(newWords); return newWords; } /** * 对给定的文本进行分类 * @param text 给定的文本 * @return 分类结果 */ @SuppressWarnings(\ public String classify(String text) { String[] terms = null; terms= ChineseSpliter.split(text, \//中文分词处理(分词后结果可能还包含有停用词) terms = DropStopWords(terms);//去掉停用词,以免影响分类 String[] Classes = tdm.getTraningClassifications();//分类 float probility = 0.0F; List String Ci = Classes[i];//第i个分类