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

tenserflow.kerax处理NASA小行星数据集标签与模型输出异常求助

问题根因与修复方案

1. 所有问题的核心起源:标准化时包含标签列

StandardScaler是针对数值特征的缩放工具,分类标签danger不需要、也不能参与标准化,你将全量列(含标签)传入缩放逻辑,直接导致标签值被修改,后续所有标签相关的异常都来源于此。

2. 多DataFrame同步修改的原因

pandas中直接用=赋值DataFrame属于浅拷贝,df、df_scaled、df_scaled_prime三个变量指向同一块内存地址,修改任意一个的列内容,其他变量都会同步变化,如需独立副本请用.copy()方法,示例:df_scaled = df.copy()。

3. 3特征子集训练结果异常的原因

  • 你在子集训练代码中完全没有执行标准化步骤,特征量级差异大导致模型无法学习有效规律
  • 错误的标签判断逻辑:原始标签为布尔类型,你用==1做判断,结合未标准化的特征,模型最终直接全部预测为正样本,才会出现TN、FN全为0的固定输出
  • 你复用全量数据的标签重置逻辑无效,是因为该逻辑是基于标签被标准化后的数值做判断,子集训练时标签未被标准化,自然不生效

正确实现步骤

  • 特征与标签必须拆分处理,标签全程不参与缩放、变换操作
# 通用处理逻辑(全量特征/子集特征通用)
# 1. 数据拆分
df = dfprime.copy() # 深拷贝避免修改原始数据
# 全量特征列,子集训练时替换为你要的[6,7,8]列即可
feature_cols = df.columns[:-1] 
label_col = df.columns[-1]
X = df[feature_cols]
y = df[label_col].astype(bool) # 提前固定标签类型,不需要后续遍历修改
# 2. 仅对特征做标准化
ss = StandardScaler()
X_scaled = ss.fit_transform(X)
# 3. 拆分训练测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)
# 4. 模型训练(3特征时input shape会自动适配为(3,))
inputLayer = layers.Input(shape=(X_scaled.shape[1],))
outputLayer = layers.Dense(1,activation='sigmoid',use_bias = True)(inputLayer)
perceptron = models.Model(inputLayer, outputLayer)
perceptron.compile(
    loss='BinaryCrossentropy', 
    optimizer = 'sgd',
    metrics=[
        metrics.BinaryAccuracy(),
        metrics.TruePositives(),
        metrics.FalsePositives(), 
        metrics.TrueNegatives(),
        metrics.FalseNegatives()
    ]
)
history = perceptron.fit(X_train, y_train, epochs=500, batch_size=1024, shuffle=True, verbose=0)
asd = perceptron.evaluate(X_test, y_test)
results = perceptron.predict(X_test, verbose=0)
  • 若调整后仍存在全预测为正的问题,先检查数据集正负样本比例,若正样本占比超过90%属于样本不均衡,可通过给损失函数添加class_weight参数、正负样本重采样等方式优化。

内容的提问来源于stack exchange,提问作者Diego Pavez Verdi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:24:01