机器学习-数据处理部分

以下转载自https://blog.csdn.net/zhulei19931019/article/details/78152635,仅做个人笔记使用。


首先有这么一句话,“数据和特征决定了机器学习的上限,而算法和模型只是逼近这个上限而已”,嗯嗯,数据处理和特征工程很重要,大概占据70%的工作量,而模型选择、模型调参、模型融合占据30%的工作量。

一、认识数据

数据的分布,比如分类问题中,正负样本均衡很重要,即正样本数:负样本数接近1:1比较好

一、数据的类型

数值型,是否跨度很大,比如[1,10000],这样会导致收敛很慢,常常归一化、标准化; 或者出现“长尾”数据,使用log归一化;或者离散化(把0-100分一类,100-200分类,等等)。

类别性(category),一般使用one-hot编码。

数据的维度,比如rgb颜色有三维数据,来表示一个颜色lable。

数据是否有缺省值。

二、数据预处理:

数据清洗:

    去除异常值。

    缺省值过多的特征:丢弃。

数据采样:

       这个主要针对分类的问题。如果正:负=1:100, 那么很显然,分类结果全判负,正确率就很高,这是由于样本不均衡造成的。常用的采样方法:这里假设正:负=1:10

1.    上/下采样:上采样就是把数据集中的正样本重复9遍,加入数据集。下采样道理一样。

数据的分布,比如分类问题中,正负样本均衡很重要,即正样本数:负样本数接近1:1比较好。

2. loss权重,损失函数中,增加正样本的权重(这没有实践过)。

3. 抽样训练,即把负样本分成10份,每份都和正样本一起训练,所以有10个分类器,最终分类结果就是10个分类器bagging(voting投票)的结果。

可视化:

比如画出二维的图,看看某维数据和label的二维关系图,可以使用scikit-learn中的matplotlib或者tableau。

如果维度很大,可以使用t-sne来可视化。

三、特征工程,这一步最重要,最后附上图:

单个特征的预处理:

归一化、标准化:数据跨度比较大,不利于收敛。

log:避免“长尾”数据。

类别型数据:one-hot编码。

特征有缺失值:按照缺失值的数量多少来处理

少:填充。可以用前后值得填充,或者平均数,或者-9999(让模型自己学习缺省值)。

中等:特征离散化,缺省值单独作为一个类别。

多:丢弃这个特征。

特征提取:

(1)数值型

(2)类别型

(3)时间型:这个着重说一下,常见的有如下

具体的日期,year, month, day, hour, minute, weekday.

isWeekend, isHoliday

离节假日的距离。 比如距离“双十一”的天数,双十一的前一天,双十一的后一天等等。

一周内发生了多少次。

距离峰值(谷值)的距离。

切分时间段,比如“饭点”和“非饭点”。

(4)统计型:分位数、中位数、平均数、std等等。

(5)还有(3)和(4)的组合。

(6)文本型:这个不熟悉。

n-gram,词频。 比如bag of words.

TF-IDF.

四、建立模型:

xgboost ,lightgbm

五、模型融合:

————————————————

版权声明:本文为CSDN博主「远古小山」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/zhulei19931019/java/article/details/78152635

你可能感兴趣的:(机器学习-数据处理部分)