数据挖掘实验报告-数据预处理

2019-08-02 00:13

数据挖掘实验报告(一)

姓名:李圣杰班级:计算机学号: 数据预处理

1304 1311610602

1

一、实验目的

1.学习均值平滑,中值平滑,边界值平滑的基本原理 2.掌握链表的使用方法 3.掌握文件读取的方法

二、实验设备

PC一台,dev-c++5.11

三、实验内容

数据平滑

假定用于分析的数据包含属性age。数据元组中age的值如下(按递增序):13, 15, 16, 16, 19, 20, 20, 21, 22, 22, 25, 25, 25, 25, 30, 33, 33, 35, 35, 35, 35, 36, 40, 45, 46, 52, 70。使用你所熟悉的程序设计语言进行编程,实现如下功能(要求程序具有通用性):

(a) 使用按箱平均值平滑法对以上数据进行平滑,箱的深度为3。 (b) 使用按箱中值平滑法对以上数据进行平滑,箱的深度为3。 (c) 使用按箱边界值平滑法对以上数据进行平滑,箱的深度为3。

四、实验原理

使用c语言,对数据文件进行读取,存入带头节点的指针链表中,同时计数,均值求三个数的平均值,中值求中间的一个数的值,边界值将中间的数转换为离边界较近的边界值

五、实验步骤

代码

#include #include #include #define DEEP 3

#define DATAFILE \#define VPT 10

//定义结构体

typedef struct chain{ int num;

struct chain *next; }* data;

//定义全局变量

data head,p,q; FILE *fp;

int num,sum,count=0; int i,j;

int *box; void mean(); void medain(); void boundary(); int main () {

//定义头指针

head=(data)malloc(sizeof(struct chain));

head->next=NULL;

/*打开文件*/

fp=fopen(DATAFILE,\ if(!fp)

exit(0); p=head;

while(!feof(fp)){

2

q=(data)malloc(sizeof(struct chain));

q->next=NULL;

fscanf(fp,\/*读一个数据*/

p->next=q; p=q;

count++; }

/* 关闭文件 */ fclose(fp);

//输出

printf(\源数据为:\\n\

printf(\共%d箱%d个数据\\n\ p=head->next; count=1; num=1;

while(p!=NULL){

if(count==1)printf(\箱%d:\

if(count==DEEP){

printf(\ num++; count=1; }

else{

printf(\ count++; }

p=p->next; }

mean(); medain(); boundary();

scanf(\ return 0; }

//均值

void mean(){

printf(\均值平滑后为:\ box=(int

*)malloc(sizeof(int)*num); p=head->next;

count=1; num=0; sum=0;

while(p!=NULL){

if(count==DEEP){ count=1;

sum=sum+p->num; box[num]=sum/DEEP; sum=0; num++; }

else{

sum=sum+p->num; count++; }

p=p->next; }

for (i=0;i

p=head->next;

printf(\离群值为:\ while(p!=NULL){ for(i=0;i

for (j=0;j

if(abs(p->num-box[i])>(int)VPT) {

printf(\箱%d:\ printf(\ }

p=p->next; }

} } }

//中值

void medain(){

printf(\中值平滑后为:\

3

p=head->next; count=1; num=0; int mid;

while(p!=NULL){

if(count==DEEP){ box[num]=sum; count=1; num++; }

else {

if(count==DEEP/2||count==DEEP/2+1)

if(DEEP%2){

if(count==DEEP/2+1) sum=p->num; }

else{

if(count==DEEP/2+1) sum=(p->num+mid)/2; else

mid=p->num; }

count++; }

p=p->next; }

for (i=0;i

printf(\箱%d:\ for (j=0;j

//边界值

void boundary(){

printf(\边界值平滑后为:\\n\p=head->next; count=1; box=(int

*)malloc(sizeof(int)*num*2); num=0;

while(p!=NULL){

if(count==DEEP){

box[2*num+1]=p->num; count=1; num++; }

else{

if(count==1) {

box[2*num]=p->num; }

count++; }

p=p->next; }

p=head->next; count=1; num=0;

while(p!=NULL){ if(count==1)

printf(\箱%d:\

if((p->num-box[2*num])>(box[2*num+1]-p->num)){

printf(\\ } else

printf(\ if(count==DEEP){ printf(\ count=0; num++; }

count++; p=p->next; } }

实验数据文件:data.txt用空格分开

13 15 16 16 19 20 20 21 22 22 25 25 25 25 30 33 33 35 35 35 35 36 40 45 46 52 70

4

六、结果截图

5


数据挖掘实验报告-数据预处理.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:Java程序设计经典实验教案 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: