【问题标题】:How to build Baseline model to predict Y with multiple values using skLearn如何使用 skLearn 构建基线模型以预测具有多个值的 Y
【发布时间】:2025-11-25 00:35:02
【问题描述】:

我有一个如下所示的示例数据框。我想建立一个基线模型来预测 y_combined 使用 X=df.filter(regex='x_'):

df = pd.DataFrame({
    'x_1':[0.1,0.2,0.1,0],
    'x_2':[0.5,0.1,0.3,0.4],
    'x_3':[0.2,0.1,0.6,0.1],
    'x_4':[0,0.5,0.2,0.3],
    'y_1': [0, 1, 1, 0],
    'y_2': [0, 0, 1, 0],
    'y_3': [0, 1, 0, 1],
    'y_combined': [np.array([0, 0, 0]), np.array([1, 0, 1]),
                   np.array([1, 1, 0]), np.array([0, 0, 1])]
})

我是基线模型构建的新手。要获取y_predicted,我应该如何使用strategy="constant" 指定DummyClassifer() 模型?还是我应该使用不同的策略?

例如,如果y_predicted = [1,1,1],那么我将通过获取y_combinedy_predicted 之间的平均质心来查看预测模型的执行情况。

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    我将在您想使用DummyClassifier 使用strategy='constant' 设置为多标签分类问题构建基线模型的前提下回答您的问题,其中输出等于y_combineddf。在这种情况下,以下代码将起作用:

    from sklearn.dummy import DummyClassifier
    import numpy as np
    import pandas as pd
    
    
    X = pd.DataFrame({
        'x_1': [0.1,0.2,0.1,0],
        'x_2': [0.5,0.1,0.3,0.4],
        'x_3': [0.2,0.1,0.6,0.1],
        'x_4': [0,0.5,0.2,0.3]
    })
    y = np.array([[0, 0, 0], [1, 0, 1], [1, 1, 0], [0, 0, 1]])
    
    clf = DummyClassifier(strategy='constant', constant=np.array([1, 1, 1]))
    clf.fit(X, y)
    

    请注意,当您使用strategy='constant' 时,您还必须声明应通过DummyClassifierconstant=... 参数预测的常数值。您将看到基线模型现在将始终预测指定的常量值,无论输入如何:

    y_pred = clf.predict(X)
    print(y_pred)
    
    # output
    [[1 1 1]
     [1 1 1]
     [1 1 1]
     [1 1 1]]
    

    由于您还询问了其他策略,您基本上可以选择DummyClassifier文档中提到的任何策略。正如用户指南中所述,它们都有共同的行为:

    请注意,对于所有这些策略,predict 方法会完全忽略输入数据!

    【讨论】:

    • 非常感谢!由于我的实际数据有 48 个 Y 列,因此我设置了 constant=np.full( shape=48, fill_value=1, dtype=np.int ) 但是,这给了我一个错误“常量目标值应该具有形状 (1, 1 ).""
    • 设置常量的方式没有问题。错误消息但表明具有目标值(示例中为y)的数组的形状为(1, 1),与显然具有(48,) 的常量值不同。您必须将数组的形状与目标值和常量的形状对齐。然后它会工作。
    最近更新 更多