解析法实现一元线性回归、多元线性回归以及数据模型可视化操作

目录

  • 【1】解析法实现一元线性回归
    • python列表实现
    • 利用Numpy实现
    • 利用TensorFlow实现
    • 数据和模型可视化
  • 【2】解析法实现多元线性回归
    • 利用Numpy实现
      • 需要用到的NumPy数组运算函数
    • 数据和模型可视化
      • 绘制空间点集:
      • 绘制空间平面图:
      • 绘制线框图并且与散点图对比:

【1】解析法实现一元线性回归

公式:
在这里插入图片描述
代码:

python列表实现

#加载样本数据
x=[137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21]
y=[145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30]
meanX=sum(x)/len(x)
meanY=sum(y)/len(y)
sumXY=0.0
sumX=0.0
for i in range(len(x)):sumXY+=(x[i]-meanX)*(y[i]-meanY)sumX+=(x[i]-meanX)*(x[i]-meanX)
w=sumXY/sumX
b=meanY-w*meanX
print("w=",w)
print("b=",b)
x_test=[128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00]
print("面积\t估计房价")
for i in range(len(x_test)):print(x_test[i],"\t",round(w*x_test[i]+b,2))

结果:
在这里插入图片描述

利用Numpy实现

import numpy as np
x=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
meanX=np.mean(x)
meanY=np.mean(y)
sumXY=np.sum((x-meanX)*(y-meanY))
sumX=np.sum((x-meanX)*(x-meanX))
w=sumXY/sumX
b=meanY-w*meanX
print("w=",w)
print("b=",b)
x_test=np.array([128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00])
y_pred = w*x_test+b
print("面积\t估计房价")
for i in range(y_pred.size):print(x_test[i],"\t",np.round(y_pred[i],2))

利用TensorFlow实现

import tensorflow as tf
x=tf.constant([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
y=tf.constant([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
meanX=tf.reduce_mean(x)
meanY=tf.reduce_mean(y)
sumXY=tf.reduce_sum((x-meanX)*(y-meanY))
sumX=tf.reduce_sum((x-meanX)*(x-meanX))
w=sumXY/sumX
b=meanY-w*meanX
print("w=",w)
print("b=",b)
x_test=tf.constant([128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00])
y_pred = w*x_test+b
print(y_pred)

数据和模型可视化

#解析法实现一元线性回归 
# #Realization of one variable linear regression by analytic method
#导入库
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt 
#设置字体
plt.rcParams['font.sans-serif'] =['SimHei']
#加载样本数据
x=tf.constant([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
y=tf.constant([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#学习模型-计算w,b
meanX=tf.reduce_mean(x)
meanY=tf.reduce_mean(y)
sumXY=tf.reduce_sum((x-meanX)*(y-meanY))
sumX=tf.reduce_sum((x-meanX)*(x-meanX))
w=sumXY/sumX
b=meanY-w*meanX
print("权值w=",w.numpy())
print("偏置b=",b.numpy())
print("线性模型:y=",w.numpy(),"*x+",b.numpy())
#预测房价
x_test=np.array([128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00])
y_pred = (w*x_test+b).numpy()#将张量类型转化为numpy数组类型
print("面积\t估计房价")
n=len(x_test)
for i in range(n):print(x_test[i],"\t",round(y_pred[i],2))
#模型和数据可视化
plt.figure()
#绘制散点图
#张量和数组都可以作为散点函数的输入提供点坐标
plt.scatter(x,y,color="red",label="销售记录")
plt.scatter(x_test,y_pred,color="blue",label="预测房价")
plt.plot(x_test,y_pred,color="green",label="拟合直线",linewidth=2)
#设置坐标轴的标签文字和字号
plt.xlabel("面积(平方米)",fontsize=14)
plt.xlabel("价格(万元)",fontsize=14)
#设置坐标轴的范围
plt.xlim((40,150))
plt.ylim((40,150))
#设置标题文字和字号
plt.suptitle("商品房销售价格评估系统v1.0",fontsize=20)
#在左上方显示图例
plt.legend(loc="upper left")
#显示整个绘图
plt.show()

结果:

【2】解析法实现多元线性回归

利用Numpy实现

需要用到的NumPy数组运算函数

功能函数
数组堆叠np.stack( )
改变数组形状np.reshape( )
矩阵相乘np.matmul( )
矩阵转置np.transpose( )
矩阵求逆np.linalg.inv( )

公式:
在这里插入图片描述

代码:

#解析法实现多元线性回归
#Realization of multiple linear regression by analytic method
#导入库
import numpy as np
#=======================【1】加载样本数据===============================================
x1=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
x2=np.array([3,2,2,3,1,2,3,2,2,3,1,1,1,1,2,2])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#=======================【2】数据处理===============================================
x0=np.ones(len(x1))
#堆叠属性数组,构造属性矩阵
#从(16,)到(16,3),因为新出现的轴是第二个轴所以axis为1
X=np.stack((x0,x1,x2),axis=1)
print(X)
#得到形状为一列的数组
Y=np.array(y).reshape(-1,1)
print(Y)
#=======================【3】求解模型参数===============================================
Xt=np.transpose(X)                      #计算X'
XtX_1=np.linalg.inv(np.matmul(Xt,X))    #计算(X'X)-1
XtX_1_Xt=np.matmul(XtX_1,Xt)            #计算(X'X)-1X'
W=np.matmul(XtX_1_Xt,Y)                 #W=((X'X)-1)X'Y
print(W)
W=W.reshape(-1)
print(W)
print("多元线性回归方程")
print("Y=",W[1],"*x1+",W[2],"*x2+",W[0])
#=======================【4】预测房价===============================================
print("请输入房屋面积和房间数,预测房屋销售价格")
x1_test=float(input("商品房面积:"))
x2_test=int(input("房间数:"))
y_pred=W[1]*x1_test+W[2]*x2_test+W[0]
print("预测价格:",round(y_pred,2),"万元")

效果:

数据和模型可视化

绘制空间点集:

#解析法实现多元线性回归
#Realization of multiple linear regression by analytic method
#导入库与模块
import numpy as np
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D
#=======================【1】加载样本数据===============================================
x1=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
x2=np.array([3,2,2,3,1,2,3,2,2,3,1,1,1,1,2,2])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#=======================【2】数据处理===============================================
x0=np.ones(len(x1))
#堆叠属性数组,构造属性矩阵
#从(16,)到(16,3),因为新出现的轴是第二个轴所以axis为1
X=np.stack((x0,x1,x2),axis=1)
print(X)
#得到形状为一列的数组
Y=np.array(y).reshape(-1,1)
print(Y)
#=======================【3】求解模型参数===============================================
Xt=np.transpose(X)                      #计算X'
XtX_1=np.linalg.inv(np.matmul(Xt,X))    #计算(X'X)-1
XtX_1_Xt=np.matmul(XtX_1,Xt)            #计算(X'X)-1X'
W=np.matmul(XtX_1_Xt,Y)                 #W=((X'X)-1)X'Y
print(W)
W=W.reshape(-1)
print(W)
print("多元线性回归方程")
print("Y=",W[1],"*x1+",W[2],"*x2+",W[0])
#模型和数据可视化
fig=plt.figure(figsize=(8,6))
#创建3D绘图对象
ax3d=Axes3D(fig)
#用来改变视角的函数
#elev:视角的水平高度  水平旋转的角度 
#ax3d.view_init(elev=0,azim=-90)
#绘制散点图
#张量和数组都可以作为散点函数的输入提供点坐标
ax3d.scatter(x1,x2,y,color="b",marker="*")
ax3d.set_xlabel('Area',color='r',fontsize=16)
ax3d.set_ylabel('Room',color='r',fontsize=16)
ax3d.set_zlabel('Price',color='r',fontsize=16)
#设置y轴坐标值刻度
ax3d.set_yticks([1,2,3])
ax3d.set_zlim3d(30,160)
plt.show()
ax3d.view_init(elev=0,azim=-90)
ax3d.view_init(elev=0,azim=0)

绘制空间平面图:

#解析法实现多元线性回归
#Realization of multiple linear regression by analytic method
#导入库与模块
import numpy as np
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D
#=======================【1】加载样本数据===============================================
x1=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
x2=np.array([3,2,2,3,1,2,3,2,2,3,1,1,1,1,2,2])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#=======================【2】数据处理===============================================
x0=np.ones(len(x1))
#堆叠属性数组,构造属性矩阵
#从(16,)到(16,3),因为新出现的轴是第二个轴所以axis为1
X=np.stack((x0,x1,x2),axis=1)
print(X)
#得到形状为一列的数组
Y=np.array(y).reshape(-1,1)
print(Y)
#=======================【3】求解模型参数===============================================
Xt=np.transpose(X)                      #计算X'
XtX_1=np.linalg.inv(np.matmul(Xt,X))    #计算(X'X)-1
XtX_1_Xt=np.matmul(XtX_1,Xt)            #计算(X'X)-1X'
W=np.matmul(XtX_1_Xt,Y)                 #W=((X'X)-1)X'Y
print(W)
W=W.reshape(-1)
print(W)
print("多元线性回归方程")
print("Y=",W[1],"*x1+",W[2],"*x2+",W[0])
#模型和数据可视化
X1,X2=np.meshgrid(x1,x2)
#平面方程
Y_PRED=W[0]+W[1]*X1+W[2]*X2
#创建3D绘图对象
fig=plt.figure()
ax3d=Axes3D(fig)
#绘制空间平面图
ax3d.plot_surface(X1,X2,Y_PRED,cmap="coolwarm")
ax3d.set_xlabel('Area',color='r',fontsize=14)
ax3d.set_ylabel('Room',color='r',fontsize=14)
ax3d.set_zlabel('Price',color='r',fontsize=14)
ax3d.set_yticks([1,2,3])
plt.show()

在这里插入图片描述

绘制线框图并且与散点图对比:

#解析法实现多元线性回归
#Realization of multiple linear regression by analytic method
#导入库与模块
import numpy as np
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D
#=======================【1】加载样本数据===============================================
x1=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
x2=np.array([3,2,2,3,1,2,3,2,2,3,1,1,1,1,2,2])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#=======================【2】数据处理===============================================
x0=np.ones(len(x1))
#堆叠属性数组,构造属性矩阵
#从(16,)到(16,3),因为新出现的轴是第二个轴所以axis为1
X=np.stack((x0,x1,x2),axis=1)
print(X)
#得到形状为一列的数组
Y=np.array(y).reshape(-1,1)
print(Y)
#=======================【3】求解模型参数===============================================
Xt=np.transpose(X)                      #计算X'
XtX_1=np.linalg.inv(np.matmul(Xt,X))    #计算(X'X)-1
XtX_1_Xt=np.matmul(XtX_1,Xt)            #计算(X'X)-1X'
W=np.matmul(XtX_1_Xt,Y)                 #W=((X'X)-1)X'Y
print(W)
W=W.reshape(-1)
print(W)
print("多元线性回归方程")
print("Y=",W[1],"*x1+",W[2],"*x2+",W[0])
y_pred=W[0]+W[1]*x1+W[2]*x2
#设置字体
plt.rcParams['font.sans-serif'] =['SimHei']
#模型和数据可视化
X1,X2=np.meshgrid(x1,x2)
#平面方程
Y_PRED=W[0]+W[1]*X1+W[2]*X2
#创建3D绘图对象
fig=plt.figure()
ax3d=Axes3D(fig)
#绘制散点图与线框图
ax3d.scatter(x1,x2,y,color='b',marker="*",label="销售记录")
ax3d.scatter(x1,x2,y_pred,color='r',label="预测房价")
ax3d.plot_wireframe(X1,X2,Y_PRED,color='c',linewidth=0.5,label="拟合平面")ax3d.set_xlabel('Area',color='r',fontsize=14)
ax3d.set_ylabel('Room',color='r',fontsize=14)
ax3d.set_zlabel('Price',color='r',fontsize=14)
ax3d.set_yticks([1,2,3])
plt.suptitle("商品房销售回归模型",fontsize=20)
plt.legend(loc="upper left")
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

带有示例的Python File readlines()方法

文件readlines()方法 (File readlines() Method) readlines() method is an inbuilt method in Python, it is used to get all lines from the file, the method is called with this object (current file stream/IO object) and returns all available lines in the file, w…

32位系统win2008+mssql2008 6G内存折腾纪实

十年没搞硬件了,现在计算机发展到大硬盘大内存的时代了。一直都少搞服务器配置、运营,以前弄服务器都是普通的PC来当服务器。公司原来的一个业务系统用的是mssql2000好几年了,由于业务数据越积压越多最大的一张表已经有7000多万条记录了&…

case使用 上下篇

上篇 Case具有两种格式。简单Case函数和Case搜索函数。 --简单Case函数 CASE sexWHEN 1 THEN 男WHEN 2 THEN 女 ELSE 其他 END --Case搜索函数 CASE WHEN sex 1 THEN 男WHEN sex 2 THEN 女 ELSE 其他 END这两种方式,可以实现相同的功能。简单Case函数的写法相对比…

第三章 字符串

第三章 字符串% 字符串是不可变的,所有的元素赋值和切片赋值都是非法的 Python提供了多种字符串格式设置方法 yanyu "hello, %s I like %s age is %s" beyond ("beyond","band",23) yanyu % beyond#结果为:hello, bey…

【视觉项目】【day5】8.25号实验记录(修完BUG,28张测试图,13个样本,四张测试图误判,这比之前效果好很多了)

目录修改完BUG后的程序以及效果优化思路,增强正确识别率(待验证)修改完BUG后的程序以及效果 修改代码后的测试结果:(利用连通域面积将明显比本张测试图的瓶子要小的模板提前去除,减少误判) 这样下来,28张测…

linux kernel and user space通信机制,Linux内核空间与用户空间通信机制地研究.doc

实用文案标准文档Linux内核空间与用户空间通信机制的研究Linux kernel space and user space communication mechanism摘 要Linux 是一个源码开放的操作系统,无论是普通用户还是企业用户都可以编写自己的内核代码,再加上对标准内核的裁剪从而制作出适合自…

前台用js、jquery出现错误很多是由于IE缓存

例如:当你用jquery进行异步请求数据时,如果浏览器发现请求的地址不变,或者参数也不改变的情况下 IE默认是取原来的缓存中的数据,而不进行重新请求数 解决的方法是是在地址栏的后面加上一个随机参数值,IE发现地址改变&a…

python 示例_带有示例的Python date timetuple()方法

python 示例Python date.timetuple()方法 (Python date.timetuple() Method) date.timetuple() method is used to manipulate objects of date class of module datetime. date.timetuple()方法用于操作模块datetime的日期类的对象。 It is an instance method which means …

WebC.BBS 项目参与新人必读

开发环境: 采用Visual Studio 2010,MVC版本采用Asp.Net MVC3,数据库采用Sql2005 2008,扩展技术包括jQuery。 SVN的相关信息: SVN-Url:svn://svn.cyqdata.com/project_bbs 账户申请:请将自己的密码发给组长,…

第四章 字典

第四章 字典{键:值,名字:电话号码} 映射:通过名称来访问其各个值的数据结构 列表:将一系列值组合成数据结构并通过编号来访问各个值 字典是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下 键可能是数、字符串…

利用梯度下降法求解一元线性回归和多元线性回归

文章目录原理以及公式【1】一元线性回归问题【2】多元线性回归问题【3】学习率【4】流程分析(一元线性回归)【5】流程分析(多元线性回归)归一化原理以及每种归一化适用的场合一元线性回归代码以及可视化结果多元线性回归代码以及可…

linux x64 asm 参数传递,NASM汇编学习系列(1)——系统调用和参数传递

0. 说明本学习系列代码几乎完全摘自:asmtutor.com,如果英文可以的(也可以用谷歌浏览器翻译看),可以直接看asmtutor.com上的教程系统环境搭建:(我用的是ubuntu18.04.4 server,安装gcc、g)sudo apt install nasmsudo apt…

Javascript之创建对象(原型模式)

我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,它的用途是包含可以有特定类型的所有实例共享的属性和方法。 prototype就是通过构造函数而创建的那个对象的原型对象。使用原型的好处就是可以让所有对象实例…

treeset java_Java TreeSet pollLast()方法与示例

treeset javaTreeSet类pollLast()方法 (TreeSet Class pollLast() method) pollLast() method is available in java.util package. pollLast()方法在java.util包中可用。 pollLast() method is used to return the last highest element and then remove the element from thi…

第五章 条件、循环及其他语句

第五章 条件、循环及其他语句 再谈print和import print现在实际上是一个函数 1,打印多个参数 用逗号分隔,打印多个表达式 sep自定义分隔符,默认空格 end自定义结束字符串,默认换行 print("beyond",yanyu,23)#结果为…

两种方法将Android NDK samples中hello-neon改成C++

一、第一种方法:1.修改helloneon.c 中代码 a.将 char* str; 改为 char str[512] {0}; b.将 asprintf(&str, "FIR Filter benchmark:\nC version : %g ms\n", time_c); 改为 sprintf(str, "FIR Filter benchmark:\nC ve…

【视觉项目】【day6】8.26关于matchTemplate()以及NCC的思考整理

NCC与matchTemplate()函数中match_method TM_CCOEFF_NORMED是否一样? 先看公式: TM_CCOEFF_NORMED NCCTM_CCOEFF_NORMED:归一化的相关性系数匹配方法 NCC:normalized cross correlation:归一化互相关系数 公式是一样的。 参考: 模板匹配的几…

linux待机流程,Linux睡眠喚醒機制--Kernel態

一、對於休眠(suspend)的簡單介紹 在Linux中,休眠主要分三個主要的步驟: 1) 凍結用戶態進程和內核態任務2) 調用注冊的設備的suspend的回調函數, 順序是按照注冊順序3) 休眠核心設備和使CPU進入休眠態, 凍結進程是內核把進程列表中所有的進程的狀態都設置為停止,並且保存下…

strictmath_Java StrictMath log1p()方法与示例

strictmathStrictMath类log1p()方法 (StrictMath Class log1p() method) log1p() method is available in java.lang package. log1p()方法在java.lang包中可用。 log1p() method is used to return (the logarithm of the sum of the given argument and 1 like log(1d) in th…

第六章 抽象

第六章 抽象 自定义函数 要判断某个对象是否可调用,可使用内置函数callable import math x 1 y math.sqrt callable(x)#结果为:False callable(y)#结果为:True使用def(表示定义函数)语句,来定义函数 …