数据仓库与数据挖掘技术试题答案.docx
《数据仓库与数据挖掘技术试题答案.docx》由会员分享,可在线阅读,更多相关《数据仓库与数据挖掘技术试题答案.docx(9页珍藏版)》请在冰点文库上搜索。
![数据仓库与数据挖掘技术试题答案.docx](https://file1.bingdoc.com/fileroot1/2023-7/13/79656d58-eea6-447b-92ff-3c4c7ddceca0/79656d58-eea6-447b-92ff-3c4c7ddceca01.gif)
数据仓库与数据挖掘技术试题答案
数据仓库与数据挖掘技术
答案
一、简答
1.为什么需要对数据进行预处理?
数据预处理主要包括哪些工作(需要对数据进行哪些方面预处理)?
(1)现实世界的数据是杂乱的,数据多了什么问题会出现。
数据库极易受到噪音数据(包含错误或孤立点)、遗漏数据(有些感兴趣的属性缺少属性值或仅包含聚集数据)和不一致数据(在编码或者命名上存在差异)的侵扰,因为数据库太大,常常多达几G或更多。
进行数据预处理,提高数据质量,从而提高挖掘结果质量。
(2)数据预处理主要包括:
数据清理:
去除数据中的噪音、纠正不一致;数据集成:
将数据由多个源合并成一致的数据存储,如数据仓库或数据方;数据交换:
规范化或聚集可以改进涉及距离度量的挖掘算法精度和有效性;数据归约:
通过聚集、删除冗余特征或聚类等方法来压缩数据。
数据离散化:
属于数据归约的一部分,通过概念分层和数据的离散化来规约数据,对数字型数据特别重要。
2.什么叫有监督学习?
什么叫无监督学习?
监督学习(Supervisedlearning)是通过发现数据属性和类别属性之间的关联模式,并通过利用这些模式来预测未知数据实例的类别属性。
监督学习又称为分类Classification或归纳学习InductiveLearning。
无监督学习(Unsupervisedlearning)即聚类技术。
在一些应用中,数据的类别属性是缺失的,用户希望通过浏览数据来发现其的某些内在结构。
聚类就是发现这种内在结构的技术。
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)
c)0
d)size
e)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 v1 = new Vector();
for(int i=0;i {
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("unchecked")
public String classify(String text)
{
String[] terms = null;
terms= ChineseSpliter.split(text, " ").split(" ");//中文分词处理(分词后结果可能还包含有停用词)
terms = DropStopWords(terms);//去掉停用词,以免影响分类
String[] Classes = tdm.getTraningClassifications();//分类
float probility = 0.0F;
List crs = new ArrayList();//分类结果
for (int i = 0; i {
String Ci = Classes[i];//第i个分类
probility = calcProd(terms, Ci);//计算给定的文本属性向量terms在给定的分类Ci中的分类条件概率
//保存分类结果
ClassifyResult cr = new ClassifyResult();
cr.classification = Ci;//分类
cr.probility = probility;//关键字在分类的条件概率
System.out.println("In process
.");
System.out.println(Ci + ":
" + probility);
crs.add(cr);
}
//对最后概率结果进行排序
java.util.Collections.sort(crs,new Comparator()
{
public int compare(final Object o1,final Object o2)
{
final ClassifyResult m1 = (ClassifyResult) o1;
final ClassifyResult m2 = (ClassifyResult) o2;
final double ret = m1.probility - m2.probility;
if (ret < 0)
{
return 1;
}
else
{
return -1;
}
}
});
//返回概率最大的分类
return crs.get(0).classification;
}
}
(1)最临近分类是基于要求的或懒散的学习法。
因为它存放所有训练样本,并且直至新的样本需要分类时才建立分类。
begin
初始化nxn距离矩阵D,初始化混淆矩阵C,设置t=0,TotAcc=0,NumIterations为要迭代次数。
计算所有输入样本和存储在D矩阵中的距离。
Fort=1toNumIterationsdo
Setc=0,Ntotal=0
将输入样本划分为k个同等大小的分组
Forfold=1tokdo
指定第fold个样本进行测试,并且使用原来训练样本。
设置Ntest为要测试样本数量。
SetNtotal=Ntotal+Ntest
Fori=1toNtestdo
基于样本
计算距离确定k个最邻近训练样本。
确定在k个最邻近样本中最频繁的分类标记
。
在w为真并且对于预测测试样本
分类标记为
时,对混淆矩阵C进行递增1存储为
。
如果
则在混淆矩阵对角线上加1,否则在非对角线上加1。
当
为混淆矩阵对角线元素时,使用
确定分类器的精确度。
计算
.最后计算
end