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

机器学习数据预处理定义数值区间及逻辑回归泛化问题咨询

问题解答

1. 未训练年龄为2的样本仍得到正确预测的原因

你使用的逻辑回归模型属于线性分类器,它不会死板地只记住训练时见过的样本值,而是会从训练数据中学习到特征(年龄)和标签(输出)之间的通用规律:

  • 训练过程中模型会拟合出一个决策边界,大概在年龄=15的位置
  • 只要输入的年龄远小于15,无论这个值有没有在训练集中出现,模型都会根据学到的「年龄越小,输出为0的概率越高」的规律,将其判定为0类,这是机器学习模型泛化能力的正常表现。

2. 多区间分类的实现方法

你需要的是多分类任务,按照以下步骤实现即可:

第一步:给数据集打多分类标签

先根据年龄区间给原数据生成对应的输出标签,示例代码如下:

def get_label(age):
    if 0 <= age <=15:
        return 1
    elif 16 <= age <=30:
        return 2
    elif 31 <= age <=45:
        return 3
    # 超过45的数值可以根据你的实际需求补充规则

data['Output'] = data['Age'].apply(get_label)

第二步:选择多分类模型训练

逻辑回归本身支持多分类任务,scikit-learn中的LogisticRegression默认就会处理多分类场景,也可以选择决策树、随机森林这类更擅长拟合区间规则的模型,示例训练代码:

from sklearn.tree import DecisionTreeClassifier

# 特征和标签提取逻辑和之前的二分类任务一致
train_x = np.array(train[['Age']])
train_y = np.array(train["Output"])

# 初始化决策树分类器训练
clf = DecisionTreeClassifier()
clf.fit(train_x, train_y)

# 预测测试
print(clf.predict(np.array([[10]]))) # 输出1
print(clf.predict(np.array([[20]]))) # 输出2
print(clf.predict(np.array([[40]]))) # 输出3

如果你的区间规则是固定不变的,也可以直接用上述的get_label规则函数直接输出结果,不需要额外训练机器学习模型。

内容的提问来源于stack exchange,提问作者S Andrew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:27:03