我正在尝试对我拥有的一些数据进行多项式回归。我已成功致电
m, b = np.polyfit(x.values.flatten(), y.values.flatten(), 1)
然而,当我将度数增加到高于1的任何值时,我得到以下错误:
np.polyfit(x.values.flatten(), y.values.flatten(), 2)
ValueError: too many values to unpack
我正在阅读数据:
x = pandas.read_csv('D3.csv', usecols = [0])
y = pandas.read_csv('D3.csv', usecols = [3])
知道为什么会这样吗?
答案 0 :(得分:3)
在通过documentation触及您的问题之前,np.polyfit
仅返回2个参数:
现在,仅当您使用两个可选参数np.polyfit
调用full = False and cov=True
时,才会显示第二个参数。
回到你的问题:由于你没有设置cov = True
(默认为full=False
),你的函数只返回一个数组。将度数设置为1时,返回的数组有两个元素([a,c]
中为ax + c
),python会自动在代码中分配m = a
和b = c
。当达到更高的程度时,返回的数组有两个以上的元素,python尝试将它们分配给你在赋值之前放入的所有变量,但是因为有超过2个,你需要超过2个变量。
即考虑python 2中的这个小运行:
>>> a,c = [1,2]
>>> a
1
>>> c
2
>>> a,c = [1,2,3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
现在,正确的方法是设置一个返回值。例如:
import pandas
import numpy as np
import sys
deg = int(sys.argv[1])
x = pandas.read_csv('test.csv',usecols=[0])
y = pandas.read_csv('test.csv',usecols=[1])
m = np.polyfit(x.values.flatten(), y.values.flatten(), deg)
print m
假设代码在文件stackoverflow.py
中。示例电话:
Chip chip@ 09:15:48@ ~: python stackoverflow.py 1
[ 8. -12.]
Chip chip@ 09:15:51@ ~: python stackoverflow.py 2
[ 1.00000000e+00 -1.45528372e-14 3.11727844e-14]
Chip chip@ 09:15:56@ ~: python stackoverflow.py 3
[ -3.16472437e-16 1.00000000e+00 -2.82243562e-14 4.43123853e-14]
换句话说,所有系数都打包成一个数组并返回。
答案 1 :(得分:0)
如果我们按如下方式测试:
import numpy as np
x = [1,2,3,4,5,6,7,8,9,10]
y = [2,4,5,7,8,9,8,7,2,1]
pf = np.polyfit(x,y,1)
print (pf)
pf = np.polyfit(x,y,2)
print (pf)
pf = np.polyfit(x,y,3)
print (pf)
......我们得到:
[-0.05454545 5.6 ]
[-0.35984848 3.90378788 -2.31666667]
[-0.02466977 0.0472028 2.02641803 -0.2 ]
...因此,在第一种情况下只有两个项目要解包,而在其他情况下则更多。