多变量线性回归/多项式拟合

若给定了1-9月份数据要预测10-12月份销量数据,可运用多项式拟合进行预测

1.导入模块

import numpy as np

import matplotlib.pyplot as plt

2.导入1-9月份销量的值
xu=np.array([1,2,3,4,5,6,7,8,9])

yu=np.array([1,3,5,7,9,11,14,18,22])                          # np.array([, , , , ,])  ← 使list可计算

3.求拟合系数,并赋值给reg

reg=np.polyfit(xu,yu,2)                                                #np.ployfit(x值,y值,几次方相关)

4.求10-12月份销量的值,ry为拟合系数*Xu(自变量)

ry10=np.polyval(reg,10)

ry11=np.polyval(reg,11)

ry12=np.polyval(reg,12)                                                # np.ployval(拟合系数,自变量值)

5.预测了10-12月份销量数据


一、单变量拟合

1.导入模块

import numpy as np

import matplotlib.pyplot as plt

2.定义xu ,yu

xu= np.arange(10)

def f(x):

    return 0.5*x*x -2.5 * x -10

yu=f(xu)

3.求拟合系数并赋值给reg,并根据多项式系数和自变量,计算拟合结果ry

reg=np.polyfit(xu,yu,2)                              # 拟合出的多项式系数=reg           假定自变量xu的最高次幂为2次方

ry=np.polyval(reg,xu)                                # 根据多项式系数和自变量,计算拟合结果ry=reg * xu 反推 新的y值拟合

4.对数据加以验证

plt.figure(1)                                                                  #创建画板                         

plt.plot(xu,yu,'b-',label='f(x)')                                      #作出原数据图案       b:蓝色     ^:实线

plt.plot(xu,ry,'r.',label='regression')                              #作出拟合数据图案    r:红色      .:点

plt.legend(loc=0)                                                         #添加图例

plt.grid(True)                                                               #显示网格线

plt.xlabel('x')                                                                #x轴标题

plt.ylabel('f(x)')                                                            #y轴标题

plt.show()                                                                    #绘制图形

由图形可知函数原始值yu与拟合结果ry的重合度(相似度)较高

5.确定拟合误差大小并绘图

e = yu - ry                                                                        # 看拟合误差e的大小

plt.figure(2)

plt.plot(xu,e,'b^',label='error')

plt.legend(loc=0)

plt.grid(True)

plt.xlabel('x')

plt.ylabel('e')

plt.show() 

由于e的值是10-14次方,可以看出原始数据经过回归后,拟合值与原始值有较好的拟合

二、多变量拟合

1.导入模块

import numpy as np

import matplotlib.pyplot as plt

import pandas as pd

 (2.定义Z1,Z2 ,Y(从3开始验证多项式拟合))

theta = np.arange(11)

Z1 = np.sin(theta*9/57.3)

Z2 = np.cos(theta*9/57.3)

Z0 = 0.5;

a = 2;

b = 3;

Y = 0.5 + 2 * Z1 + 3 * Z2

3.读取var2.csv数据,并求拟合系数

(唯一要注意的是,构造原始的Z矩阵时,需要在Z矩阵中新增第一列,且第一列对应的每一行的值都设为1,这是多变量线性回归算法的特定需要

以及第一行默认作为标题)

data = pd.read_csv('var2.csv')

x = data.iloc[:,0:3]                      #选取自变量x对应的数据           iloc是左闭右开      0:3对应的是a,z1,z2列                 

y = data.iloc[:,3]                         #选取因变量y对应的数据                                         3对应的是y列

a = x.T                                        # x转置,变成a

b = np.dot(a,x)                            # np.dot(a,x)代表矩阵a 乘以  矩阵x,结果=b

c = np.linalg.inv(b)                      # np.linalg.inv(b)对矩阵b求逆,结果=c

d = np.dot(a,y)                            # np.dot(a,y)矩阵a 乘以  矩阵y,结果=d

beta = np.dot(c,d)                       #  np.dot(c,d)矩阵c 乘以  矩阵d,结果=beta,即多项式拟合系数在beta中

得到beta为[0.5,2,3]与原始值的系数基本一致

4.检验拟合值的准确性和拟合误差

x1 = x.iloc[:,1]                      #取自变量x的第1列数据

x2 = x.iloc[:,2]                      #取自变量x的第2列数据

# 用多项式拟合系数beta * 对应的自变量,试图还原y,拟合结果=y1

y1 = beta[0] + beta[1] * x1  + beta[2] * x2

e = y - y1 #计算拟合误差e

并绘图

n = theta                                                                          # 给坐标轴的横轴赋值n

plt.figure(1)

plt.xlabel("theta/9",labelpad = 10)

plt.ylabel("Y&Y1",labelpad = 10)

plt.grid(b = "Ture")

plt.plot(n,y,'-o',n,y1,'-*')                                                     #原始值y和拟合值y1对比显示

plt.figure(2)

plt.xlabel("theta/9",labelpad = 10)

plt.ylabel("error",labelpad = 10)

plt.grid(b = "Ture")

plt.plot(n,e,'-*')    #显示拟合误差e

y与y1对比
拟合误差

由图可知,拟合值y1与原始值y几乎是重合的。

e的拟合误差几乎为零,说明拟合的精度是很高的。

拟合系数在beta中,其具体数值是:0.500007,2,2.99999,与程序中语句Y = Z0 + a * Z1 + b * Z2对应的系数0.5,2,3极其接近。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容