解析法实现一元线性回归、多元线性回归以及数据模型可视化操作
目录
- 【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()
解析法实现一元线性回归、多元线性回归以及数据模型可视化操作相关推荐
- 多重线性回归 多元线性回归_了解多元线性回归
多重线性回归 多元线性回归 Video Link 影片连结 We have taken a look at Simple Linear Regression in Episode 4.1 where ...
- 线性回归-多元线性回归
线性回归-多元线性回归 上次讲到简单线性回归,本文主要讲下如何处理多元线性回归,多元线性回归中如何检查多重共线性,以及如何进行feature selection. 多元线性回归,故名思意,用多个变量来 ...
- 多元线性回归数据集_TensorFlow学习Program1——13.实现一元、多元线性回归(基于房价数据集)...
本节将针对波士顿房价数据集的房间数量(RM)采用简单一元线性回归,目标是预测在最后一列(MEDV)给出的房价.波士顿房价数据集可从http://lib.stat.cmu.edu/datasets/bo ...
- 机器学习入门 ————》 一元及多元线性回归
1.线性回归(line Regression) 回归,指研究一组随机变量(Y1 ,Y2 ,-,Yi)和另一组(X1,X2,-,Xk)变量之间关系的统计分析方法,又称多重回归分析.通常Y1,Y2,-,Y ...
- 线性回归 - 多元线性回归案例 - 分析步骤、输出结果详解、与Python的结果对比 -(SPSS建模)
现在用 Python 写线性回归的博客都快烂大街了,为什么还要用 SPSS 做线性回归呢?这就来说说 SPSS 存在的原因吧. SPSS 是一个很强大的软件,不用编程,不用调参,点巴两下就出结果了,而 ...
- Python实现一元及多元线性回归
Python实现线性回归 实现目标 实验数据 结果分析 数据集1下的回归分析 数据集2下的回归分析 源代码 实现目标 1.实现一元(或多元)线性回归 a. 根据对客观现象的定性认识初步判断现象之间的相 ...
- 一元线性回归多元线性回归
- 线性回归(一元、多元)
目录 一元线性回归 多元线性回归 一元线性回归 在一元线性回归中,输入只有一个特征.现有输入特征为 x,需要预测的目标特征为y ,一元线性回归模型为 y=w1x+w0y=w_1x+w_0y=w1x+ ...
- 机器学习:回归分析—— 一元线性回归、多元线性回归的简单实现
回归分析 回归分析概述 基本概念 可以解决的问题 基本步骤和分类 线性回归 一元线性回归 多元线性回归 回归分析概述 基本概念 回归分析是处理多变量间相关关系的一种数学方法.相关关系不同于函数关系,后 ...
最新文章
- 08Factory Method(工厂方法)模式
- Android进程保活方案
- Uber 开源 Piranha,可自动删除过时代码
- PHP自动判断用户会员过期,php,_定时扣除用户过期积分,但平台用户量比较大,有没有好的解决方法?,php - phpStudy...
- 暑假集训中期测试 Problem D: 装箱问题2 (并查集)
- linux任务处理函数,Linux信号掩码和信号处理函数
- 盗版资源变少?这个比人还“眼尖”的 NLP 模型立下汗马功劳
- 2020-11-25 阿里云CentOS linux源配置脚本 https://mirrors.aliyun.com/repo/
- Fedora 29 rpmbuild 打包openssl 1.1.1a版本
- Java排序算法——归并排序
- http | 状态码
- Codeforces 2A. Winner
- 深入浅出MFC第一章笔记
- 长江大学计算机网络期末考试试题及答案,长江大学计算机基础考试试题
- excel两个表格数据对比_常简单又实用的Excel数据对比技巧
- Azure Tools---CAT(一)
- mysql 体重 类型 身高_用身高和体重数据进行分类实验
- 又猎一“狐”:一名外逃越南嫌疑人落网啦
- 代码补全快餐教程(1) - 30行代码见证奇迹
- 如何在 Ubuntu 中加密硬盘