用python写一个小程序,输入坐标求线性回归

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用python写一个小程序,输入坐标求线性回归相关的知识,希望对你有一定的参考价值。

用户输入n,然后再输入n个坐标(x,y)

然后用一组数学公式求出b0,b1

1)x的和,y的和,x平方的和,y平方的和,x乘y的和
2)x的平均值,y的平均值,sxx=x平方的和 减去 x的和的平方/n, syy= y平方的和 减去 y和的平方/n, sxy= x乘y的和 减去 x的和乘y的和/n
3) b1 = sxy/sxx
b0 = y的平均值 减 b1乘x的平均值
最后print Y^
下面是一个input和output的例子

参考技术A

你好:

上面的程序,请看如下代码:

# -*- coding: cp936 -*-

end=input("是否结束(y/n):")
while end=="n":
    print "Number of coordinates:2"
    xx=input("x's:")
    yy=input("y's:")

    a=float(list(xx)[0])
    b=float(list(xx)[1])
    c=float(list(yy)[0])
    d=float(list(yy)[1])

    print "第一个点是:("+str(a)+","+str(c)+")"
    print "第一个点是:("+str(b)+","+str(d)+")"

    x0=c-a
    y0=float(d-b)

    print "直线方程为:",
    if x0==0:
        print "x=",a
    else:
        print "y=%r(x-%r)+%r"%(y0/x0,a,c)
    print

追问

这个不行,问的还是我= =

坐标使用户规定输入多少个的

[Python初级应用]线性回归

博主是高中生,前几天学到了初级的线性回归方程。总用卡西欧敲然后带入公式实在有些麻烦。于是心血来潮用Python实现了一下~

原理:求线性回归方程:

  技术图片

求决定系数:

技术图片

代码:

# -*- coding:UTF-8 -*-
import numpy as np
#输入开始
li = list(input("输入xi:").split())
lis = list(input("输入yi: ").split())
lenth = len(li)#项数
def getlist(listname):
    ul=[]
    for a in listname:
        ul.append(float(a))
    return(ul)
#输入结束

#转float开始
ul_xi=getlist(li)
ul_yi=getlist(lis)
#转float结束

xiaver=np.mean(ul_xi)#求xi平均数
yiaver=np.mean(ul_yi)#求yi平均数

#求xiyi开始
func = lambda x,y: x*y
result_xiyi = map(func,ul_xi,ul_yi)
xiyi_list = list(result_xiyi)
ul_xiyi = getlist(xiyi_list)
xiyi_aver = np.mean(ul_xiyi)
xiyi = xiyi_aver*lenth
#求xiyi结束

#求xi2开始
result_xi2 = map(func,ul_xi,ul_xi)
xi2_list = list(result_xi2)
ul_xi2 = getlist(xi2_list)
xi2_aver = np.mean(ul_xi2)
xi2=xi2_aver*lenth
#求xi2结束

#带入公式开始
b=(xiyi - lenth * xiaver * yiaver) / (xi2 - lenth * xiaver*xiaver )
a= yiaver - b * xiaver
#带入公式结束

#计算残差开始
def eicalc(x):
    return(x *b +a)
li_aftr_calc=list(map(eicalc,ul_xi))
func_ei = lambda x,y: x-y
result_ei = list(map(func_ei,ul_yi,li_aftr_calc))#残差所得
#计算残差结束

#计算决定系数开始
#计算残差平方和
def r2calc(x):
    return(x**2)
li_eisquare = list(map(r2calc,result_ei))
eisquare_aver = np.mean(li_eisquare)
eisquare = eisquare_aver * lenth

#计算总偏差平方和
def pianchacalc(x):
    return((x - yiaver)**2)
li_piancha = list(map(pianchacalc,ul_yi))
piancha_aver = np.mean(li_piancha)
piancha = piancha_aver * lenth

#带入公式
R2 = 1 - (eisquare / piancha)
#计算决定系数结束

#输出
print("线性回归方程为: y="+str(b)+"x+"+str(a))
print("残差列表为:")
print(result_ei)
print("决定系数R2为:"+str(R2))

输出:

技术图片

注意事项:

  1. 如何进行不定个数的输入?
  2. 通过getlist函数将输入进行转换 字符→浮点。
  3. 通过numpy的mean函数求取平均数。
  4. 如何进行列表之间的运算?
  5. print()对类型有要求!
  6. 好好写注释!

以上是关于用python写一个小程序,输入坐标求线性回归的主要内容,如果未能解决你的问题,请参考以下文章

[Python初级应用]线性回归

线性回归 python小样例

多元线性回归方程公式

Python 线性回归(Linear Regression) 基本理解

线性回归

最小二乘法求线性回归方程的公式是啥?