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

使用Logistic Regression判断奇偶预测错误,求代码问题排查

逻辑回归判断数字奇偶预测错误排查

尝试用逻辑回归算法判断数字奇偶,以1-20的数组作为X_train,对应奇偶的0/1二进制数组作为y_train训练模型,但用X_test预测时得到错误结果,输出为[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 0. 0. 0. 0.]。原代码如下:

import numpy as np

X_train = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], dtype=float).reshape(-1, 1)
y_train = np.array([1, 0, 1, 0, 1, 0, 1, 0, 1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0], dtype=float)
X_test = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 55, 88, 99, 100], dtype=float).reshape(-1, 1)

from sklearn import linear_model
logreg = linear_model.LogisticRegression()
logreg.fit(X_train, y_train)
y_predict = logreg.predict(X_test)
print(y_predict)

问题原因

逻辑回归是线性分类模型,只能学习特征与标签之间的线性关系。但数字的奇偶性和数值大小并非线性关系:奇数和偶数随数值增大交替出现,不存在一个线性阈值能将两类完全分开。模型训练时只能拟合出“数值较小的样本更可能是1,数值较大的样本更可能是0”的错误规律,导致预测结果完全偏离预期。

解决方案

通过特征工程提取能直接反映奇偶性的特征——对数字取模2,此时特征值与标签完全线性相关(模2得1对应奇数,模2得0对应偶数),逻辑回归就能正确学习分类规则。

修改后的代码:

import numpy as np

# 特征工程:用数字对2取模作为输入特征
X_train = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]).reshape(-1, 1) % 2
y_train = np.array([1, 0, 1, 0, 1, 0, 1, 0, 1,  0,  1,  0,  1,  0,  1,  0,  1,  0,  1,  0])
X_test = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 55, 88, 99, 100]).reshape(-1, 1) % 2

from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression()
logreg.fit(X_train, y_train)
y_predict = logreg.predict(X_test)
print(y_predict)

运行后输出:[1 0 1 0 1 0 1 0 1 0 1 0 1 0],完全符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:48:28