kaggle之EDA,特征工程

对于机器学习的从业者或者兴趣爱好者而言,kaggle提供了一个机器学习相关的竞技和交流平台.通过比赛和讨论分享,可以知道自己的水平并找到提高的方向.

EDA(Exploratory Data Analysis)

通常我们会用 pandas 来载入数据,并做一些简单的可视化来理解数据。

Visualization,通常来说 matplotlib 和 seaborn 提供的绘图功能就可以满足需求了。

比较常用的图表有:

查看目标变量的分布。当分布不平衡时,根据评分标准和具体模型的使用不同,可能会严重影响性能。

对 Numerical Variable,可以用 Box Plot 来直观地查看它的分布。

对于坐标类数据,可以用 Scatter Plot 来查看它们的分布趋势和是否有离群点的存在。

对于分类问题,将数据根据 Label 的不同着不同的颜色绘制出来,这对 Feature 的构造很有帮助。

绘制变量之间两两的分布和相关度图表。

特征工程

Feature Engineering Techniques,这篇文章是kaggle上面的一位grandmaster分享的特征工程常用操作,摘录如下.

train and test 训练集和测试集组合在一起

df = pd.concat([train[col],test[col]],axis=0)
# PERFORM FEATURE ENGINEERING HERE
train[col] = df[:len(train)]
test[col] = df[len(train):]

NAN processing 缺失值处理

df[col].fillna(-999, inplace=True)

Label Encode/ Factorize/ Memory reduction 设置数据类型,较小内存开销

df[col],_ = df[col].factorize()

if df[col].max()<128: df[col] = df[col].astype('int8')
elif df[col].max()<32768: df[col] = df[col].astype('int16')
else: df[col].astype('int32')
for col in df.columns:
    if df[col].dtype=='float64': df[col] = df[col].astype('float32')
    if df[col].dtype=='int64': df[col] = df[col].astype('int32')

Categorical Features

df[col] = df[col].astype('category')

Splitting

Combining / Transforming / Interaction 数据组合生成新列

df['uid'] = df[‘card1’].astype(str)+’_’+df[‘card2’].astype(str)
df['x1_x2'] = df['x1'] * df['x2']

Frequency Encoding 统计出现的次数

temp = df['card1'].value_counts().to_dict()
df['card1_counts'] = df['card1'].map(temp)

Aggregations / Group Statistics 在分组基础上统计数据

temp = df.groupby('card1')['TransactionAmt'].agg(['mean'])   
    .rename({'mean':'TransactionAmt_card1_mean'},axis=1)
df = pd.merge(df,temp,on='card1',how='left')

Normalize / Standardize 归一化

df[col] = ( df[col]-df[col].mean() ) / df[col].std()
df['D3_remove_time'] = df['D3'] - df['D3_week_mean']

你可能感兴趣的:(ML)