mydmomo 2023-03-03 10:58 采纳率: 61.1%
浏览 68
已结题

为什么逻辑回归结果会和autogluon一摸一样啊

我用了逻辑回归与AutoGluon两个方法构架评分卡,按理说AutoGluon构建的模型roc_auc要更好啊,但是结果确是,他俩输出的结果一模一样,为什么会一模一样啊?

Xtr_woe = data_tr_woe.drop(['isDefault','type'],axis=1)
Ytr_woe = data_tr_woe['isDefault']
Xts_woe = data_ts_woe.drop(['isDefault','type'],axis=1)
Yts_woe = data_ts_woe['isDefault']
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(Xtr_woe,Ytr_woe)
from toad.metrics import KS, F1, AUC

EYtr_proba = lr.predict_proba(Xtr_woe)[:,1]
EYtr = lr.predict(Xtr_woe)


print('Training error')
print('KS:', KS(EYtr_proba,Ytr_woe))
print('AUC:', AUC(EYtr_proba,Ytr_woe))

EYts_proba = lr.predict_proba(Xts_woe)[:,1]
EYts = lr.predict(Xts_woe)

print('\nTest error')
print('KS:', KS(EYts_proba,Yts_woe))
print('AUC:', AUC(EYts_proba,Yts_woe))

这是逻辑回归的代码,我一个参数都没调

import autogluon
from autogluon.tabular import TabularDataset,TabularPredictor  
import pandas as pd
import numpy as np
label='isDefault'
train_data=TabularDataset(data_tr_woe.drop(["type"],axis=1)  )
metric = 'roc_auc'
predictor=TabularPredictor(label=label,eval_metric=metric).fit(train_data,presets='best_quality')
best=predictor.get_model_best()
print(best)
test_data=TabularDataset(data_ts_woe.drop(['isDefault','type'],axis=1))
auto_proba=predictor.predict_proba(test_data)
auto_proba = np.array(EYts_proba).flatten() 
print(auto_proba )
print(len(auto_proba ))
print('\nTest error')
print('KS:', KS(auto_proba,Yts_woe))
print('AUC:', AUC(auto_proba,Yts_woe))

这是auto的代码,他俩输出的proba一模一样,我要崩溃了

  • 写回答

9条回答 默认 最新

  • DEMAXIYAZHENGYI 2023-03-05 14:20
    关注
    
    import autogluon
    from autogluon.tabular import TabularDataset,TabularPredictor  
    import pandas as pd
    import numpy as np
    label='isDefault'
    train_data=TabularDataset(data_tr_woe.drop(["type"],axis=1)  )
    metric = 'roc_auc'
    predictor=TabularPredictor(label=label,eval_metric=metric).fit(train_data,presets='best_quality',auto_stack=True)
    test_data=TabularDataset(data_ts_woe.drop(['isDefault','type'],axis=1))
    predictor.predict_proba(test_data)
    auto_proba=predictor.predict_proba(test_data)
    auto_proba=auto_proba.values[:,1]
    auto_proba
    auto_proba = np.array(auto_proba).flatten() 
    print(auto_proba )
    print(len(auto_proba ))
    print('Training error')
    print('KS:', KS(train_proba,Ytr_woe))
    print('AUC:', AUC(train_proba,Ytr_woe))
    
    
    
    
    print('\nTest error')
    print('KS:', KS(auto_proba,Yts_woe))
    print('AUC:', AUC(auto_proba,Yts_woe))
    
    
    
    

    直接复制粘贴我给的,出结果,就是变量赋予错误了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • BitGPT 2023-03-03 11:06
    关注

    该回答引用ChatGPT

    可能是因为你在计算 AutoGluon 的概率预测时使用了错误的变量。在你的代码中,你已经计算了逻辑回归的概率预测并将其存储在 EYts_proba 中,但是在计算 AutoGluon 的概率预测时,你使用了另一个变量 auto_proba,这个变量的值似乎没有被计算,而是直接使用了 EYts_proba 的值,这样就导致了两个模型输出的概率预测结果一模一样。

    请尝试将以下代码行:

    
    auto_proba = np.array(EYts_proba).flatten()
    
    

    替换为:

    
    auto_proba = np.array(predictor.predict_proba(test_data)).flatten()
    
    

    这将确保您正在计算 AutoGluon 的概率预测,并将其与逻辑回归的预测进行比较。

    评论
  • 「已注销」 2023-03-03 11:07
    关注

    参考GPT和自己的思路,如果逻辑回归和AutoGluon两个模型的结果一模一样,可能是因为它们所使用的数据、特征以及超参数设置相同。另外,逻辑回归是AutoGluon使用的默认算法之一,所以两个模型使用的算法也相同。

    可以尝试对AutoGluon的参数进行更改,比如修改超参数、使用不同的模型、调整特征选择策略等,以期获得更好的性能。

    此外,值得注意的是,在测试集上的预测结果也受到一些随机因素的影响,因此多次运行可以得到更稳定的结果。

    以下是修改后的代码,将AutoGluon的预测结果赋值给了auto_proba变量,而不是将逻辑回归的预测结果赋值给auto_proba变量。此外,还将计算KS和AUC的代码也进行了修改,改为使用AutoGluon预测结果的相关函数。

    import autogluon
    from autogluon.tabular import TabularDataset,TabularPredictor
    import pandas as pd
    import numpy as np
    from toad.metrics import KS, F1, AUC
    
    label = 'isDefault'
    train_data = TabularDataset(data_tr_woe.drop(["type"], axis=1))
    metric = 'roc_auc'
    predictor = TabularPredictor(label=label, eval_metric=metric).fit(train_data, presets='best_quality')
    
    test_data = TabularDataset(data_ts_woe.drop(['isDefault', 'type'], axis=1))
    auto_proba = predictor.predict_proba(test_data)
    auto_proba = np.array(auto_proba)[:, 1]
    
    print('\nTest error')
    print('KS:', KS(auto_proba, Yts_woe))
    print('AUC:', AUC(auto_proba, Yts_woe))
    
    
    
    评论 编辑记录
  • 程序yang 全栈领域优质创作者 2023-03-03 11:09
    关注

    修改AutoGluon代码,应该能够得到正确的AutoGluon模型的预测概率,并且与逻辑回归模型的预测概率不同。

    predictor=TabularPredictor(label=label,eval_metric=metric).fit(train_data, presets='best_quality', auto_stack=True)
    auto_proba=predictor.predict_proba(test_data)
    
    评论
  • MarkHan_ 2023-03-03 11:15
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    可能有几个原因会导致你的逻辑回归模型和AutoGluon模型输出的结果一模一样。

    首先,你在逻辑回归模型中没有调整任何参数,而AutoGluon模型是使用了自动调参的方法,如果逻辑回归模型的默认参数恰好与AutoGluon自动搜索的最佳参数相同,那么两个模型的结果可能是相同的。

    其次,你在输出AutoGluon模型的预测结果时,使用了逻辑回归模型的预测概率值(EYts_proba),这可能是一个错误。应该使用AutoGluon模型的预测概率值(auto_proba)来计算KS和AUC。

    最后,两个模型输入的数据可能是相同的,这可能是导致结果相同的原因之一。

    你可以尝试打印出两个模型的参数和输入数据,以进一步排除问题。

    评论
  • ThesisMaster 2023-03-03 11:18
    关注

    可能是因为你使用了相同的数据集和参数设置来训练这两个模型,导致它们产生了相同的结果。如果你想证实AutoGluon比逻辑回归更好,可以尝试使用不同的数据集或参数设置来训练模型,并比较它们的性能。

    评论
  • Zyb0627 2023-03-03 11:53
    关注

    您提供的AutoGluon代码中,使用的是逻辑回归模型的预测结果EYts_proba,而不是AutoGluon模型的预测结果auto_proba。
    你可以用一下代码试试

    import autogluon.tabular as ag_tabular
    from autogluon.tabular import TabularDataset, TabularPredictor
    from toad.metrics import KS, AUC
    import pandas as pd
    
    label = 'isDefault'
    train_data = TabularDataset(data_tr_woe.drop(['type'], axis=1))
    metric = 'roc_auc'
    predictor = TabularPredictor(label=label, eval_metric=metric).fit(train_data, presets='best_quality')
    best_model = predictor.get_model_best()
    
    test_data = TabularDataset(data_ts_woe.drop(['isDefault', 'type'], axis=1))
    y_true = test_data[label]
    auto_proba = predictor.predict_proba(test_data)
    auto_proba = auto_proba[label].values
    
    print('Test error')
    print('KS:', KS(auto_proba, y_true))
    print('AUC:', AUC(auto_proba, y_true))
    

    回答不易,还请能够采纳!!

    评论
  • singsex 2023-03-03 14:19
    关注

    根据提供的代码,可以发现问题出在AutoGluon代码中的以下行:

    auto_proba = np.array(EYts_proba).flatten() 
    

    这里使用了之前在逻辑回归代码中定义的 EYts_proba 变量,而实际上应该使用 AutoGluon 中预测出的概率值 auto_proba。因此,可以将这一行修改为:

    auto_proba = predictor.predict_proba(test_data)
    

    修改后的完整代码如下:

    import autogluon
    from autogluon.tabular import TabularDataset, TabularPredictor
    from toad.metrics import KS, AUC
    import pandas as pd
    import numpy as np
    
    # 读取数据
    data_tr_woe = pd.read_csv('train_woe.csv')
    data_ts_woe = pd.read_csv('test_woe.csv')
    
    # 定义标签列名
    label = 'isDefault'
    
    # 训练数据
    train_data = TabularDataset(data_tr_woe.drop(['type'], axis=1))
    
    # 指定评价指标
    metric = 'roc_auc'
    
    # 模型训练
    predictor = TabularPredictor(label=label, eval_metric=metric).fit(train_data, presets='best_quality')
    best = predictor.get_model_best()
    
    # 预测概率值
    test_data = TabularDataset(data_ts_woe.drop(['isDefault', 'type'], axis=1))
    auto_proba = predictor.predict_proba(test_data)
    
    # 计算模型性能
    print('\nTest error')
    print('KS:', KS(auto_proba, Yts_woe))
    print('AUC:', AUC(auto_proba, Yts_woe))
    

    这样修改后,应该可以得到正确的结果。

    评论
  • 蓝白、波罗歌 2023-03-03 15:41
    关注

    以下答案由GPT-3.5大模型与博主波罗歌共同编写:
    首先,逻辑回归是一个已经被广泛应用的机器学习算法,在数据量较小或特征数量较少的场景下,其可能会与AutoGluon(一款基于深度学习和集成学习的自动化机器学习工具)获得相似的性能。

    其次,你的代码中有一处小错误, auto_proba = np.array(EYts_proba).flatten(),将逻辑回归的预测概率赋值给了 auto_proba,导致输出的值相同。实际应该是 auto_proba=predictor.predict_proba(test_data)[:,1],才能获得AutoGluon模型的预测概率。

    下面是修改后的AutoGluon代码:

    import autogluon
    from autogluon.tabular import TabularDataset, TabularPredictor  
    import pandas as pd
    import numpy as np
    from toad.metrics import KS, F1, AUC
    
    # 读取数据
    data_tr_woe=pd.read_csv('train_woe.csv')
    data_ts_woe=pd.read_csv('test_woe.csv')
    
    label = 'isDefault'
    train_data = TabularDataset(data_tr_woe.drop(["type"], axis=1))
    test_data = TabularDataset(data_ts_woe.drop(['isDefault','type'], axis=1))
    
    metric = 'roc_auc'
    predictor = TabularPredictor(label=label, eval_metric=metric).fit(train_data, presets='best_quality')
    
    # 获取模型预测概率
    auto_proba = predictor.predict_proba(test_data)[:, 1]
    
    # 输出测试误差
    print('\nTest error')
    print('KS:', KS(auto_proba, Yts_woe))
    print('AUC:', AUC(auto_proba, Yts_woe))
    

    希望以上回答对你有所帮助!
    如果我的回答解决了您的问题,请采纳!

    评论
查看更多回答(8条)

报告相同问题?

问题事件

  • 系统已结题 3月13日
  • 已采纳回答 3月5日
  • 赞助了问题酬金15元 3月3日
  • 创建了问题 3月3日

悬赏问题

  • ¥15 shopify网站提速
  • ¥15 深海控制器DSE7320MKII和博世ECU间can通讯知识
  • ¥15 Ru的复折射率用于FDTD 200nm到1200nm
  • ¥15 使用Fiddler抓包,textview的乱码如何解决
  • ¥50 trio连接驱动器报错
  • ¥15 有谁懂nhanes的权重计算啊
  • ¥15 欧姆龙PLC 电机控制 限位
  • ¥30 如何处理shell命令接收到的视频流并实时播放出来
  • ¥15 虚心请教C#的代码优化问题
  • ¥15 有偿求做台风过境全过程模拟仿真