用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的例子
你好:
上面的程序,请看如下代码:
# -*- 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))
输出:
注意事项:
- 如何进行不定个数的输入?
- 通过getlist函数将输入进行转换 字符→浮点。
- 通过numpy的mean函数求取平均数。
- 如何进行列表之间的运算?
- print()对类型有要求!
- 好好写注释!
以上是关于用python写一个小程序,输入坐标求线性回归的主要内容,如果未能解决你的问题,请参考以下文章