PythonMaker 2020-05-09
博主是高中生,前几天学到了初级的线性回归方程。总用卡西欧敲然后带入公式实在有些麻烦。于是心血来潮用Python实现了一下~
原理:求线性回归方程:
  ![[Python初级应用]线性回归 [Python初级应用]线性回归](https://cdn.ancii.com/article/image/v1/dg/IM/Ws/sWIgMdQd7iJZ8iV1S-913XTm-tgBbHwI2zoKeNpdX1Fv_pHEIeYclz_jqMHP0OrxgUphNPLukZOa5xp4mubySg.jpg)
求决定系数:
![[Python初级应用]线性回归 [Python初级应用]线性回归](https://cdn.ancii.com/article/image/v1/zK/Kx/5C/C5KKxzd8U_66Iytu1Z8ZD8iKTBsMUCLEx4J_csT-JCgRdlwS1YWAoV6MjiUEFnEN_okuWpw2DiwU2ZGDmg2Zbc5Y1Q_u6kiV5gJQwKDo1OschEKW1PvE5yegROqT55vHkywRYseEYk8E7HHNVnkPcFZwQuG_L3ylP6fgxd3sNPg.jpg)
代码:
# -*- 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))输出:
![[Python初级应用]线性回归 [Python初级应用]线性回归](https://cdn.ancii.com/article/image/v1/sw/wV/kP/PkwwVsGDmjDG9swnOi7SkjVAsMQAarn73E9S3mmSmcBYuZUlUApMBmXZ-iMTGvIORpMih9hDIzZ8P9jZrlkSUw.png)
注意事项: