数据预处理任务
- 数据清洗:去掉数据中的噪声,纠正不一致
- 数据集成:将多个数据源合并成一致的数据存储,构成一个完整的数据集,如数据仓库
- 数据规约(删减):通过聚集、删除冗余属性或聚类等方法来压缩数据
- 数据变换:数据集的规范化
数据集成
数据挖掘需要的数据往往分布在不同的数据源中,数据集成就是将多个数据源合并存放在一个一致的数据存储(如数据仓库)中的过程。在数据集成时,来自多个数据源的现实世界实体的表达形式是不一样的,不一定是匹配的,要考虑实体识别问题和属性是不一的,不一定是匹配的,要考虑实体识别问题和属性冗余问题,从而把源数据在最低层上加以转换、提炼和集成。
- 实体识别:解决单位问题
- 属性冗余问题:对于冗余属性要先分析检测到后再将其删除。 有些冗余属性可以用相关分析检测到。给定两个数值型的属性A和B,有些冗余属性可以用相关分析检测到。给定两个数值型的属性A和B,根据其属性值,可以用相关系数度量一个属性在多大程度上蕴含另一个属性。
数据变换
数据清洗
删除无关数据及异常值,缺失值处理。
缺失值处理 处理缺失值的方法可分为三类:删除记录、数据差插补和不处理。其中常用数据插补方法见下表。
插补可方法 | 方法描述 |
---|
均值/中位数/众数插补 | 根据属性值的类型,用该属性取值的平均数/中位数/众数进行插值 | 使用固定值 | 将缺失的属性用一个常量进行替换 | 最近临插补 | 在记录中找到与缺失样本最接近的样本的该属性进行插补(计算欧几里得距离) | 回归方法 | 对带有缺失值的变量,根据已有数据和与其有关的其他变量的数据建立拟合模型来预测缺失的属性值 | 插值法 | 利用已知点建立合适的插值函数,未知值由对应点
x
i
x_i
xi?求出函数值近似代替 |
- 回归方法使用繁琐对于国赛试题不建议使用。
- 拉格朗日插值法。缺点:插值函数与需插值点个数有关,当插值点个数改变的时候,插值函数也需改变,所以较繁琐。
- 牛顿插值法。
%% 拉格朗日插值和牛顿插值对比
clear;
% 参数初始化
inputfile = '../data/catering_sale.xls' ; % 销量数据文件
index =2; % 销量数据所在下标
outputfile ='../tmp/sales2.xls'; % 插值后数据存放
%% 读入数据
num = readmatrix(inputfile);
data = num(:,index);
%% 去除异常值
data = de_abnormal(data);
%% 调用拉格朗日进行插值
la_data = ployinterp_column(data,'lagrange');
%% 调用牛顿算进行插值
new_data = ployinterp_column(data,'newton');
%% 结果写入文件
rows = size(data,1);
% result = cell(rows+1,3);
% result{1,1}='原始值';
% result{1,2}='拉格朗日插值';
% result{1,3}='牛顿插值';
%
% result(2:end,1)= num2cell(data);
% result(2:end,2)= num2cell(la_data);
% result(2:end,3)= num2cell(new_data);
result = [data,la_data,new_data];
writematrix(result,outputfile);
disp('拉格朗日插值和牛顿插值结果已写入数据文件!');
异常值处理方法
异常值处理方法 | 方法描述 |
---|
删除含有异常值的记录 | 直接将含有异常值的记录删除 | 视为缺失值 | 将异常值视为缺失值,利用缺失值处理的方法进行处理 | 平均值修正 | 可用前后两个观测值的平均值修正该异常值 | 不处理 | 直接在具有异常值的数据集上进行挖掘建模 |
异常值发现方法:箱型图法 画箱形图的代码
%% 餐饮销量数据缺失值及异常值检测
clear;
% 初始化参数
catering_sale = '../data/catering_sale.xls'; % 餐饮数据
index = 2; % 销量数据所在列
%% 读入数据
num = readmatrix(catering_sale);
sales =num(2:end,index);
rows = size(sales,1);
%% 缺失值检测 并打印结果
nanvalue = find(isnan(sales));
if isempty(nanvalue) % 没有缺失值
disp('没有缺失值!');
else
rows_ = size(nanvalue,1);
disp(['缺失值个数为:' num2str(rows_) ',缺失率为:' num2str(rows_/rows) ]);
end
%% 异常值检测
% 箱形图上下界
q_= prctile(sales,[25,75]);
p25=q_(1,1);
p75=q_(1,2);
upper = p75+ 1.5*(p75-p25);
lower = p25-1.5*(p75-p25);
upper_indexes = sales(sales>upper);
lower_indexes = sales(sales<lower);
indexes =[upper_indexes;lower_indexes];
indexes = sort(indexes);
% 箱形图
figure
hold on;
boxplot(sales,'whisker',1.5,'outliersize',6);
rows = size(indexes,1);
flag =0;
for i =1:rows
if flag ==0
text(1+0.01,indexes(i,1),num2str(indexes(i,1)));
flag=1;
else
text(1-0.017*length(num2str(indexes(i,1))),indexes(i,1),num2str(indexes(i,1)));
flag=0;
end
end
hold off;
disp('餐饮销量数据缺失值及异常值检测完成!
数据规约
即产生更小但保持原数据完整性的新数据集,因为在大数据集上进行复杂的数据分析和挖掘往往需要很长的时间。数据规约包括属性规约、数值规约。
- 属性规约:主要是通过属性合并创建新属性维数,或者直接通过删除不相关的属性维数来减少数据维数,从而提高数据挖掘的效率、降低计算成本。属性规约的目标是寻找出最小的属性子集并确保新数据子集的概率分布、并尽可能地接近原数据集的概率分布,常用方法有合并属性、逐步向前选择、逐步向后删除、决策树归纳、主成分分析等。
- 数值规约: 通过选择替代的、较小的数据来减少数据量,包括有参数方和无参数方法,前者指使用一个模型来评估数据,只需存放参数而不需要存放实际数据,无参数方法则需要存放实际数据,如直方图、聚类、抽样、参数回归。
%% 主成分分析 降维
clear;
% 参数初始化
inputfile = '../data/principal_component.xls';
outputfile = '../tmp/dimention_reducted.xls'; % 降维后的数据
proportion = 0.95 ; % 主成分的比例
%% 数据读取
num = readmatrix(inputfile);
%% 主成分分析
[coeff,~,latent] = pca(num);
%% 计算累计贡献率,确认维度
sum_latent = cumsum(latent/sum(latent)); % 累计贡献率
dimension = find(sum_latent>proportion);
dimension= dimension(1);
%% 降维
data = num * coeff(:,1:dimension);
xlswrite(outputfile,data);
disp('主成分特征根:');
disp(latent');
disp('主成分单位特征向量');
disp(coeff);
disp('累计贡献率');
disp(sum_latent');
disp(['主成分分析完成,降维后的数据在' outputfile]);
主要处理函数
函数名 | 功能 |
---|
interp1() | 一维插值 | unique() | 去除重复元素 | find() | 找到相应标识的位置 | isnan() | 判断是否为数值 | mapminmax() | 最大值最小化的规范化 | zscore() | 标准差规范化 |
|