机器学习总结 第一课

时间:2021-10-26 20:07:08

引言

这篇文章不涉及很多代码的部分,主要是机器学习处理数据的一些基本概念和流程。写这篇blog的原因是对前一段时间的总结。前一段时间参加阿里天池的贵州交通大数据的比赛,使用了很多机器学习的方法和模型(xgboost 和lightgbm),但是当时只限于知道接口的使用和接口的作用,不了解原理或者知识点很凌乱。所以打算趁着十一的空闲时间把知识点梳理一下。 主要的进度是根据“七月在线”的教程来进行的。接下来开始第一部分,“机器学习的基本流程”。不足的地方以后再补充。

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

一、认识数据

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

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

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

  3. 数据的维度,比如rgb颜色有三维数据,来表示一个颜色lable。
  4. 数据是否有缺省值。

二、数据预处理:

  1. 数据清洗:
    • 去除异常值。
    • 缺省值过多的特征:丢弃。
  2. 数据采样:
    这个主要针对分类的问题。如果正:负=1:100, 那么很显然,分类结果全判负,正确率就很高,这是由于样本不均衡造成的。
    常用的采样方法:这里假设正:负=1:10
    • 上/下采样:上采样就是把数据集中的正样本重复9遍,加入数据集。下采样道理一样。
      数据的分布,比如分类问题中,正负样本均衡很重要,即正样本数:负样本数接近1:1比较好。
    • loss权重,损失函数中,增加正样本的权重(这没有实践过)。
    • 抽样训练,即把负样本分成10份,每份都和正样本一起训练,所以有10个分类器,最终分类结果就是10个分类器bagging(voting投票)的结果。
  3. 可视化:
    比如画出二维的图,看看某维数据和label的二维关系图,可以使用scikit-learn中的matplotlib或者tableau。
    如果维度很大,可以使用t-sne来可视化。

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

  1. 单个特征的预处理:
    1. 归一化、标准化:数据跨度比较大,不利于收敛。
    2. log:避免“长尾”数据。
    3. 类别型数据:one-hot编码。
    4. 特征有缺失值:按照缺失值的数量多少来处理
      • 少:填充。可以用前后值得填充,或者平均数,或者-9999(让模型自己学习缺省值)。
      • 中等:特征离散化,缺省值单独作为一个类别。
      • 多:丢弃这个特征。
  2. 特征提取:
    (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
五、模型融合:
stacking,有点累,回头再写。