前言

本文主要内容是一元变量下的线性回归问题,给定2000~2013年的房价,预测2014年的房价。文中使用了梯度下降法和最小二乘法两种方法去求解。

一、训练数据

year price
2000 2.0
2001 2.5
2002 2.9
2003 3.147
2004 4.515
2005 4.903
2006 5.365
2007 5.704
2008 6.853
2009 7.971
2010 8.561
2011 10.0
2012 11.280
2013 12.900

二、梯度下降法

1、代码

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd#加载数据
def loadData(filename):traindata = pd.read_csv(filename,' ')traindata.insert(0,'Ones',1)x = traindata.iloc[:,[0,1]]y = traindata.iloc[:,2]return x.values,y.values
#损失函数
def costFunction(X,Y,Theta):m=len(Y)inner=np.power((X@Theta-Y),2)return np.sum(inner)/(2*m)
#梯度下降法
def gradientDescent(X,Y,Theta,alpha,iters):m=len(Y)temp=np.zeros(Theta.shape)cols=len(Theta)costs=np.zeros(iters)for i in range(iters):dis = X@Theta-Yfor j in range(cols):term=dis*X[:,j]temp[j] = Theta[j]-alpha*np.sum(term)/mTheta=tempcosts[i]=costFunction(X,Y,Theta)return Theta,costsdef linear_regression(predictYear = 2014):X,Y=loadData('./inputdata.txt')X[:,1]-=2000theta=np.array([0,0])iters = 3000alpha = 0.0001w,costs=gradientDescent(X,Y,theta,alpha,iters)print(w)x=np.arange(0,20,2)f=w[0]+w[1]*xpyear=predictYear-2000pprice=w[0]+w[1]*pyearx_ticks=x+2000plt.xticks(x_ticks)plt.xlabel('Year')plt.ylabel('price')plt.title('Price of house')plt.scatter(X[:,1]+2000,Y,color='red')plt.scatter(predictYear,pprice,color='green')plt.plot(x_ticks,f)plt.figure()plt.title('Cost')plt.xlabel('iterations')plt.ylabel('cost')plt.plot(costs)plt.show()

详细了解梯度下降法。

2、结果

其中,红色的点是训练样本,绿色的点是预测值,蓝色的线是拟合的直线。

上图是损失函数与迭代次数的关系,可以看到迭代500次后损失函数值就平稳了。

三、最小二乘法

1、代码

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd#加载数据
def loadData(filename):traindata = pd.read_csv(filename,' ')traindata.insert(0,'Ones',1)x = traindata.iloc[:,[0,1]]y = traindata.iloc[:,2]return x.values,y.values#损失函数
def costFunction(X,Y,Theta):m=len(Y)inner=np.power((X@Theta-Y),2)return np.sum(inner)/(2*m)def calcuateTheta(X,Y):theta=np.zeros(2)m=len(X)x_mean= np.sum(X)/mtheta[1]=np.sum((X-x_mean)*Y)/(np.sum(X**2)-(np.sum(X))**2/m)theta[0]=np.sum(Y-theta[1]*X)/mreturn thetadef linear_regression(predictYear = 2014):X,Y=loadData('./inputdata.txt')X[:,1]-=2000theta=calcuateTheta(X[:,1],Y)print(theta,costFunction(X,Y,theta))x=np.arange(0,20,2)f=theta[0]+theta[1]*xpyear=predictYear-2000pprice=theta[0]+theta[1]*pyearx_ticks=x+2000plt.xticks(x_ticks)plt.xlabel('Year')plt.ylabel('price')plt.title('Price of house')plt.scatter(X[:,1]+2000,Y,color='red')plt.scatter(predictYear,pprice,color='green')plt.plot(x_ticks,f)plt.show()

最小二乘法不需要像梯度下降法进行迭代,直接用公式即可。对公式推导感兴趣的可以看这篇博客。

2、结果

其中,红色的点是训练样本,绿色的点是预测值,蓝色的线是拟合的直线。

一元变量线性回归(房价预测) Python代码相关推荐

  1. 波士顿房价预测python代码_Python之机器学习-波斯顿房价预测

    AI 人工智能 Python之机器学习-波斯顿房价预测 波士顿房价预测 导入模块 import pandas as pd import numpy as np import matplotlib.py ...

  2. 波士顿房价预测python代码_使用Python和Numpy构建神经网络模型——波士顿房价预测案例...

    原标题:使用Python和Numpy构建神经网络模型--波士顿房价预测案例

  3. 1-线性回归之单变量线性回归基本原理的python实现

    文章目录 单变量线性回归基本原理的python实现 1大环境准备 2jupyter工作路径的更改 3单变量线性回归 2.1数据读取 2.2特征构造 2.3其他准备 2.4线性回归主体 2.4.1计算代 ...

  4. 二手房房价预测案例 -- 代码实现

    本篇将继续上一篇二手房房价预测案例 -- 基本概念以及模型应用之后进行代码实现,这两部分构成了一个简单的数据分析流程.结合两篇文章通过数据分析和挖掘的方法实现二手房价格预测的预测后,分析报告请看这里. ...

  5. 波士顿房价预测python决策树_机器学习·波士顿房价预测模型

    模型评估与验证 当我们的机器学习模型建立好之后,如何训练数据以获得最优的模型参数,又用什么指标来评价模型的优劣呢?本文以波士顿房价为例,说明如何训练数据以及对模型做评估,辨别模型的优劣. 第一步:导入 ...

  6. 波士顿房价预测python决策树_波士顿房价预测 - 最简单入门机器学习 - Jupyter

    机器学习入门项目分享 - 波士顿房价预测 该分享源于Udacity机器学习进阶中的一个mini作业项目,用于入门非常合适,刨除了繁琐的部分,保留了最关键.基本的步骤,能够对机器学习基本流程有一个最清晰 ...

  7. 房价预测Python

    房价预测包括以下几个部分:导入数据.数据的预处理.求梯度 题目要求: 1.影响房价的因素:面积.房间数 2.利用梯度下降法,求出预测函数t=x1*w1+x2*w2+b 这个是我写的代码,我对于这个题的 ...

  8. 基于神经网络的房价预测,python数据分析房价预测

    Python 与深度学习有哪些与建筑设计相接轨的可能性 关注这个问题快一周了,到目前来说还是没发现什么太大的惊喜.我感觉建筑设计界还是要学习一个,不要看到深度学习很火,就弄个大新闻,把这玩意往建筑设计 ...

  9. bp神经网络预测python代码_机器学习之多层神经网络(附Python代码和数据)

    1 引言 多层神经网络,Multiple-layers Perceptron (MLP),又被称为多层感知机,是机器学习中深度学习的典型算法.关于多层神经网络的算法原理,我们在Stata和R实现的文章 ...

  10. 交通流预测python代码_Python 3 amp; Keras 实现基于神经网络的交通流预测

    交通流量预测在智能交通(ITS)系统中占有重要地位,是实现交通诱导的前提.准确实时的短时交通流预测有助于更好的分析路网交通状况,对路网交通规划和交通优化控制有非常重要的作用.随着交通数据采集技术的不断 ...

最新文章

  1. 我总有办法让你今晚回不了家...
  2. vsftpd虚拟用户配置
  3. day02-java关键字
  4. jquery获取select中的option的text值
  5. web memory
  6. 民营企业实施ERP 须先上规范化补习班
  7. 【精华】PS十大抠图技法(上)
  8. forEach 终止循环
  9. C语言画直线~Bresenham方法
  10. 半导体的基础-三极管的工作原理,史上绝无仅有的理解方式
  11. 未来的无盘网吧是什么样子?
  12. 前端中文输入法对剩余字数计算的影响
  13. 1.5-瑞吉外卖-第五天
  14. CSharp(C#)语言_命名空间和程序集
  15. 如何稳步实现互联网流量变现?
  16. 微软 2021 秋季发布会汇总
  17. TRS内容管理平台用户注册逻辑漏洞
  18. [Mugeda HTML5技术教程之2] Mugeda HTML5富媒体平台简介
  19. spring基础知识 (10): SpEL表达式
  20. 微信检测网站拦截查询 怎么查询域名是否被微信封

热门文章

  1. Pycharm整个菜单栏都不见了(包括File\View那一栏)
  2. Unity Magica Cloth(一)
  3. vmware关闭侧通道缓解(windows端)
  4. 互联网成功法则是TCO和KSF
  5. 手机游戏影响游戏主机发展的5个方面
  6. 高端人才必看,生意人必读!
  7. Android(java)学习笔记148:网易新闻RSS客户端应用编写逻辑过程
  8. 【架构实践】“可扩展”的艺术:你知道架构扩展立方体是什么吗?背后的思想对架构设计有什么指导意义?
  9. cento升级bash(源码安装)
  10. 乾坤未定你我皆是黑马