数据预处理方法总结

数据是机器学习的原料,机器学习是通过对数据的训练才得到某种特性的。因此正确的预处理数据对模型结果的输出尤为重要。

-一、数据可能存在的问题
数据一开始可能有数据重复,数据缺失,数据存在异常值等情况。
二、数据预处理的步骤
数据处理主要包括数据的清洗,数据的转化.数据描述,特征选择和特征抽取这几个步骤。

1、数据清洗主要通过对缺失值,异常值和重复数据的处理来完成的。

对缺失值的处理首先要判断是否有缺失值,用isnull函数,这个函数返回的是一个布尔类型的结果。其中缺失值为True,非缺失值为Flase。
然后再进行缺失值的处理.


缺失值处理主要有以下两种方式。
一是删除缺失记录
删除数据通过pandas的dropna函数来删除缺失值。

df.dropna(axis = 0,thresh = 2)

axis = 0代表沿着竖直方向(删除行),1代表沿着水平方向(删除列)。使用dropna函数可以直接删除缺失数据所在行或列(默认是行)

thresh = 2代表保留至少2个非NaN数据所在的行。默认是不保留


二是填充数据
填充数据用到的pandas里的函数是

fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
'''
vlaue参数指的是填充的值
method指填充的方法	pad/ffill表示用之前的数据填充(列,第一行不填充)backfill/bfill表示用之后的数据填充(列。最后一行不填充)。
limit指限制填充的次数
'''


另外还有平均值填补,拉格朗日插值法。平均值就是用mean()函数求出平均值。

拉格朗日插值法是通过其他存在值的计算,来拟合出缺失的数据,不过在缺失大量数据时,偏差较大。

异常值的处理也主要有两种方法。
一是利用3σ原则来找出异常值。就是如果数据服从正态分布,异常值则为与平均值相差超过3倍σ的值。

u = data.mean()#计算均值
std = data.std()#计算标准差
error = data[np.bas(data-u)>3*std]#求出异常值

二是箱型图分析

箱线图是一种用于显示一组数据分散情况的统计图。箱型图不受异常值影响,可以以一种相对稳定的方式描述数据的离散分布情况。

下面是python代码实现方法。其中的precentile函数是用来求出数组的上四分位,中位和下四分位数的。

percentile = np.percentile(self.n, (25, 50, 75), interpolation=‘midpoint’)
#以下为箱线图的五个特征值

Q1 = percentile[0]#上四分位数
Q3 = percentile[2]#下四分位数
IQR = Q3 - Q1#四分位距
ulim = Q3 + 1.5*IQR#上限 非异常范围内的最大值
llim = Q1 - 1.5*IQR#下限 非异常范围内的最小值

2、在数据的转换阶段,有对数据进行归一化,标准化,离散化等操作。

首先,归一化操作是将数据统一映射到[0,1]区间上。由于数据相差过大,所以一般要做归一化处理。

range_ = np.max(x) - np.min(x)
num = (x-np.min(x)) / range_

标准化数据,保证每个维度的特征数据方差为1,均值为0。使得预测结果不会被某些维度过大的特征值而主导。

mu = np.mean(self.x,axis=0)#计算平均数
sigma = np.std(self.x,axis=0)#计算方差
num =  (x-mu) / sigma

连续值离散化是将数据按照不同的区间分好类,有等宽法和等频法。

等宽法是将数据平均分成三个相同的区间。

d1 = pd.cut(df,k, labels = range(k))
#k表示划分区间的个数
#df表示输入的dataframe类型的数据
#lables表示表头

等频法是按数据出现频率划分。将相同数量的记录放在每个区间,保证每个区间的数量基本一致。即分组后,每个分组的元素个数是一样的。

k = 4
w = [1.0*i/k for i in range(k+1)]
w = data.describe(percentiles = w)[4:4+k+1]#取几个分位数的值作为不等长列表,用于cut函数
w[0] = w[0]*(1-1e-10)#浮点化
d2 = pd.cut(data, w, labels = range(k))
#或者直接用qcut(data,k)函数

还有另外一种数据处理操作是离散值处理(独热编码)
独热编码是将同类型的数据分类按照二进制来变成0或1的数字。例如:
男:01,女:10

学生:001,老师:010,领导:100

date = pd.read_csv(self.n)#读取csv文件
date_df = pd.DataFrame(date)#转换成DataFrame格式
date_gd = pd.get_dummies(date_df)#进行编码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值