我用以下步骤建立了一个很好的线性回归模型:
我的问题是,如果我们在生产环境中使用这个模型,那么我们如何进行实时数据的特征工程,因为这个模型是用特征归一化和缩放的来建立的,那么如何对实时数据进行规范化和缩放以得到一个很好的预测呢?对于交叉验证和测试步骤,我们不需要显式的特征工程,因为在建立模型之前,这可以在数据预处理步骤中完成。实时数据特征工程呢?
发布于 2018-03-22 22:25:10
这些数据可以很好地帮助特征工具。它是一个开放源码的自动化功能工程库,它显式地处理时间,以确保不引入标签泄漏。对于您的音乐数据,您可以创建两个entities:"users"和"artist_plays",然后应用featuretools.dfs (深度特征综合)生成特性。将实体视为与关系数据库中的表相同的实体。深度特征综合创建了一个单表特征矩阵,可以从多个不同的表中建模,并具有高层次的统计特性。这是一个短柱,解释了它是如何工作的。
此示例使用的是普通Python,但可以修改为与Spark或达斯克一起使用。
# 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)然后在生产中:
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)我们有一些演示使用这个工作流程,检查这个例子,以预测一个杂货店购物者将在未来购买什么。
我还在一个实时生产环境中使用了这个工作流来预测大型软件项目的交付指标--看看我们发布的这个白皮书,它通过这个方法和现场部署的结果进行了详细的分析。
https://stackoverflow.com/questions/42526160
复制相似问题