Kaggle杂记

发布 : 2020-01-23 分类 : 数据科学 浏览 :

特征处理和生成

数值特征

scaling

  • 基于树的模型不依赖 scaling,非基于树的模型恰恰相反

  • 当两个属性数量级的差距很大时,原来微小的距离,将变的很大,这对 KNN、linear models 有很大影响。

  • 梯度下降法在没有适当放缩的情况下会变的很糟糕,由于这个原因,神经网络在特征预处理上与线性模型相似。

  • 标准化不影响分布

  • 在 MinMaxScaling 或 StandardScaling 转换之后,特性对非树模型的影响大致相同。

  • outliers 离群点

  • 离群点既可以出现在特征值 X 里,也可以在目标值 y 中,这会对模型产生影响

  • 我们可以将特征值控制在两个设定的下界和上界之间,例如第一百分位数和 99 百分位数之间。

rank

例子:

1
2
rank([-100, 0, 1e5])  =>  [0,1,2]
rank([1000, 1, 10]) => [2,0,1]
  • 这个转换可能比 MinMaxScaler 更好,因为秩转换将使异常值更接近其他对象
  • 如果我们没有时间手动处理异常值,线性模型、KNN 和神经网络可以从这种转换中获益
  • 需要注意的是,它也需要被应用在测试集上,你可以合并后一起处理。
  • 可以在 scipy.stats.rankdata 中找到

转换

  • Log transform:

np.log(1 + x)

  • Raising to the power < 1:

np.sqrt(x + 2/3)

  • 这两种转换都是有用的,因为它会使大的值更接近特征的平均值,使接近零的值更容易区分。
  • 有时候,在不同预处理产生的连接数据帧上训练模型,或者在混合模型上训练不同的预处理数据是有益的。
  • 它能帮助非基于树的模型,例如线性模型、KNN 特别是神经网络。

Feature generation

他是用关于特征的知识和任务来生成新特征,它让模型更简单有效。简单来说就是用先验知识、逻辑推理、直觉来创建新的特征。

  • 房价上,知道面积和房价之后,可以创建’每平米’的价钱
  • 在 Forest Cover Type Prediction dataset 上,可以对当前点到水源地建立不同的距离特征
  • 还可以提取价格的小数部分,这可以区分消费概念。甚至可以借着这个区分是否为机器生成的异常数据,例如小数部分是 0.212895..很长一串

Categorical and ordinal features(标签和顺序特征)

  • 区别

标签:无顺序上区别的,例如男、女

顺序特征:在顺序上有特别意义,例如小学、初中、大学,这是有递增关系的

  • 将标签映射为数字
    • Alphabetical(sorted):[S,C,Q] -> [2,1,3]

sklearn.preprocessing.LabelEncoder

  • Order od appearance:[S,C,Q] -> [1,2,3]

Pandas.factorize

  • 将标签替换为其频率,这代表了值的分布信息,可用于树模型和线性模型

[S,C,Q] -> [0.5,0.3,0.2]

1
2
3
encoding = titanic.groupby('Embarked').size()
encoding = encoding / len(titanic)
titanic['enc'] = titanic.Embarked.map(encoding)
  • Label and Frequency 编码常用于树模型
  • One-hot 编码常用于非树模型
  • 标签的相互联结可以帮助线性模型和 KNN
    pclass sex pclass_sex
    3 male 3male
    1 femal 1femal
    3 femal 3fmeal
    1 femal 1femal

Datetime and coordinates

Datetime

  • Periodicity 周期性

在周、月、季节、年中的天数;秒、分、小时

  • Time since row-independent/dependent event

    • 行无关时刻:since 00:00:00 UTC,1 January 1970
    • 行相关重要时刻:离下一个假期天数、上一个假期过去天数
      Data week day daynumber_since_year_2014 is_holiday days_till_holidays sales
      01.01.14 5 0 True 0 1213
      02.01.14 6 1 False 3 938
      03.01.14 0 2 False 2 2448
      04.01.14 1 3 False 1 1744
      05.01.14 2 4 True 0 1732
      06.01.14 3 5 False 9 1022
  • Difference between dates

datetime_feature_1 - datetime_feature_2
| user_id | registration_date | last_purchase_date | last_call_date | date_diff | churn |
| :—: | :—: | :—: | :—: | :—: | :—: |
| 14 | 10.02.2016 | 21.04.2016 | 26.04.2016 | 5 | 0 |
| 15 | 10.02.2016 | 03.06.2016 | 01.06.2016 | -2 | 1 |
| 16 | 11.02.2016 | 11.01.2017 | 11.01.2017 | 1 | 1 |
| 20 | 12.02.2016 | 06.11.2016 | 08.02.2017 | 94 | 0 |

Coordinates

  • Interesting places from train/test data or additional data

使用各种距离构造特征

  • Centers of clusters

利用到聚类中心的距离

  • Aggregated statistic

计算周边对象的汇总统计信息

  • trick

利用决策树根据经纬度信息,将地区分为两个部分

处理缺失值

  • 根据具体情况决定填充缺失值
  • 通常用-999-1、mean、median 替换缺失值
  • Missing values already can be replaced with something by organizers.
  • 二值特征”isnull”也是有用的
  • 通常来说,在 feature generation 之前应该避免去填充 nan
  • Xgboost 可以处理 NaN

从文本和图像中提取特征

Bag of words

为了统一尺度,我们使用正则化后的”Bag of words”

  • Term frequency
1
2
tf = 1/x.sum(axis=1)[:, None]
x = x*tf

为了提取重点,降低常出现词的频率,有了这个:

  • Inverse Document Frequency
1
2
idf = np.log(x.shape[0] / (x > 0).sum(0))
x = x*idf

这可以在sklearn.feature_extraction.text.TfidfVectorizer找到。

N-grams

可以利用于句子上。

sklearn.feature_exraction.text.CountVectorizer:
Ngram_range, analyzer

Pipeline of applying BOW(Conclusion)

1.Preprocessing:

Lowercase: Very 和 very 的区别

stemming:democracy, democratic, and democratization -> democr

lemmatization:democracy, democratic, and democratization -> democracy

stopwords:一般在网上可以搜到这样的表

sklearn.feature_extraction.text.CountVectorizer:
max_df

2.Ngrams can help to use local context

3.Postprocessing:TFiDF

BOW and w2v comparison

  • 1.Bag of words
    • a. Very large vectors
    • b. Meaning of each value in vector is known
  • Word2vec
    • a. Relatively small vectors
    • b. Values in vevtor can be interpreted only in some cases
    • c. The words with similar meaning often have similar embedding

Feature extraction from text and images

  • 1.

Texts

  • a.Preprocessing

Lowercase, stemming, lemmarization, stopwords

  • b.Bag of words

1.Huge vectors

2.Ngrams can help to use local context

3.TFiDF can be of use as postprocessing

  • c.Word2vec

1.Relatively small vectors

2.Pretrained models

  • 1.

Image

  • a.Features can be extracted from different layers
  • b.Careful choosing of pretrained network can help
  • c.Finetuing allows to refine pretrained models
  • d.Data augmentation can improve the model.

探索数据分析

Building intuition about the data

  • Get domain knowledge
    • It helps to deeper understand the problem
  • Check if the data is intuitive
    • And agrees with domain knowledge
  • Understand how the data was generated
    • As it is crucial to set up a proper validation(很可能训练集数据分布与测试集不同,导致验证集错误)

Exploring anonymized data

  • Try to decode the features
    • Guess the true meaning of the feature
  • Guess the feature types
    • Each type needs its own preprocessing

Mean encodings

Using target to generate features

  • example

    feature feature_label feature_mean target
    0 Moscow 1 0.4 0
    1 Moscow 1 0.4 1
    2 Moscow 1 0.4 1
    3 Moscow 1 0.4 0
    4 Moscow 1 0.4 0
    5 Tver 2 0.8 1
    6 Tver 2 0.8 1
    7 Tver 2 0.8 1
    8 Tver 2 0.8 0
    9 Klin 0 0.0 0
    10 klin 0 0.0 0
  • feature_mean=mean(target)

这个操作可以让本来无序的类别标签变得有序。

本文作者 : HeoLis
原文链接 : https://ishero.net/Kaggle%E6%9D%82%E8%AE%B0.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

学习、记录、分享、获得

微信扫一扫, 向我投食

微信扫一扫, 向我投食