我是编程的新手,我正在参加python课程。我被要求对我教授给出的数据集进行线性回归。以下是我写的程序(它没有工作)。
from math import *
f=open("data_setshort.csv", "r")
data = f.readlines()
f.close()
xvalues=[]; yvalues=[]
for line in data:
x,y=line.strip().split(",")
x=float(x.strip())
y=float(y.strip())
xvalues.append(x)
yvalues.append(y)
def regression(x,y):
n = len(x)
X = sum(x)
Y = sum(y)
for i in x:
A = sum(i**2)
return A
for i in x:
for j in y:
C = sum(x*y)
return C
return C
D = (X**2)-nA
m = (XY - nC)/D
b = (CX - AY)/D
return m,b
print "xvalues:", xvalues
print "yvalues:", yvalues
regression(xvalues,yvalues)
我收到的错误是:第23行,在回归中,A = sum(i ** 2)。 TypeError:' float'对象不可迭代。
我需要最终为这个数据集(我知道该怎么做)以及回归定义的行创建一个图。但是现在我想在python中进行线性回归。
答案 0 :(得分:1)
您无法对单个浮点数求和,但您可以对列表求和。 E. g。您可能需要A = sum([xi**2 for xi in x])
来计算Sum of each element in x to the power of 2
。您的代码中还有各种return
语句,这些语句确实没有任何意义,可以完全删除,例如: G。循环后return C
。此外,两个变量a
和b
的乘法只能通过在python中使用a*b
来完成。简单地写ab
是不可能的,而是将其视为名为" ab"的单个变量。
更正的代码可能如下所示:
def regression(x,y):
n = len(x)
X = sum(x)
Y = sum(y)
A = sum([xi**2 for xi in x])
C = sum([xi*yi for xi, yi in zip(x,y)])
D = X**2 - n*A
m = (X*Y - n*C) / float(D)
b = (C*X - A*Y) / float(D)
return (m, b)
答案 1 :(得分:0)
你应该输入像A += i**2
这样的东西
您必须从错误消息中了解到您无法迭代浮点数,这意味着如果i=2
您不能迭代它,因为它不是列表,但是如果您需要对所有正方形求和对于x,您在for i in x
中迭代x,然后将i i**2
的方块添加到A A+=i**2
adn然后返回A.
希望这有帮助!