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

机器学习模型准确率计算报错:样本数量不一致问题求助

问题排查与修复方案

核心错误点分析

  1. 模型函数硬编码变量,未使用传入参数
    你的Logistic_Regression函数定义了X_train, y_train, X_test参数,但内部却硬编码使用X_arr_train, y_arr_train, X_arr_test,导致函数完全忽略传入的参数,始终处理arrival数据集。这直接造成后续用departure的y_dep_test(108820样本)和arrival数据集的预测结果(108690样本)做评分,样本数不匹配报错。

  2. 数据集命名混淆(departure vs arrival)
    你拆分的是departure数据(df_dep),得到X_dep_train/X_dep_test,但调用模型时传入的是arrival数据(X_arr_train/X_arr_test),后续评分又混用y_dep_test和lg_score_dep,变量名完全混乱,导致数据集不对应。

  3. 拆分后样本数异常
    拆分前df_dep总样本数是329757,但你给出的X_dep_train.shape是(426742, 88),数量远超原数据,说明你可能把arrival数据集的形状错当成了departure的,进一步证明变量名混淆问题。


修复步骤

1. 修正模型函数,使用传入参数

将函数内的硬编码变量替换为定义的参数:

# Logistic Regression
def Logistic_Regression(X_train, y_train, X_test):
    from sklearn.linear_model import LogisticRegression
    c_range = [0.001,0.01,0.1,1,10,100]
    results = {}
    for c in c_range:
        lgreg = LogisticRegression(C = c, class_weight = {0:.91, 1:.09})
        lgreg.fit(X_train, y_train)  # 替换为传入的训练集参数
        predlgreg = lgreg.predict(X_test)  # 替换为传入的测试集参数
        results[c] = predlgreg
    return results    

2. 统一数据集调用,避免混淆

处理departure数据时,传入对应的变量:

# Departure Logistic Regression
lg_score_dep = Logistic_Regression(X_dep_train, y_dep_train, X_dep_test)

3. 修正评分函数的数据集匹配

评分时确保y_test与预测结果来自同一数据集:

def iterable_testing_results(test_name, y_test, array) :
    trinket = {}
    for item in array.items():
        trinket[item[0]] = accuracy_score(y_test, item[1])
    max_score = max(trinket.values())
    best_n = max(trinket, key=trinket.get)
    print(best_n)
    print(f'{best_n} makes the best value with a score of {max_score}.')
    print(f'Classification report for {test_name} \n {classification_report(y_test, array[best_n])}.')  # 替换为传入的y_test
    print(f'Confusion Matrix for {test_name} is \n {confusion_matrix(y_test, array[best_n])}.')  # 替换为传入的y_test

调用评分函数时传入对应数据集:

iterable_testing_results("Departure Logistic Regression", y_dep_test, lg_score_dep)

4. 验证拆分后数据一致性

拆分后需确保X和y的样本数完全匹配:

# 检查departure拆分后样本数
print(X_dep_train.shape[0], y_dep_train.shape[0])  # 应为220937, 220937
print(X_dep_test.shape[0], y_dep_test.shape[0])    # 应为108820, 108820

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:30:25