Python中的线性回归

时间:2015-04-30 16:56:51

标签: python iteration regression linear-regression linear

我是编程的新手,我正在参加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中进行线性回归。

2 个答案:

答案 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。此外,两个变量ab的乘法只能通过在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.

希望这有帮助!