机器学习——多元线性回归模型
本文主要探讨多元线性回归模型,假设函数,损失函数,梯度下降的实现以及预测,先来看一下原数据长什么样?
- 原数据
ex1data2.txt有三列数据,第1列是自变量面积(x1),第2列是自变量卧室数(x2),第3列为因变量价格(y),维度是47*3,(如果你需要数据可以去三行科创微信公众号交流群要)首先,我们要对数据进行初探式的探索。
- 探索性分析
绘制出所有变量的热力图,观察各变量之间的相关性
data_normalized = (data - data.mean())/(data.std()) #规范化处理
cor_matrix = data_normalized.corr() #相关性矩阵
fig = plt.figure(figsize = (6,4)) #新建画布
ax = fig.add_subplot(111)
ax = sns.heatmap(cor_matrix, cmap = plt.cm.Blues, linewidths=0.5, vmax=1, vmin=0 ,annot=True, annot_kws={'size':8,'weight':'bold'}) #热力图
从热力图可以看到面积和价格都非常高的相关性,卧室数也与价格有一定相关性,因此,可以提出如下假设
hθ(x1,x2)=θ0+θ1x1+θ2x2h_{\theta}(x_1,x_2) = \theta_0+\theta_1x_1+\theta_2x_2hθ(x1,x2)=θ0+θ1x1+θ2x2
其中 θi(1≤i≤3)\theta_i (1\leq i \leq 3)θi(1≤i≤3)为待定的参数
- 数据预处理
为了建立模型,我们先将自变量和因变量分离变换并且进行规范化处理
x = np.array(data_normalized[['area','bedroom']]).reshape(m,2) #自变量
X = np.insert(x, 0,1 ,axis =1) #增加常数列
y = np.array(data_normalized ['price']).reshape(m, 1) #因变量
- 假设函数,损失函数,梯度下降及可视化实现
有了数据之后需要给出假设函数,损失函数,以及梯度下降实现方法,最好能够把损失函数下降过程可视化
alpha = 0.01 #学习率
max_iteration = 2000 #最大迭代次数def h(theta, X): #定义假设函数return np.dot(X, theta)def costFunction(mytheta, X, y): #定义损失函数return float(1./(2*m)*np.dot((h(mytheta, X)-y).T, (h(mytheta, X)-y)))def gradientDescent(X, start_theta = np.zeros(X.shape[1])): #定义梯度下降函数theta = start_thetathetahistory = [] #用来存放theta值costhistory = [] #用来存放损失值for iter in range(max_iteration):tmptheta = thetacosthistory.append(costFunction(theta, X,y))thetahistory.append(list(theta[:,0]))for j in range(len(tmptheta)):tmptheta[j] = theta[j] - (alpha/m)*np.sum((h(theta, X)-y)*np.array(X[:,j]).reshape(m, 1))theta = tmpthetareturn theta, thetahistory, costhistoryinitial_theta = np.zeros((X.shape[1], 1)) #初始化theta值theta, thetahistory, costhistory = gradientDescent(X, initial_theta)def plotConvengence(costhistory): #定义绘制损失函数曲线plt.figure(figsize = (6,4))plt.plot(range(len(costhistory)), costhistory)plt.title("Convengence of cost function")plt.xlabel("Iteration")plt.ylabel("Cost function")
plotConvengence(costhistory)
- 预测
这样一来,我们就求出最佳的参数θ\thetaθ和假设方程,为了验证模型的准确性,来预测以面积为1650,卧室数为3的价格是多少?由于之前对数据进行了规范化,所以这个时候又需要还原回去计算出价格。
print("the best fitting function is: y = %0.4f+%0.4f*x_1+(%0.4f*x_2)"%(theta[0], theta[1],theta[2]))print("if the areas are 1650 and bedrooms are 3, what's the price?")area_normalized = (1650-data.mean()[0])/data.std()[0] #面积规范化
bedroom_normalized = (3-data.mean()[1])/data.std()[1] #卧室数规范化
price_mean = data.mean()[2] #规范化时的价格的均值
price_std = data.std()[2] #规范化时的价格的标准差
print("$%0.2f"%float((theta[0] + theta[1]*area_normalized + theta[2]*bedroom_normalized)* price_std + price_mean))
正常输入结果是 $293083.69.
延伸阅读
机器学习——单变量线性回归模型
机器学习——多元线性回归模型相关推荐
- python多元线性回归实例_Python机器学习多元线性回归模型 | kTWO-个人博客
前言 在上一篇文章<机器学习简单线性回归模型>中我们讲解分析了Python机器学习中单输入的线性回归模型,但是在实际生活中,我们遇到的问题都是多个条件决定的问题,在机器学习中我们称之为多元 ...
- 吴恩达-机器学习-多元线性回归模型代码
吴恩达<机器学习>2022版 第一节第二周 多元线性回归 房价预测简单实现 以下以下共两个实验,都是通过调用sklearn函数,分别实现了 一元线性回归和多元线性回归的房价 ...
- 机器学习(多元线性回归模型逻辑回归)
多元线性回归 定义:回归分析中,含有两个或者两个以上自变量,称为多元回归,若自变量系数为1,则此回归为多元线性回归. (特殊的:自变量个数为1个,为一元线性回归)多元线性回归模型如下所示: 如上图所示 ...
- 机器学习10—多元线性回归模型
多元线性回归模型statsmodelsols 前言 什么是多元线性回归分析预测法 一.多元线性回归 二.多元线性回归模型求解 2.1最小二乘法实现参数估计-估计自变量X的系数 2.2决定系数:R² 与 ...
- Python 实战多元线性回归模型,附带原理+代码
作者 | 萝卜 来源 | 早起Python( ID:zaoqi-python ) 「多元线性回归模型」非常常见,是大多数人入门机器学习的第一个案例,尽管如此,里面还是有许多值得学习和注意的地方.其中多 ...
- python多元线性回归模型案例_Python 实战多元线性回归模型,附带原理+代码
原标题:Python 实战多元线性回归模型,附带原理+代码 作者 | 萝卜 来源 | 早起Python( ID:zaoqi-python ) 「多元线性回归模型」非常常见,是大多数人入门机器学习的第一 ...
- 机器学习多元线性回归_过度简化的机器学习(1):多元回归
机器学习多元线性回归 The term machine learning may sound provocative. Machines do not learn like humans do. Ho ...
- 原理 + 代码 | Python 实现多元线性回归模型 (建模 + 优化,附源数据)
前言 多元线性回归模型非常常见,是大多数人入门机器学习的第一个案例,尽管如此,里面还是有许多值得学习和注意的地方.其中多元共线性这个问题将贯穿所有的机器学习模型,所以本文会将原理知识穿插于代码段中,争 ...
- 【项目实战】Python实现多元线性回归模型(statsmodels OLS算法)项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 回归问题是一类预测连续值的问题,而能满足这样要求的数学模型称作回 ...
- numpy多元线性回归_Python 实战多元线性回归模型,附带原理+代码
作者 | 萝卜来源 | 早起Python( ID:zaoqi-python ) 「多元线性回归模型」非常常见,是大多数人入门机器学习的第一个案例,尽管如此,里面还是有许多值得学习和注意的地方.其中多元 ...
最新文章
- SVN删除服务器端项目文件
- 自定义JSP中的Taglib标签之四自定义标签中的Function函数
- delphi Oracle导出多个表,Oracle数据库自动备份工具(Delphi源码)
- linux dump_stack
- Redis的几种拓展方案,你都清楚吗?
- [FFmpeg] ffplay 播放灰度帧
- 关于web开发的一点理解
- appium工作原理及启动方式
- mysql order优化2019_mysql 增加排序 性能差很多 怎么优化
- plc比c语言还难,plc编程好学吗??
- LTE 注网流程log分析
- Mac:小米手机刷机
- 微信小程序快捷键和windows快捷键
- IndexedBD的一些心得(总结)
- android - DeviceOwner: Trying to set device owner but device is already provisioned
- DITHER 抖动算法
- 汇编INT中断和I/O指令【获取主板时钟】
- redis的安装教程(单机、win10)
- AD切换2D,3D,旋转模型
- 微信红包封面免费送!!!