理论
问题一
要加入新的特征观察模型F1是否发生变化,首先需要知道原始的特征工程部分对应的模型评估指标,例如准确率、召回率、F1值等。
假设模型评估指标是F1值,那么可以按照以下步骤进行:
加入新的特征,可以选择与目标变量相关性较高的特征,或者通过领域知识选择与问题相关的特征。
根据新的特征,修改数据处理和分析部分的代码以提取新特征。
使用修改后的特征工程进行训练,并计算模型的F1值。
比较加入新特征后的模型F1值与原始模型F1值,观察是否发生变化。
问题二
实践代码
# 修改后的特征工程代码
def feature_engineering(df):
# 特征处理代码...
# 添加新特征
df['key_sum'] = df[['key1','key2','key3','key4','key5','key6','key7','key8','key9']].sum(axis=1)
df['eid_freq_log'] = np.log(df['eid_freq'])
encoded_hour = pd.get_dummies(df['common_ts_hour'], prefix='hour')
df = pd.concat([df, encoded_hour], axis=1)
return df
# 模型评估指标计算代码
def evaluate_model(y_true, y_pred):
predicted_labels = [1 if pred >= 0.5 else 0 for pred in y_pred] # 假设是二分类模型,阈值为0.5
# 计算模型的 F1 值
f1 = f1_score(y_true, predicted_labels)
return f1_value
# 原始特征工程部分的代码
processed_data = feature_engineering(data)
model = train_model(processed_data)
predictions = model.predict(processed_data)
f1_score = evaluate_model(true_labels, predictions)
# 加入新特征后的特征工程部分的代码
processed_data_with_new_feature = feature_engineering(data)
model_with_new_feature = train_model(processed_data_with_new_feature)
predictions_with_new_feature = model_with_new_feature.predict(processed_data_with_new_feature)
f1_score_with_new_feature = evaluate_model(true_labels, predictions_with_new_feature)
# 输出比较结果
print("原始模型的 F1 值:", f1_score)
print("加入新特征后的模型的 F1 值:", f1_score_with_new_feature)