Python数据分析-房价预测及模型分析

2023-11-09

摘 要

Python数据分析-房价的影响因素图解icon-default.png?t=L892https://blog.csdn.net/weixin_42341655/article/details/120299008?spm=1001.2014.3001.5501

上一篇OF讲述了房价的影响因素,主要是房屋面积、卫生间数、卧室数。今天,我们通过建立模型来预测房价。机器学习中关于回归算法-数据发展的预测,包含了几个模型:

1、线性回归;

2、岭回归;

3、Lasso回归;

4、多项式回归。

线性回归

线性回归的公式很简单y=ax+b(a是系数,b是截距),OF借这个简单的公式来介绍下机器学习的过程。

1、定义训练集、测试集;

2、选择模型;

3、训练模型;

4、预测和推断。

import numpy as np
import pandas as pd 
from sklearn.model_selection import train_test_split
from sklearn import linear_model
import tkinter as tk
df = pd.read_csv(r"./data/house_data.csv")
#定义训练集、测试集
train_data,test_data = train_test_split(df,train_size = 0.8,random_state=3)
#定义训练数据列
X_train = np.array(train_data['square'], dtype=pd.Series).reshape(-1,1)
y_train = np.array(train_data['price'], dtype=pd.Series)
#定义测试数据列
X_test = np.array(test_data['square'], dtype=pd.Series).reshape(-1,1)
y_test = np.array(test_data['price'], dtype=pd.Series)
#选择模型
lr = linear_model.LinearRegression()
# 训练模型
lr.fit(X_train,y_train)
#预测、推断
pred = lr.predict(X_test)

我们来看下预测模型的线性回归是一条怎样的线(下图红色线):

#图表显示
plt.scatter(X_test, y_test)
plt.plot(X_test,pred,color='r')
plt.show()

从肉眼上看,这条线性回归效果似乎并不太理想,我们用数据说话,计算下该模型的评分如何。我们一般用以下指标来衡量模型的好坏:R2(决定系数)、RMSE(均方根误差)、cv(K折交叉验证系数)。我们先看下该模型的R2评分如何:

#计算模型评分
X = np.array(df['square']).reshape(-1,1)
print(lr.score(X,df['price']))

计算结果:

0.4928363894587906

R2分数越高,说明模型的准确率越高,低于50%的准确率,模型确实不太理想啊。但既然做出来了,我们用该模型预测下房价。

#计算系数和截距
intercept=float(lr.intercept_)
coef=float(lr.coef_)
print ("Average Price for Test Data: {:.3f}".format(y_test.mean()))
print('Intercept: {}'.format(intercept))
print('Coefficient: {}'.format(coef))
# 第1步,实例化object,建立窗口window
window = tk.Tk()
# 第2步,给窗口的可视化起名字
window.title('房价预测计算器-线性回归')
# 第3步,设定窗口的大小(长 * 宽)
window.geometry('500x300')  # 这里的乘是小x
# 第4步,在图形界面上设定输入框控件entry框并放置
a = tk.Label(window, text="房屋面积:")
a.place(x='30',y='50',width='80',height='40')
e = tk.Entry(window, show = None)#显示成明文形式
e.place(x='120',y='50',width='180',height='40')
# 第5步,定义触发事件
def calculate(): # 在鼠标焦点处插入输入内容
    var = e.get()
    ans = coef*float(var)+intercept
    ans = '%.2f'%ans
    result.set(str(ans))   
# 第6步,创建并放置一个按钮
b1 = tk.Button(window, text='预测房价', width=10, height=2, command=calculate)
b1.place(x='320',y='50',width='100',height='40')
# 第7步,创建并放置一个多行文本框text用以显示
w = tk.Label(window, text="预测房价(万元):")
w.place(x='50',y='150',width='120',height='50')
result = tk.StringVar()
show_dresult = tk.Label(window, bg='white',fg = 'black',font = ('Arail','16'),bd='0',textvariable=result,anchor='e')
show_dresult.place(x='200',y='150',width='250',height='50')
# 第8步,主窗口循环显示
window.mainloop()

岭回归

线性回归呈现了房价与房屋面积的关系,但实际上,房价的影响因素可不止面积,还有卫生间数量和卧室数量,当然还有其他一些特征。我们本次用这3个特征进行岭回归预测。岭回归的公式:

import pandas as pd 
from sklearn.model_selection import train_test_split
from sklearn import linear_model
import tkinter as tk
df_dm = pd.read_csv(r"./data/house_data.csv")
train_data_dm, test_data_dm = train_test_split(df_dm,train_size = 0.8,random_state=3)
features = ['square','bathrooms','bedrooms']
complex_model_R = linear_model.Ridge(alpha=100)
complex_model_R.fit(train_data_dm[features],train_data_dm['price'])
pred1 = complex_model_R.predict(test_data_dm[features])
intercept=float(complex_model_R.intercept_)
coef=list(complex_model_R.coef_)
print('Intercept: {}'.format(intercept))
print('Coefficients: {}'.format(coef))
#计算模型评分
print(complex_model_R.score(df_dm[features],df_dm['price']))
# 第1步,实例化object,建立窗口window
window = tk.Tk()
# 第2步,给窗口的可视化起名字
window.title('房价预测计算器-岭回归')
# 第3步,设定窗口的大小(长 * 宽)
window.geometry('500x350')  # 这里的乘是小x
# 第4步,在图形界面上设定输入框控件entry框并放置
a = tk.Label(window, text="房屋面积:")
a.place(x='30',y='50',width='80',height='40')
e = tk.Entry(window, show = None)#显示成明文形式
e.place(x='120',y='50',width='180',height='40')
b = tk.Label(window, text="卫生间数:")
b.place(x='30',y='120',width='80',height='40')
f = tk.Entry(window, show = None)#显示成明文形式
f.place(x='120',y='120',width='180',height='40')
c = tk.Label(window, text="卧室数:")
c.place(x='30',y='190',width='80',height='40')
g = tk.Entry(window, show = None)#显示成明文形式
g.place(x='120',y='190',width='180',height='40')
# 第5步,定义触发事件
def calculate(): # 在鼠标焦点处插入输入内容
    var1 = e.get()
    var2 = f.get()
    var3 = g.get()
    ans = coef[0]*float(var1)+coef[1]*float(var2)+coef[2]*float(var3)+intercept
    ans = '%.2f'%ans
    result.set(str(ans))   
# 第6步,创建并放置一个按钮
b1 = tk.Button(window, text='预测房价', width=10, height=2, command=calculate)
b1.place(x='350',y='120',width='100',height='40')
# 第7步,创建并放置一个多行文本框text用以显示
w = tk.Label(window, text="预测房价(万元):")
w.place(x='30',y='250',width='120',height='50')
result = tk.StringVar()
show_dresult = tk.Label(window, bg='white',fg = 'black',font = ('Arail','16'),bd='0',textvariable=result,anchor='e')
show_dresult.place(x='200',y='250',width='250',height='50')
# 第8步,主窗口循环显示
window.mainloop()

该模型计算得到的评分稍微要高一些:

0.5068817650838495

我们用该模型预测的房价结果:

Lasso回归

1)Lasso回归的公式:

2)岭回归与Lasso回归的公式是相同的,Lasso回归与岭回归的区别在于:

Many small/medium sized effects: 使用(Ridge)岭回归

Only a few variables with medium/large effect: 使用Lasso回归

3)岭回归也称为L2 正则化,Lasso回归也称为L1正则化

岭回归与Lasso回归最大的区别在于岭回归引入的是L2范数惩罚项,Lasso回归引入的是L1范数惩罚项,Lasso回归能够使得损失函数中的许多θ均变成0,这点要优于岭回归,因为岭回归是要所有的θ均存在的,这样计算量Lasso回归将远远小于岭回归。

Lasso回归最终会趋于一条直线,原因就在于好多θ值已经均为0,而岭回归却有一定平滑度,因为所有的θ值均存在。

模型评分:0.5067363047097421,并不比岭回归高。

多项式回归

多项式回归的公式:

 

该模型OF就不过多介绍了,我们的数据集并不太适合,大家想练习下,可以自行尝试下。

结 语

OF主要介绍了3种模型进行房价预测:线性回归、岭回归、Lasso回归。希望大家能够了解机器语言在生活中的应用场景,活学活用,利用学习到的知识解决些生活/工作中的问题。机器学习大概需要学习以下内容:

1、回归算法:数据发展预测

线性回归、多项式回归

2、分类、聚类算法:预测数据类别

二/多项式分类

KNN、SVM、朴素贝叶斯分类

K-means聚类

3、决策树、随机森林算法:数据分类

Boost、GBDT、XGBOOST

4、NLP自然语言

5、深度学习

NN:神经网络

CNN:卷积神经网络

RNN:循环神经网络

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python数据分析-房价预测及模型分析 的相关文章

  • 使用 Python 编辑 RTF 文件

    也许这是一个愚蠢的问题 但我不明白 所以道歉 我有一个 RTF 文档 我想更改它 例如 有一个表 我想复制一行并以面向对象的方式更改代码中第二行中的文本 我认为 pyparsing 应该是可行的方法 但我摆弄了几个小时但没有明白 我没有提供
  • LibreOffice 并行将 .docx 转换为 .pdf 效果不佳

    我有很多 docx 文件需要转换为 pdf 将它们一一转换需要很长时间 所以我编写了一个 python 脚本来并行转换它们 from subprocess import Popen import time import os os chdi
  • 使用 pandas.date_range() 生成多个日期时间,每周两个日期

    我在用着pd date range start date end date freq W MON 每周一生成每周频率日期时间start date 2017 01 01 and end date 2017 12 31 这意味着每月大约生成 4
  • McNemar 在 Python 中的测试以及分类机器学习模型的比较 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有用 Python 实现的好的 McNemar 测试 我在 Scipy stats 或 Scikit
  • 使用 Python 3 动态插入到 sqlite

    我想使用 sqlite 写入多个表 但我不想提前手动指定查询 有数十种可能的排列 例如 def insert sqlite tablename data list global dbc dbc execute insert into tab
  • 以类型化内存视图作为成员的结构定义

    目前我正在尝试让一个具有类型化内存视图的结构能够工作 例如 ctypedef struct node unsigned int inds 如果 inds 不是内存视图 据我所知 它可以完美地工作 然而 通过内存视图并使用类似的东西 def
  • 如何在 Python 中的函数入口、内部和退出处进行日志记录

    我希望能够使用 Python 日志记录工具在我的代码中进行简单且一致的日志记录 我能够执行以下操作 我希望所有现有 未来的模块和函数都有 输入 和 完成 日志消息 我不想添加相同的代码片段来定义日志记录参数 如下所示don t want t
  • Jupyter 笔记本中未显示绘图图表

    我已经尝试解决这个问题几个小时了 我按照上面的步骤操作情节网站 https plot ly python getting started start plotting online并且图表仍然没有显示在笔记本中 这是我的情节代码 color
  • 时间序列数据预处理 - numpy strides 技巧以节省内存

    我正在预处理一个时间序列数据集 将其形状从二维 数据点 特征 更改为三维 数据点 时间窗口 特征 在这样的视角中 时间窗口 有时也称为回顾 指示作为输入变量来预测下一个时间段的先前时间步长 数据点的数量 换句话说 时间窗口是机器学习算法在对
  • 使用标签或 href 传递 Django 数据

    我有一个包含链接的表 当单击该链接进行更多操作时 我想将一些数据传递给我的函数 my html table tbody for query in queries tr td value a href internal my func que
  • pygame:使用 sprite.RenderPlain 绘制精灵组的顺序

    我有一个精灵组 需要按一定的顺序绘制 以便其精灵按应有的方式重叠 然而 即使使用运算符模块函数 sorted self sprites key attrgetter y x 对组进行排序 顺序也是错误的 我该如何解决这个问题 直截了当地说
  • 如何在 Seaborn 中的热图轴上表达类

    我使用 Seaborn 创建了一个非常简单的热图 显示相似性方阵 这是我使用的一行代码 sns heatmap sim mat linewidths 0 square True robust True sns plt show 这是我得到的
  • 无法在 PyCharm 版本 9.3.3 中安装 NumPy。 Python版本3.8.2

    在 PyCharm 中安装 NumPy 时出错 尝试安装 Microsoft Visual C 14 0 还是行不通 NumPy 正在通过命令安装pip3 install numpy在 cmd 终端中 但是当尝试将其安装在 PyCharm
  • 将字符串中的随机字符转换为大写

    我尝试随机附加文本字符串 这样就不只是有像这样的输出 gt gt gt david 我最终会得到类似的东西 gt gt gt DaViD gt gt gt dAviD 我现在的代码是这样的 import random import stri
  • 如何从列表类别中对 pandas 数据框进行排序?

    所以我在下面有这个数据集 我想根据我的列表从 名称 列进行排序 以及按 A 升序和按 B 降序排序 import pandas as pd import numpy as np df1 pd DataFrame from items A 1
  • 使用 suds SOAP 库进行 HTTP 身份验证的奇怪行为

    我有一个正在运行的 python 程序 它使用 suds 通过 SOAP 获取大量数据 Web服务是通过分页功能实现的 这样我就可以抓取nnn每个 fetch 调用的行并获取下一个nnn与后续的电话 如果我使用如下代码向 HTTP 服务器进
  • 在 numpy 中连接维度

    我有x 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 2 3 I want 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 6 也就是说 我想连接中间维度的所有项目 在这种特殊情况下我可以得到这
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我
  • 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

    我正在使用 easyocr 来检测图像中的文本 该方法给出输出边界框 输入图像如下所示 Image 1 Image 2 使用下面的代码获得输出图像 But I want to draw a Single Bigger bounding bo
  • 如何通过点击复制 folium 地图上的标记位置?

    I am able to print the location of a given marker on the map using folium plugins MousePosition class GeoMap def update

随机推荐

  • R语言第八次课堂小测 rattle的应用(包括rattle的安装)

    题目 安装rattle 并使用rattle 用三种聚类方法对鸢尾花数据集进行聚类 步骤一 修改镜像源 首先 在Rstudio上打开如下界面 进入后 找到packages 再点击change 下图是已经更换了的截图 选择中国的任意一个镜像 最
  • ./configure之后报错

    首先要看报的错误是什么 一般从第一条开始解决 因为有可能下面的错误是由上面的导致的
  • js 判断变量类型(完整版),包括ES6 新类型Symbol

    欢迎来到Altaba的博客 相信大家在开发中遇到需要判断变量类型的问题 js变量按存储类型可分为值类型和引用类型 值类型包括Undefined String Number Boolean 引用类型包括object Array Functio
  • 股票和期货的区别(股指期货1个点赚多少钱)

    股票和期货的辨别 股票的最后含意即是说不妨表明你购置了这家公司的股子 而期货 则是买卖两边按照各自对目标物的将来价钱预期 以此刻的价钱签署的合约 观念既是仍旧领会了 那咱们就再领会一下这几个的辨别 1 目标物 目标物也即是买卖东西 菜商场里
  • 【深度学习】SETR:基于视觉 Transformer 的语义分割模型

    Visual Transformer Author louwill Machine Learning Lab 自从Transformer在视觉领域大火之后 一系列下游视觉任务应用研究也随之多了起来 基于视觉Transformer的语义分割正
  • OpenMMLab AI实战营第二期(2)MMPose初体验

    根据MMPose的官方文档学习一下 MMPose文档地址 https mmpose readthedocs io zh CN latest index html 文章目录 1 概述 2 安装 2 1 创建conda环境并激活 2 2 安装p
  • mysql锁

    想要了解锁 必须要知道mysql事务 以及mysql事务产生的并发问题 数据库中的事务 隔离级别 以及数据展示 華同学 的博客 CSDN博客 1 Mysql锁的介绍 锁是计算机协调多个线程或进程并发访问某一资源的机制 除传统的计算机资源 C
  • sentencepiece原理与实践

    1 前言 前段时间在看到XLNET Transformer XL等预训练模式时 看到源代码都用到sentencepiece模型 当时不清楚 经过这段时间实践和应用 觉得这个方法和工具值得NLP领域推广和应用 今天就分享下sentencepi
  • Vscode + php + xdebug 单步调试

    1 确认xdebug已打开 php ini xdebug remote enable 1 xdebug remote autostart 1 xdebug remote host localhost xdebug remote port 9
  • win32汇编基础概念

    一 关于寄存器 寄存器有EAX EBX ECX EDX EDI ESI ESP EBP等 似乎IP也是寄存器 但只有在CALL RET在中会默认使用它 其它情况很少使用到 暂时可以不用理会 EAX是WIN32 API 默认的返回值存放处 E
  • 深入理解机器学习与极大似然之间的联系

    似然函数 事件A的发生含着有许多其它事件的发生 所以我就把这些其它事件发生的联合概率来作为事件A的概率 也就是似然函数 数据类型的不同 离散型和连续性 就有不同的似然函数 极大似然极大似然估计方法 Maximum Likelihood Es
  • sqli-labs:less-27(过滤select和union)

    div div
  • eosjs v20 如何通过jsonrpc连接到主网节点

    用eosjs连接主网节点很简单 只需要在创建JsonRpc对象时 指定要连接主网节点的地址 就可以了 例如 下面的代码将创建一个使用eosnewyork io节点RPC旳JsonRpc 对象 然后使用get info 方法获取网络总体信息
  • 拆分Nim游戏

    拆分Nim游戏 给定n堆石子 两位玩家轮流操作 每次操作可以取走其中的一堆石子 然后放入两堆规模更小的石子 新堆规模可以为0 且两个新堆的石子总数可以大于取走的那堆石子数 最后无法进行操作的人视为失败 问如果两人都采用最优策略 先手是否必胜
  • 顺序主子式

    设有矩阵 a b c d e f g h i 则 一阶顺序主子式 a 二阶顺序主子式 a b d e 三阶顺序主子式 a b c d e f g h i 若n阶方阵A的顺序主子式均 0 则A的LU分解A LU存在且唯一 转载于 https
  • 微软Xbox One无线手柄控制机器人

    ROS中的joy包提供了游戏手柄的驱动 并且包含joy node节点 这一节点可以发布包含手柄按钮和轴信息的Joy消息 在终端中输入下面命令 安装joy包 sudo apt get install ros kinetic joy Confi
  • python: FileHelper

    encoding utf 8 版权所有 2023 涂聚文有限公司 许可信息查看 描述 Author geovindu Geovin Du 涂聚文 IDE PyCharm 2023 1 python 311 Datetime 2023 7 9
  • A卡2023最新AI画图教程:3A主机安装ROCm运行Stable Diffusion画图

    硬件平台 3A主机 内存16G 显卡 AMD RX6700 XT 12GB 华擎幻影电竞 处理器 AMD R5 3500X 6C6T 主板 华硕TUF B450M PRO GAMING 安装Ubuntu22 04 2 LTS系统 更换系统源
  • MySQL的索引

    MySQL 的索引 1 索引的使用 1 1 什么是索引 1 2 如何创建索引 1 2 1 ALTER TABLE 1 2 2 CREATE INDEX 1 2 3 CREATE TABLE 1 2 4 创建索引的注意事项 1 3 索引类型
  • Python数据分析-房价预测及模型分析

    摘 要 Python数据分析 房价的影响因素图解https blog csdn net weixin 42341655 article details 120299008 spm 1001 2014 3001 5501 上一篇OF讲述了房价