前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Feature Engineering 特征工程 1. Baseline Model

Feature Engineering 特征工程 1. Baseline Model

作者头像
Michael阿明
发布2020-07-13 14:37:59
4030
发布2020-07-13 14:37:59
举报

1. 读取数据

预测任务:用户是否会下载APP,当其点击广告以后 数据集:ks-projects-201801.csv

  • 读取数据,指定两个特征'deadline','launched'parse_dates解析为时间
代码语言:javascript
复制
ks = pd.read_csv('ks-projects-201801.csv',parse_dates=['deadline','launched'])
在这里插入图片描述
在这里插入图片描述

预测Kickstarter项目是否会成功。state作为结果label 可以使用类别category货币currency资金目标funding goal国家country以及启动时间launched等特征

2. 处理label

  • 准备标签列,看看有哪些值,转换成可用的数字格式
代码语言:javascript
复制
pd.unique(ks.state)

有6种数值

代码语言:javascript
复制
array(['failed', 'canceled', 'successful', 'live', 'undefined',
       'suspended'], dtype=object)

每种多少个?按state分组,每组中ID行数有多少

代码语言:javascript
复制
ks.groupby('state')['ID'].count()
代码语言:javascript
复制
state
canceled       38779
failed        197719
live            2799
successful    133956
suspended       1846
undefined       3562
Name: ID, dtype: int64
  • 简单处理下标签列,正在进行的项目live丢弃,successful的标记为1,其余的为0
代码语言:javascript
复制
ks = ks.query('state != "live"') # live行不要
ks = ks.assign(outcome=(ks['state']=='successful').astype(int))
# label 转成1,0,int型

3. 添加特征

  • launched时间拆分成,年月日小时,作为新的特征
代码语言:javascript
复制
ks = ks.assign(hour=ks.launched.dt.hour,
               day=ks.launched.dt.day,
               month=ks.launched.dt.month,
               year=ks.launched.dt.year)
ks.head()
在这里插入图片描述
在这里插入图片描述
  • 转换文字特征category, currency, country为数字
代码语言:javascript
复制
from sklearn.preprocessing import LabelEncoder

cat_features = ['category','currency','country']
encoder = LabelEncoder()

encoded = ks[cat_features].apply(encoder.fit_transform)
encoded.head(10)
在这里插入图片描述
在这里插入图片描述
  • 将选择使用的特征合并在一个数据里
代码语言:javascript
复制
X = ks[['goal', 'hour', 'day', 'month', 'year', 'outcome']].join(encoded)
X.head()
在这里插入图片描述
在这里插入图片描述

4. 数据集切片

  • 数据切片,按比例分成训练集、验证集、测试集(0.8,0.1,0.1)
  • 更高级的简单做法sklearn.model_selection.StratifiedShuffleSplit
代码语言:javascript
复制
valid_ratio = 0.1
valid_size = int(len(X)*valid_ratio)
train = X[ : -2*valid_size]
valid = X[-2*valid_size : -valid_size]
test = X[-valid_size : ]

需要关注下,label 在每个数据集中的占比是否接近

代码语言:javascript
复制
for each in [train, valid, test]:
    print("Outcome fraction = {:.4f}".format(each.outcome.mean()))
代码语言:javascript
复制
Outcome fraction = 0.3570
Outcome fraction = 0.3539
Outcome fraction = 0.3542

5. 训练

  • 使用LightGBM模型进行训练
代码语言:javascript
复制
feature_cols = train.columns.drop('outcome')

dtrain = lgb.Dataset(train[feature_cols], label=train['outcome'])
dvalid = lgb.Dataset(valid[feature_cols], label=valid['outcome'])

param = {'num_leaves': 64, 'objective': 'binary'}
param['metric'] = 'auc'
num_round = 1000
bst = lgb.train(param, dtrain, num_round, valid_sets=[dvalid],
				early_stopping_rounds=10, verbose_eval=False)

6. 预测

  • 对测试集进行预测
代码语言:javascript
复制
from sklearn import metrics
ypred = bst.predict(test[feature_cols])
score = metrics.roc_auc_score(test['outcome'], ypred)

print(f"Test AUC score: {score}")
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/05/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 读取数据
  • 2. 处理label
  • 3. 添加特征
  • 4. 数据集切片
  • 5. 训练
  • 6. 预测
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档