Logistic Regression => ValueError: 设置数组元素时使用了序列

我是一个机器学习的新手,我正在尝试在我的样本数据集上应用逻辑回归。我有一个包含数字列表的单一特征,并希望预测类别。

以下是我的代码

from sklearn.linear_model import LogisticRegressiona = [[1,2,3], [1,2,3,4,5,6], [4,5,6,7], [0,0,0,7,1,2,3]]b = [0,1,0, 0]p = [[9,0,2,4]]clfModel1 = LogisticRegression(class_weight='balanced')clfModel1.fit(a,b)clfModel1.predict(p)

我得到了以下错误

Traceback (most recent call last):  File "F:\python_3.4\NLP\t.py", line 7, in <module>    clfModel1.fit(a,b)  File "C:\Python34\lib\site-packages\sklearn\linear_model\logistic.py", line 1173, in fit    order="C")  File "C:\Python34\lib\site-packages\sklearn\utils\validation.py", line 521, in check_X_y    ensure_min_features, warn_on_dtype, estimator)  File "C:\Python34\lib\site-packages\sklearn\utils\validation.py", line 382, in check_array    array = np.array(array, dtype=dtype, order=order, copy=copy)ValueError: setting an array element with a sequence.>>>

有什么方法可以改变数据,使我能够应用分类器并预测结果吗?


回答:

逻辑回归是对以下形式的函数进行估计的工具:

R^d -> [0,1]

但你的数据显然不是R^d的子集,因为a中的每个样本长度(维度数量)不同,因此无法应用。

另一个问题是p也应该是一组样本的列表,而不仅仅是一个样本(当然它也必须有d个维度)。

没有办法绕过这个问题,这根本就是一个错误的想法。处理“特殊”数据的典型解决方案有以下几种:

  • 你可以预定义自己的自定义映射(特征提取步骤),该映射可以将你不同长度的点转换为固定长度的表示(即输出d个数字)。没有通用的方法来做到这一点——一切都取决于数据。
  • 有些模型可以处理不同长度的输入,比如LSTM,但从逻辑回归到递归神经网络是一个巨大的跳跃。
  • 使用基于相似性的方法(如kNN),并简单地定义你自己的度量标准,以确定两个“数字列表”之间的相似性。

没有其他办法——要么重新考虑数据的表示方式,要么改变方法。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注