第4章 数据预处理
数据预处理主要包括数据洁洗、数据集成、数据变换和数据规约等操作,数据预处理通常占整个数据挖掘过程的60%。
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
from scipy.interpolate import lagrange
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
4.1 数据清洗
数据清洗主要包括(1)删除原始数据集中的无关、重复数据,(2)平滑噪声数据,(3)筛除与挖掘主题无关的数据,(4)处理缺失值、异常值等。
4.1.1 缺失值处理
缺失值处理方法可分为:(1)删除记录,(2)数据插补,(3)不处理。
如果删除小部分记录也能够达到既定目标,则删除含有缺失值记录的方法最有效。
(1)拉格朗日插值法
已知平面上的 n n n个点,可以找到一个 n − 1 n-1 n−1次多项式 y = a 0 + a 1 x + a 2 x 2 + ⋯ + a n − 1 x n − 1 y = a_0 + a_1 x + a_2 x^2 + \cdots + a_{n - 1} x^{n - 1} y=a0+a1x+a2x2+⋯+an−1xn−1,使这 n n n个点位于该多项式曲线上。己知 n n n点坐标 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x n , y n ) (x_1, y_1), (x_2, y_2), \cdots, (x_n, y_n) (x1,y1),(x2,y2),⋯,(xn,yn)的,则 n − 1 n-1 n−1次拉格朗日插值多项式为:
L ( x ) = ∑ i = 0 n y i ∑ j = 0 , j ̸ = i n x − x i x i − x j L(x) = \sum_{i = 0}^{n} y_i \sum_{j = 0, j \not = i}^{n} \frac{x - x_i}{x_i - x_j} L(x)=i=0∑nyij=0,j̸=i∑nxi−xjx−xi
拉格朗日插值公式结构紧凑,但当插值节点增减时,插值多项式各项均会随之变化。
(2)牛顿插值法
求己知 n n n点坐标 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x n , y n ) (x_1, y_1), (x_2, y_2), \cdots, (x_n, y_n) (x1,y1),(x2,y2),⋯,(xn,yn)的所有阶差商公式:
f [ x 1 , x ] = f [ x ] − f [ x 1 ] x − x 1 = f ( x ) − f ( x 1 ) x − x 1 f [ x 2 , x 1 , x ] = f [ x 1 , x ] − f [ x 2 , x 1 ] x − x 2 f [ x 3 , x 2 , x 1 , x ] = f [ x 2 , x 1 , x ] − f [ x 3 , x 2 , x 1 ] x − x 3 ⋯ f [ x n , x n − 1 , ⋯   , x 1 , x ] = f [ x n − 1 , ⋯   , x 1 , x ] − f [ x n , ⋯   , x 2 , x 1 ] x − x n \begin{aligned} f[x_1, x] = & \frac{f[x] - f[x_1]}{x - x_1} = \frac{f(x) - f(x_1)}{x - x_1} \\ f[x_2, x_1, x] = & \frac{f[x_1, x] - f[x_2, x_1]}{x - x_2} \\ f[x_3, x_2, x_1, x] = & \frac{f[x_2, x_1, x] - f[x_3, x_2, x_1]}{x - x_3} \\ & \cdots \\ f[x_n, x_{n - 1}, \cdots, x_1, x] = & \frac{f[x_{n - 1}, \cdots, x_1, x] - f[x_n, \cdots, x_2, x_1]}{x - x_n} \\ \end{aligned} f[x1,x]=f[x2,x1,x]=f[x3,x2,x