【人工智能】2 数据预处理
1. 拟合-插值与回归
当获得的数据集中的一部分存在缺失或者异常时,除了无视和删除外,最好的方法是根据数据集的整体信息对其进行预测。拟合就是用来解决这一问题的。
插值与回归都可以用来预测数据,但算法上是有区别的:
- 插值:插值法构造的函数图像必须正好经过所有的数据点
- 回归:拟合法构造的函数图像不需要正好经过所有数据点,只需要逼近就可以了
好的拟合不应该出现下列两种情况:
- 过拟合(over-fitting):拟合在训练样本集上的表现太好,但在测试样本集上表现的不好
- 欠拟合(under-fitting):拟合在训练样本上表现的不好,缺失特征。
不论是过拟合还是欠拟合,都是要不得的!
当然,现在最火的拟合是神经网络方法!
1.1. 插值
这里介绍一下牛顿插值法
已知有 \(n\) 个点对 \((x_0,y_0),(x_1,y_1),(x_2,y_2),(x_3,y_3),...,(x_n,y_n)\) 。他们的阶差商公式为:
则插值多项式为:
在编程时,应该先求出插商表:(假设有5对值)
| \(x_i\) | \(y_i\) | 1阶插商 | 2阶插商 | 3阶插商 | 4阶插商 |
|---|---|---|---|---|---|
| \(x_0\) | \(y_0\) | ||||
| \(x_1\) | \(y_1\) | \(f[x_0,x_1]\) | |||
| \(x_2\) | \(y_2\) | \(f[x_1,x_2]\) | \(f[x_0,x_1,x_2]\) | ||
| \(x_3\) | \(y_3\) | \(f[x_2,x_3]\) | \(f[x_1,x_2,x_3]\) | \(f[x_0,x_1,x_2,x_3]\) | |
| \(x_4\) | \(y_4\) | \(f[x_3,x_4]\) | \(f[x_2,x_3,x_4]\) | \(f[x_1,x_2,x_3,x_4]\) | \(f[x_0,x_1,x_2,x_3,x_4]\) |
然后将表中的值代入到 \(f(x)\) 中即可。
测试
1.2. 回归
回归的算法有很多种,这里介绍最小二乘法非线性回归。
现在给定一系列数据点 \(p_i(x_i,y_i),(i=1,2,3,..,n)\) ,假设对于这些点,有一个完美的曲线与之对应,即 \(y=f(x)(y_i=f(x_i))\) ,但这个曲线的方程我们无从得知,只好得出一个无限接近于这个完美曲线的近似曲线 \(z=g(x)\) 。
为了评价 \(f(x)\) 与 \(g(x)\) 的近似程度,引入了一个评价标准——偏差平方和:
只要使 \(E\) 最小,就意味着 \(f(x)\) 与 \(g(x)\) 的近似程度达到了我们能做到的极限。
我们使用多项式曲线进行回归,\(k\) 阶多项式方程为:
现在问题的关键就是求参数 \(a_i\),抛开繁杂的求导法,从线性代数的角度来看:
通过矩阵运算,就可以将满足 \(E\) 最小的 \(A\) 求出来了,\(g(x)\) 自然也就求出来了。
Matlab代码:
function [answer,test_x,test_y]=LeastSquaresCurveFitting(n,x,y)
%%最小二乘法曲线拟合
%输入:1.拟合阶数n
% 2.拟合点值x,y
%输出:1.拟合系数answer
% 2.模拟点值
%%
%构造x矩阵
x0=ones(length(x),n);
for i=1:length(x)
for j=n+1:-1:1
x0(i,j)=x(i)^(j-1);
end
end
%构造y矩阵
y0=y\';
%计算系数矩阵
answer=(x0\'*x0)\(x0\'*y0);
answer=fliplr(answer);
test_x=2:0.01:16;
test_y=ones(1,length(test_x));
for i=1:length(test_x)
for j=n+1:-1:1
test_y(i)=test_y(i)+(test_x(i)^(j-1))*answer(j);
end
end
z=1
end
2. 数据规范化
不同评价指标往往具有不同的量纲,数值见的差别可能很大,不进行处理可能会影响到数据分析的结果。为了消除指标之间的量纲和取值范围差异的影响,需要进行标准化处理,将数据按照比例进行缩放,使之落入一个特定的区域,便于进行综合分析。
数据根据性质的不同可以分为两种:
- 成本型数据:数据值越小越好
- 效益型数据:数据值越大越好
2.1. 基本线性变换
现有一组未规范化的数据 \(X\),对应的规范数据为 \(Y\):
若 \(X\) 属于成本型数据
若 \(X\) 属于效益型数据
2.2. 最小-最大规范化
经过变换的最佳属性值不一定为1,最差属性值为0。
该方法亦称为 离散标准化 或者 标准0-1变换,是对原始数据的线性变换,将数据值映射到 \([0, 1]\)之间。
现有一组未规范化的数据 \(X\),对应的规范数据为 \(Y\):
若 \(X\) 属于成本型数据
若 \(X\) 属于效益型数据
在不涉及距离度量、协方差计算、数据不符合正太分布的时候,使用该方法比较好
2.3. 零-均值规范化(z-score标准化)
0均值归一化方法将原始数据集归一化为均值为0、方差1的数据集(\([0, 1]\) 范围)
现有一组未规范化的数据 \(X\),对应的规范数据为 \(Y\):
其中 \(\bar{x}\) 是 \(X\) 的平均值,\(S\) 是 \(X\) 的标准差。