机器学习模型准确率计算报错:样本数量不一致问题求助
问题排查与修复方案
核心错误点分析
模型函数硬编码变量,未使用传入参数
你的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样本)做评分,样本数不匹配报错。数据集命名混淆(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,变量名完全混乱,导致数据集不对应。拆分后样本数异常
拆分前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
相关产品推荐
相关产品推荐

