[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()对类型有要求!
- 好好写注释!
相关推荐
rainchxy 2020-06-16
playoffs 2020-04-22
机器学习之家 2020-11-10
lgblove 2020-10-26
Pokemogo 2020-10-05
meylovezn 2020-08-25
竭尽全力 2020-07-28
竭尽全力 2020-07-13
wndong 2020-06-14
nurvnurv 2020-06-08
Hannah 2020-05-28
sayhaha 2020-05-26
playoffs 2020-05-01
HMHYY 2020-04-30
CYJ0go 2020-04-26
playoffs 2020-04-24
troysps 2020-04-22