首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何进行实时数据的特征工程?

如何进行实时数据的特征工程?
EN

Stack Overflow用户
提问于 2017-03-01 07:58:38
回答 1查看 1.1K关注 0票数 0

我用以下步骤建立了一个很好的线性回归模型:

  1. 数据集成
  2. 数据规范化/缩放(数据预处理和特征工程)
  3. 模型建立(使用线性回归和SGD交叉验证)
  4. 测试

我的问题是,如果我们在生产环境中使用这个模型,那么我们如何进行实时数据的特征工程,因为这个模型是用特征归一化和缩放的来建立的,那么如何对实时数据进行规范化和缩放以得到一个很好的预测呢?对于交叉验证和测试步骤,我们不需要显式的特征工程,因为在建立模型之前,这可以在数据预处理步骤中完成。实时数据特征工程呢?

EN

回答 1

Stack Overflow用户

发布于 2018-03-22 22:25:10

这些数据可以很好地帮助特征工具。它是一个开放源码的自动化功能工程库,它显式地处理时间,以确保不引入标签泄漏。对于您的音乐数据,您可以创建两个entities"users""artist_plays",然后应用featuretools.dfs (深度特征综合)生成特性。将实体视为与关系数据库中的表相同的实体。深度特征综合创建了一个单表特征矩阵,可以从多个不同的表中建模,并具有高层次的统计特性。这是一个短柱,解释了它是如何工作的。

此示例使用的是普通Python,但可以修改为与Spark或达斯克一起使用。

代码语言:javascript
复制
# Create entityset
import featuretools as ft
from sklearn.preprocessing import Imputer, StandardScaler
import pandas as pd
import pickle

def load_entityset(user_df, artist_plays_df):
    es = ft.EntitySet("artist plays")
    es.entity_from_dataframe("users", user_df, index="user_id")
    es.entity_from_dataframe("artist_plays", artist_plays_df, index="artist_id")
    es.add_relationship(ft.Relationship(es['users']['user_id'], es['artist_plays']['user_id']))
    return es

user_df = pd.read_csv("training_user.csv")
artist_plays_df = pd.read_csv("training_artist_plays.csv")
es = load_entityset(user_df, artist_plays_df)
feature_matrix, feature_defs = ft.dfs(entityset=es,
                                      target_entity='artist_plays',
                                      ignore_variables={'artist_plays': ['play']})

# encode categoricals
encoded_fm, encoded_fl = ft.encode_features(feature_matrix, feature_defs)

# Impute/scale using SKLearn
imputer = Imputer()
scaler = StandardScaler()

imputed_fm = imputer.fit_transform(encoded_fm)
scaled_fm = scaler.fit_transform(imputed_fm)

# Now, save the encoded feature list, and the imputer/scaler to files to reuse in production
ft.save_features(encoded_fl, 'fl.p')
with open('imputer.p', 'wb') as f:
    pickle.dump(imputer, f)
with open('scaler.p', 'wb') as f:
    pickle.dump(scaler, f)

然后在生产中:

代码语言:javascript
复制
import featuretools as ft
import pickle
import pandas as pd

# load previous data
old_user_df = pd.read_csv("training_user.csv")
old_artist_plays_df = pd.read_csv("training_artist_plays.csv")
es_old = load_entityset(old_user_df, old_artist_plays_df)


# load new data
user_df = pd.read_csv("new_user.csv")
artist_plays_df = pd.read_csv("new_artist_plays.csv")
es_updated = load_entityset(user_df, artist_plays_df)

# merge both data sources
es = es_old.concat(es_updated)

# load back in encoded features
features = ft.load_features('fl.p', es)
fm = ft.calculate_feature_matrix(features,
                                 entityset=es,
                                 instance_ids=es_updated['artist_plays'].get_all_instances())

# impute and scale
with open('imputer.p', 'r') as f:
    imputer = pickle.load(f)
imputed_fm = imputer.transform(fm)
with open('scaler.p', 'r') as f:
    scaler = pickle.load(f)
scaled_fm = scaler.transform(imputed_fm)

我们有一些演示使用这个工作流程,检查这个例子,以预测一个杂货店购物者将在未来购买什么。

我还在一个实时生产环境中使用了这个工作流来预测大型软件项目的交付指标--看看我们发布的这个白皮书,它通过这个方法和现场部署的结果进行了详细的分析。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42526160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档