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

ANN医保成本预测项目中DataFrame无concat属性错误求助

医保数据集ANN成本预测模型参数调优代码错误排查

问题描述

我正在开展一项基于医保数据集的ANN(人工神经网络)成本预测模型项目,编写了用于寻找最优batch_size和epochs参数的代码,但运行时出现错误:

AttributeError: 'DataFrame' object has no attribute 'concat'

尝试过append()和concat()方法都没解决,需要排查问题。

原代码

def FunctionFindBestParams(X_train, y_train, X_test, y_test):
    

    batch_size_list=[5, 10, 15, 20]
    epoch_list  =   [5, 10, 50, 100]

    import pandas as pd
    SearchResultsData=pd.DataFrame(columns=['TrialNumber', 'Parameters', 'Accuracy'])
    
    TrialNumber=0
    for batch_size_trial in batch_size_list:
        for epochs_trial in epoch_list:
            TrialNumber+=1
            
            model = Sequential()
            model.add(Dense(units=5, input_dim=X_train.shape[1], kernel_initializer='normal', activation='relu'))
            model.add(Dense(units=5, kernel_initializer='normal', activation='relu'))
            model.add(Dense(1, kernel_initializer='normal'))
            model.compile(loss='mean_squared_error', optimizer='adam')
            model.fit(X_train, y_train ,batch_size = batch_size_trial, epochs = epochs_trial, verbose=0)
            MAPE = np.mean(100 * (np.abs(y_test-model.predict(X_test))/y_test))
            
            print(TrialNumber, 'Parameters:','batch_size:', batch_size_trial,'-', 'epochs:',epochs_trial, 'Accuracy:', 100-MAPE)
            
            SearchResultsData=SearchResultsData.concat(pd.DataFrame(data=[[TrialNumber,     str(batch_size_trial)+'-'+str(epochs_trial), 100-MAPE]], 
columns=['TrialNumber', 'Parameters', 'Accuracy'] ))
    return(SearchResultsData)

ResultsData=FunctionFindBestParams(X_train, y_train, X_test, y_test)

错误原因分析

  • concat()是pandas库的顶层函数,并非DataFrame对象的实例方法,你错误地调用了SearchResultsData.concat(...),这是导致报错的直接原因。
  • 另外,旧版pandas中的DataFrame.append()方法已被弃用,即便使用也会抛出警告,且不符合当前pandas的最佳实践。

修复后的代码

def FunctionFindBestParams(X_train, y_train, X_test, y_test):
    batch_size_list=[5, 10, 15, 20]
    epoch_list  =   [5, 10, 50, 100]

    import pandas as pd
    import numpy as np
    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Dense

    SearchResultsData=pd.DataFrame(columns=['TrialNumber', 'Parameters', 'Accuracy'])
    
    TrialNumber=0
    for batch_size_trial in batch_size_list:
        for epochs_trial in epoch_list:
            TrialNumber+=1
            
            model = Sequential()
            model.add(Dense(units=5, input_dim=X_train.shape[1], kernel_initializer='normal', activation='relu'))
            model.add(Dense(units=5, kernel_initializer='normal', activation='relu'))
            model.add(Dense(1, kernel_initializer='normal'))
            model.compile(loss='mean_squared_error', optimizer='adam')
            model.fit(X_train, y_train ,batch_size = batch_size_trial, epochs = epochs_trial, verbose=0)
            # 减少冗余日志输出
            y_pred = model.predict(X_test, verbose=0)
            MAPE = np.mean(100 * (np.abs(y_test - y_pred)/y_test))
            
            print(TrialNumber, 'Parameters:','batch_size:', batch_size_trial,'-', 'epochs:',epochs_trial, 'Accuracy:', 100-MAPE)
            
            # 修复concat调用方式,添加索引重置避免重复
            new_row = pd.DataFrame(
                data=[[TrialNumber, f"{batch_size_trial}-{epochs_trial}", 100-MAPE]],
                columns=['TrialNumber', 'Parameters', 'Accuracy']
            )
            SearchResultsData = pd.concat([SearchResultsData, new_row], ignore_index=True)
    return SearchResultsData

ResultsData=FunctionFindBestParams(X_train, y_train, X_test, y_test)

额外优化说明

  • 补充了缺失的导入语句(numpy、keras相关模块),避免运行时出现导入错误
  • 将模型预测结果存入变量y_pred,代码逻辑更清晰
  • 使用f-string格式化参数字符串,可读性更强
  • 在pd.concat中添加ignore_index=True,避免循环中出现索引重复问题

内容的提问来源于stack exchange,提问作者Nike Cage 675

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:34:57