当前位置: 首页 > 知识库问答 >
问题:

linearRegression()返回列表中的列表(sklearn)

苏宜人
2023-03-14

我在Python中进行多元线性回归,但由于某种原因,系数没有正确返回为列表。相反,将返回列表中的列表:

from sklearn import linear_model
clf = linear_model.LinearRegression()
# clf.fit ([[0, 0, 0], [1, 1, 1], [2, 2, 2]], [0, 1, 2])
clf.fit([[394, 3878, 13, 4, 0, 0],[384, 10175, 14, 4, 0, 0]],[3,9])
print 'coef array',clf.coef_
print 'length', len(clf.coef_)
print 'getting value 0:', clf.coef_[0]
print 'getting value 1:', clf.coef_[1]

这将返回列表[]的列表中的值,而不是列表[]。知道为什么会这样吗?输出:

coef array [[  1.03428648e-03   9.54477167e-04   1.45135995e-07   0.00000000e+00
0.00000000e+00   0.00000000e+00]]
length 1
getting value 0: [  1.03428648e-03   9.54477167e-04   1.45135995e-07   0.0000000
0e+00 0.00000000e+00   0.00000000e+00]
getting value 1:
Traceback (most recent call last):
  File "regress.py", line 8, in <module>
    print 'getting value 1:', clf.coef_[1]
IndexError: index out of bounds

但这行得通:

from sklearn import linear_model
clf = linear_model.LinearRegression()
clf.fit ([[0, 0, 0], [1, 1, 1], [2, 2, 2]], [0, 1, 2])
# clf.fit([[394, 3878, 13, 4, 0, 0],[384, 10175, 14, 4, 0, 0]],[3,9])
print 'coef array',clf.coef_
print 'length', len(clf.coef_)
print 'getting value 0:', clf.coef_[0]
print 'getting value 1:', clf.coef_[1]

输出:

coef array [ 0.33333333  0.33333333  0.33333333]
length 3
getting value 0: 0.333333333333
getting value 1: 0.333333333333

共有3个答案

东方英豪
2023-03-14

似乎是scipy.linalg.的一个问题如果你跟踪调用链,它首先在https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/linear_model/base.py#L218,然后在https://github.com/scipy/scipy/blob/master/scipy/linalg/basic.py#L468.到达if语句。在第一种情况下m,n=2,6,在第二种情况下,您有m,n=3,3

杨凯旋
2023-03-14

我从未使用过你提到的多元线性回归模型,所以我不知道为什么会发生这种情况。但是,如果您只是想解决您的问题,您可以将列表展平:

flat_list = clf.coef_[0]

<罢工> 如果列表可能有多个子列表(并且您想将它们组合成一个扁平列表),那么您可以使用更通用的方法来扁平化它:

flat_list = [item for sublist in clf.coef_ for item in sublist]

编辑:在等待软件包开发人员的真实解释/解决方案时,您可以依赖如下解决方案:

if isinstance(clf.coef_[0], list):
    clf.coef_ = clf.coef_[0]

只有当列表中有子列表时,才会将其展平。

狄玮
2023-03-14

这是通过更新SciKit学习文件夹中的两个文件修复的。

代码如下:https://github.com/scikit-learn/scikit-learn/commit/d0b20f0a21ba42b85375b1fbc7202dc3962ae54f

 类似资料:
  • 我试图访问MyModelClass上的getter方法,但我的代码返回

  • 问题内容: 我有一个整数列表,我想生成一个包含所有连续整数列表的列表。 我有以下可行的方法,但似乎做起来很糟糕: 我已经看到其他问题,表明itertools.groupby是执行此操作的有效方法,但是我对该函数不熟悉,而且似乎在编写lambda函数来描述连续性方面遇到麻烦。 问题:是否有更好的方法(可能使用itertools.groupby?) 注意事项:full_list将具有1到59之间的整数

  • 问题内容: 返回对象的名称为。因此,当我致电时,此代码将失败。我有什么办法可以解决临时问题吗?还是我应该怎么做? ps这是我在python中的第一个代码。我认为这是功能。 问题答案: 您可以使用返回的反向迭代器。调用时,它会在列表中进行原位反转,并返回None。 编辑: 我知道您现在正在尝试执行的操作,在我看来,仅凭列表理解就可以轻松完成此操作: 这基本上是在第一个元素之后查看所有元素,并收集所有

  • 有人能告诉我为什么列表返回空吗?我的xpath是准确的,因为我重新检查了它,但我仍然无法迭代它,而调试for循环甚至没有执行。我不确定我哪里出了问题。

  • 问题内容: 让 假设我要对列表中每个列表的索引元素求和,例如在矩阵列中添加数字以获得单个列表。我假设数据中的所有列表的长度均相等。 如何遍历列表列表而不会出现索引超出范围错误?也许lambda?谢谢! 问题答案: 您可以尝试以下方法: 这里使用的组合和解压的列表,然后根据自己的索引压缩的项目。然后,您可以使用列表推导来遍历相似索引的组,对其进行求和并返回其“原始”位置。 为了更清楚一点,下面是迭代

  • 问题内容: 该方法返回的表示形式。这里返回的对象是数组支持的,但不是对象。 我正在寻找对象返回值与对象之间的差异- 一种快速的来源,可以告诉它们而无需深入研究代码。 TIA。 问题答案: 当您调用Arrays.asList时,它不会返回。它返回一个由原始源数组支持的固定大小列表。换句话说,它是使用Java的基于集合的API公开的数组的视图。 您不能向其中添加元素,也不能从中删除元素。如果您尝试从中