给定1-20的数字数组(X_序列)和0或1的二进制值数组(y_序列),将其传递给逻辑回归算法,然后训练模型.try 用低于X_的测试进行预测会得到错误的数据.

创建了样本序列和测试数据,如下所示.请建议代码有什么问题.

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)

Output :
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 0. 0. 0. 0.]

推荐答案

一个类似的问题已经被问了here个.我想用这个帖子作为我解决问题的灵感.

但首先让我提两件事:

  1. 如果特征和标签之间存在某种嵌套线性关系,则逻辑回归在时间、性能和可解释性方面非常有益,但很明显,您的示例并非如此.如果输入为奇数,则要估计一个等于1的不连续函数,否则为零,这是不容易实现的.

  2. 您的数据表示不好.我认为这一点对于您的预测目标更为关键,因为更好的数据表示确实会带来更好的预测.

接下来,我想分享另一种数据表示.这种新的表示法确实产生了完美的预测结果,即使是对于简单的非调和逻辑回归.

代码:

import numpy as np
from sklearn import linear_model

X_train = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
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])

def convert_repr(x):
    return list(map(int, list(str(format(x, '016b')))))

# Change data representation
X_train = np.array(list(map(convert_repr, X_train)))
X_test = np.array(list(map(convert_repr, X_test)))

logreg = linear_model.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.]

如您所见,数据比实际模型更重要.

Python相关问答推荐

如何删除重复的文字翻拍?

在用于Python的Bokeh包中设置按钮的样式

在电影中向西北方向对齐""

如何使用Azure Function将xlsb转换为xlsx?

如何在信号的FFT中获得正确的频率幅值

合并相似列表

如何编辑此代码,使其从多个EXCEL文件的特定工作表中提取数据以显示在单独的文件中

当我定义一个继承的类时,我可以避免使用`metaclass=`吗?

如何在Python中实现高效地支持字典和堆操作的缓存?

Numpy`astype(Int)`给出`np.int64`而不是`int`-怎么办?

根据边界点的属性将图划分为子图

如何判断特定的OPC UA node 是否已经存在Asyncua?

有没有一种简单的方法来访问Polars struct 中的值?

apply to pandas列不会给出正确的结果.

如果属性的类型是联合并使用默认值,为什么属性不能与类同名?

如何在Python中返回多行SQL查询

基于条件的Pandas 数据框背景 colored颜色

在Python中使用";swmm_api";包中的";lid_use";时出错?

如何根据极点中的条件计算当前行以上的行数?

为什么我不能在Sphinxcontrib-HttpExample中使用python来换行JSON属性?