kaggle Predicting Molecular Properties 比赛 brute-force-feature-engineering 解读

1 链接

https://www.kaggle.com/kernels/scriptcontent/16357888/download
https://www.kaggle.com/c/champs-scalar-coupling/overview

2 EDA解读

与上一篇主要的区别是构造了更多的特征,总共大概有400多维,与我自己不同的是它利用xgboost做了特征选择,最后留下了比较重要的一些特征,然后再去训练的。

2.1 特征与target的关系

kaggle Predicting Molecular Properties 比赛 brute-force-feature-engineering 解读_第1张图片
这个是不同类别type的新特征和target的关系,可以看出特征还是具有一定的区分性的,特别是每个type的score差别挺大的情况下,感觉这是一个机会。

2.2 测试集特征和训练集特征的区别

kaggle Predicting Molecular Properties 比赛 brute-force-feature-engineering 解读_第2张图片
特征频率不一样,但是分布还是有一定一致性的,有一些type的特征分布也有些不一样,这些type是不是可以不用这些特征?

3 分类训练

发现不同类的type不一致,然后还是分类训练了。

X_short = pd.DataFrame({'ind': list(X.index), 'type': X['type'].values, 'oof': [0] * len(X), 'target': y.values})
X_short_test = pd.DataFrame({'ind': list(X_test.index), 'type': X_test['type'].values, 'prediction': [0] * len(X_test)})
for t in X['type'].unique():
    print(f'Training of type {t}')
    X_t = X.loc[X['type'] == t]
    X_test_t = X_test.loc[X_test['type'] == t]
    y_t = X_short.loc[X_short['type'] == t, 'target']
    result_dict_lgb = train_model_regression(X=X_t, X_test=X_test_t, y=y_t, params=params, folds=folds, model_type='lgb', eval_metric='group_mae', plot_feature_importance=False,
                                                      verbose=500, early_stopping_rounds=200, n_estimators=2000)
    X_short.loc[X_short['type'] == t, 'oof'] = result_dict_lgb['oof']
    X_short_test.loc[X_short_test['type'] == t, 'prediction'] = result_dict_lgb['prediction']
    
sub['scalar_coupling_constant'] = X_short_test['prediction']
sub.to_csv('submission_t.csv', index=False)
sub.head()

最后再看分type训练后的每一类的oof和predict的区别,发现缺失好一些。

plot_data = pd.DataFrame(y)
plot_data.index.name = 'id'
plot_data['yhat'] = X_short['oof']
plot_data['type'] = lbl.inverse_transform(X_short['type'])

plot_oof_preds('1JHC', 0, 250)
plot_oof_preds('1JHN', 0, 100)
plot_oof_preds('2JHC', -50, 50)
plot_oof_preds('2JHH', -50, 50)
plot_oof_preds('2JHN', -25, 25)
plot_oof_preds('3JHC', -25, 100)
plot_oof_preds('3JHH', -20, 20)
plot_oof_preds('3JHN', -15, 15)

你可能感兴趣的:(算法,算法学习总结,python,机器学习)