You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure ML中如何让ControlNo列不参与训练但作为输出返回

解决方法:保留ControlNo用于输出但排除其参与训练

嗨,我来帮你搞定这个需求!你要的是训练时把ControlNo踢出去,但最终输出得把它和预测的Score Label放在一起对吧?我分两种常见场景给你说具体操作:

一、低代码可视化平台(比如你用的带Select Columns工具的Dataset环境)

这是最贴合你当前操作的场景,核心思路是分分支处理+后期合并:

  • 第一步:拆分数据集分支
    • 分支A:用Select Columns工具去掉ControlNo,这条分支用来做特征工程、模型训练、预测,最终会得到包含Score Label的结果集。
    • 分支B:保留原始数据集的ControlNo列(或者直接保留整个原始集,不过只留ControlNo更高效),这条分支全程不参与任何训练流程,只用来后续合并。
  • 第二步:合并结果
    当分支A完成预测得到Score Label后,用平台里的Join工具把分支B的ControlNo和分支A的Score Label合并。这里要注意:
    • 如果ControlNo是每条数据的唯一标识,直接用它作为关联键,绝对不会出错;
    • 如果不是唯一标识,一定要保证两个分支的数据集行顺序完全一致,避免ControlNo和Score Label对应错位。选择Join类型的时候选“内连接”或者“左连接”,确保所有行都能匹配上。

二、代码实现方式(Python/PySpark)

如果是用代码来做,逻辑和上面一致,只是用代码来操作:

Pandas 示例

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier # 举个模型例子

# 假设你的原始数据集是df
# 第一步:分离ControlNo和训练用数据
control_no = df[['ControlNo']]
train_data = df.drop('ControlNo', axis=1)

# 第二步:模型训练流程(这里是简化示例)
X = train_data.drop('Label', axis=1) # 假设Label是目标列
y = train_data['Label']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = RandomForestClassifier()
model.fit(X_train, y_train)

# 第三步:得到预测结果(Score Label)
predictions = model.predict_proba(X_test)[:,1] # 假设是概率得分
predictions_df = pd.DataFrame({'Score Label': predictions})

# 第四步:合并ControlNo和Score Label(注意这里X_test对应的是测试集的ControlNo,要对应上)
test_control_no = control_no.loc[X_test.index]
final_output = pd.concat([test_control_no, predictions_df], axis=1)

PySpark 示例

from pyspark.sql import SparkSession
from pyspark.ml.classification import RandomForestClassifier
from pyspark.ml.feature import VectorAssembler

spark = SparkSession.builder.appName("example").getOrCreate()
df = spark.read.csv("your_data.csv", header=True, inferSchema=True)

# 第一步:分离ControlNo和训练用数据
control_no_df = df.select("ControlNo")
train_data = df.drop("ControlNo")

# 第二步:模型训练流程(简化示例)
assembler = VectorAssembler(inputCols=[col for col in train_data.columns if col != 'Label'], outputCol="features")
train_data_assembled = assembler.transform(train_data)
rf = RandomForestClassifier(labelCol="Label", featuresCol="features")
model = rf.fit(train_data_assembled)

# 第三步:得到预测结果
predictions_df = model.transform(train_data_assembled)
# 提取需要的Score Label(比如概率列,这里假设是probability列的第二个元素)
from pyspark.sql.functions import element_at
predictions_df = predictions_df.withColumn("Score Label", element_at("probability", 2))

# 第四步:合并ControlNo和Score Label(用行号关联,确保顺序一致)
from pyspark.sql.window import Window
from pyspark.sql.functions import row_number

window = Window.orderBy("ControlNo")
control_no_df = control_no_df.withColumn("row_id", row_number().over(window))
predictions_df = predictions_df.withColumn("row_id", row_number().over(window))

final_output = control_no_df.join(predictions_df, on="row_id") \
                           .drop("row_id", "features", "rawPrediction", "probability", "prediction") \
                           .select("ControlNo", "Score Label")

关键注意点

  • 不管用哪种方式,确保ControlNo和Score Label的对应关系绝对正确是核心,用唯一标识关联是最稳妥的方式;
  • 如果是批量预测,一定要保证训练/预测时的行顺序和原始ControlNo的顺序完全匹配,或者用唯一键关联。

内容的提问来源于stack exchange,提问作者Serdia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:35:31