多元线性回归-python实现的3种方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | import numpy as np import statsmodels.api as sm from gekko import GEKKO # Data x0 = np.array([ 4 , 5 , 2 , 3 , - 1 , 1 , 6 , 7 ]) x1 = np.array([ 3 , 2 , 3 , 4 , 3 , 5 , 2 , 6 ]) y = np.array([ 0.3 , 0.8 , - 0.05 , 0.1 , - 0.8 , - 0.5 , 0.5 , 0.65 ]) # calculate R^2 def rsq(y1,y2): yresid = y1 - y2 SSresid = np. sum (yresid * * 2 ) SStotal = len (y1) * np.var(y1) r2 = 1 - SSresid / SStotal return r2 # Method 1: numpy linalg solution # Y = X a # X^T Y = X^T X a X = np.vstack((x0,x1,np.ones( len (x0)))).T a = np.linalg.lstsq(X,y)[ 0 ]; print (a) yfit = a[ 0 ] * x0 + a[ 1 ] * x1 + a[ 2 ] print ( 'R^2 = ' + str (rsq(y,yfit))) # Method 2: statsmodels ordinary least squares model = sm.OLS(y,X).fit() predictions = model.predict(X) print (model.summary()) # Method 3: gekko m = GEKKO(remote = False ); m.options.IMODE = 2 c = m.Array(m.FV, 3 ) for ci in c: ci.STATUS = 1 xd = m.Array(m.Param, 2 ); xd[ 0 ].value = x0; xd[ 1 ].value = x1 yd = m.Param(y); yp = m.Var() s = m. sum ([c[i] * xd[i] for i in range ( 2 )]) m.Equation(yp = = s + c[ - 1 ]) m.Minimize((yd - yp) * * 2 ) m.solve(disp = False ) a = [c[i].value[ 0 ] for i in range ( 3 )] print (a) # plot data from mpl_toolkits import mplot3d from matplotlib import cm import matplotlib.pyplot as plt fig = plt.figure() ax = plt.axes(projection = '3d' ) ax.plot3D(x0,x1,y, 'ko' ) x0t = np.arange( - 1 , 7 , 0.25 ) x1t = np.arange( 2 , 6 , 0.25 ) X0,X1 = np.meshgrid(x0t,x1t) Yt = a[ 0 ] * X0 + a[ 1 ] * X1 + a[ 2 ] ax.plot_surface(X0,X1,Yt,cmap = cm.coolwarm,alpha = 0.5 ) plt.show() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人