多元线性回归之预测房价
目录
一、多元线性回归
二.用EXCEL来做
三、Juypter中分析(不使用Sklearn)
四. 模型优化
五. 总结
六
. 参考链接
一、多元线性回归
在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行预测或估计更有效,更符合实际。因此多元线性回归比一元线性回归的实用意义更大。
问题概述:
市场房价的走向受到多种因素的影响,通过对影响市场房价的多种因素进行分析,有助于对未来房价的走势进行较为准确的评估。
多元线性回归适用于对受到多因素影响的数据进行分析的场景。由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行预测或估计更有效,更符合实际。本文基于数学模型,对过去一段时间某一地区的房屋出售价格等相关数据进行整理,利用多元线性回归的方法对数据进行分析,预测该地区未来的房价走势。
二.用EXCEL来做
将neighborhood
列和style
列删除:
选择数据分析中的回归:
设置输入和输出选项:
分析结果:
三、Juypter中分析(不使用Sklearn)
导入数据:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as pltdf = pd.read_csv('./data/house_prices.csv')
df.info();
df.head();
异常值处理:
# 异常值处理
# ================ 异常值检验函数:iqr & z分数 两种方法 =========================
def outlier_test(data, column, method=None, z=2):""" 以某列为依据,使用 上下截断点法 检测异常值(索引) """""" full_data: 完整数据column: full_data 中的指定行,格式 'x' 带引号return 可选; outlier: 异常值数据框 upper: 上截断点; lower: 下截断点method:检验异常值的方法(可选, 默认的 None 为上下截断点法),选 Z 方法时,Z 默认为 2"""# ================== 上下截断点法检验异常值 ==============================if method == None:print(f'以 {column} 列为依据,使用 上下截断点法(iqr) 检测异常值...')print('=' * 70)# 四分位点;这里调用函数会存在异常column_iqr = np.quantile(data[column], 0.75) - np.quantile(data[column], 0.25)# 1,3 分位数(q1, q3) = np.quantile(data[column], 0.25), np.quantile(data[column], 0.75)# 计算上下截断点upper, lower = (q3 + 1.5 * column_iqr), (q1 - 1.5 * column_iqr)# 检测异常值outlier = data[(data[column] <= lower) | (data[column] >= upper)]print(f'第一分位数: {q1}, 第三分位数:{q3}, 四分位极差:{column_iqr}')print(f"上截断点:{upper}, 下截断点:{lower}")return outlier, upper, lower# ===================== Z 分数检验异常值 ==========================if method == 'z':""" 以某列为依据,传入数据与希望分段的 z 分数点,返回异常值索引与所在数据框 """""" paramsdata: 完整数据column: 指定的检测列z: Z分位数, 默认为2,根据 z分数-正态曲线表,可知取左右两端的 2%,根据您 z 分数的正负设置。也可以任意更改,知道任意顶端百分比的数据集合"""print(f'以 {column} 列为依据,使用 Z 分数法,z 分位数取 {z} 来检测异常值...')print('=' * 70)# 计算两个 Z 分数的数值点mean, std = np.mean(data[column]), np.std(data[column])upper, lower = (mean + z * std), (mean - z * std)print(f"取 {z} 个 Z分数:大于 {upper} 或小于 {lower} 的即可被视为异常值。")print('=' * 70)# 检测异常值outlier = data[(data[column] <= lower) | (data[column] >= upper)]return outlier, upper, lower
outlier, upper, lower = outlier_test(data=df, column='price', method='z')
outlier.info(); outlier.sample(5)
调用函数输出结果:
# 热力图
def heatmap(data, method='pearson', camp='RdYlGn', figsize=(10 ,8)):"""data: 整份数据method:默认为 pearson 系数camp:默认为:RdYlGn-红黄蓝;YlGnBu-黄绿蓝;Blues/Greens 也是不错的选择figsize: 默认为 10,8"""## 消除斜对角颜色重复的色块# mask = np.zeros_like(df2.corr())# mask[np.tril_indices_from(mask)] = Trueplt.figure(figsize=figsize, dpi= 80)sns.heatmap(data.corr(method=method), \xticklabels=data.corr(method=method).columns, \yticklabels=data.corr(method=method).columns, cmap=camp, \center=0, annot=True)# 要想实现只是留下对角线一半的效果,括号内的参数可以加上 mask=maskheatmap(data=df, figsize=(6,5))
可以看出 area,bedrooms,bathrooms 等变量与房屋价格 price 的关系都还比较强。
多元线性回归建模:
# 随机选择 600 条数据
df = df.copy().sample(600)from statsmodels.formula.api import olslm = ols('price ~ area + bedrooms + bathrooms', data=df).fit()
lm.summary()
输出:
可发现:R^2 =0.687
四. 模型优化
导入数据:
import pandas as pd
import numpy as np
import seaborn as sns
from sklearn import datasets
from sklearn.linear_model import LinearRegression
df = pd.read_csv('data/house_prices.csv')
df.info()#显示列名和数据类型类型
df.head(6)#显示前n行,n默认为5
异常值检测:
# 异常值处理
# ================ 异常值检验函数:iqr & z分数 两种方法 =========================
def outlier_test(data, column, method=None, z=2):""" 以某列为依据,使用 上下截断点法 检测异常值(索引) """""" full_data: 完整数据column: full_data 中的指定行,格式 'x' 带引号return 可选; outlier: 异常值数据框 upper: 上截断点; lower: 下截断点method:检验异常值的方法(可选, 默认的 None 为上下截断点法),选 Z 方法时,Z 默认为 2"""# ================== 上下截断点法检验异常值 ==============================if method == None:print(f'以 {column} 列为依据,使用 上下截断点法(iqr) 检测异常值...')print('=' * 70)# 四分位点;这里调用函数会存在异常column_iqr = np.quantile(data[column], 0.75) - np.quantile(data[column], 0.25)# 1,3 分位数(q1, q3) = np.quantile(data[column], 0.25), np.quantile(data[column], 0.75)# 计算上下截断点upper, lower = (q3 + 1.5 * column_iqr), (q1 - 1.5 * column_iqr)# 检测异常值outlier = data[(data[column] <= lower) | (data[column] >= upper)]print(f'第一分位数: {q1}, 第三分位数:{q3}, 四分位极差:{column_iqr}')print(f"上截断点:{upper}, 下截断点:{lower}")return outlier, upper, lower# ===================== Z 分数检验异常值 ==========================if method == 'z':""" 以某列为依据,传入数据与希望分段的 z 分数点,返回异常值索引与所在数据框 """""" paramsdata: 完整数据column: 指定的检测列z: Z分位数, 默认为2,根据 z分数-正态曲线表,可知取左右两端的 2%,根据您 z 分数的正负设置。也可以任意更改,知道任意顶端百分比的数据集合"""print(f'以 {column} 列为依据,使用 Z 分数法,z 分位数取 {z} 来检测异常值...')print('=' * 70)# 计算两个 Z 分数的数值点mean, std = np.mean(data[column]), np.std(data[column])upper, lower = (mean + z * std), (mean - z * std)print(f"取 {z} 个 Z分数:大于 {upper} 或小于 {lower} 的即可被视为异常值。")print('=' * 70)# 检测异常值outlier = data[(data[column] <= lower) | (data[column] >= upper)]return outlier, upper, lower
进行回归:
#取出自变量
data_x=df[['area','bedrooms','bathrooms']]
data_y=df['price']
# 进行多元线性回归
model=LinearRegression()
l_model=model.fit(data_x,data_y)
print('参数权重')
print(model.coef_)
print('模型截距')
print(model.intercept_)
from statsmodels.formula.api import ols
#不使用虚拟变量
lm = ols('price ~ area + bedrooms + bathrooms', data=df).fit()
lm.summary()
可发现:R^2=0.626
五. 总结
本次实验了解了多元回归模型的相关概念,构建模型的基本步骤,更加熟悉使用sklearn库调用函数的方法,了解了一些处理数据的基本方法,包括处理缺省值和非数值数据的处理方法等,计算很麻烦,需要借助软件来计算。
六
. 参考链接
多元线性回归之预测房价
多元线性回归算法预测房价
多元线性回归之预测房价相关推荐
- 多元线性回归算法预测房价【人工智能】
目录 一.理论知识 二.Excel多元线性回归 1.数据集 2.数据分析 三.借助Sklearn库实现多元线性回归 1.基础包与数据导入 2.变量探索 3.分析数据 4.建立线性回归模型 5.Skle ...
- 多元线性回归算法预测房价——Excel、jupyter+sklearn
嘿!我是目录 一.多元线性回归 1. 定义 2. 数据清洗 2.1 缺失值处理 2.2 异常值(离群点)处理 3. 特征共线性问题 二.用Excel做房价预测线性回归 1. 配置Excel 2. 完善 ...
- 机器学习(二)多元线性回归算法预测房价
机器学习(二)多元线性回归算法预测房价 本篇文章已作为重庆交通大学19级微课<机器视觉>大作业提交,提前声明,避免抄袭误会 "garbage in garbage out&quo ...
- 多元线性回归算法预测房价
目录 一.多元线性回归 1.定义 2.房价问题分析 二.使用Excel进行多元先回归预测 1.导入数据 2.完善数据集 1.删除数据偏差 2. 处理非数据数值 3.Excel做线性回归 三.用jupy ...
- jupyter多元线性回归算法预测房价
目录 一.概念 二.Excel预测房价 三.Python预测房价(不用Sklearn) 1.上传数据文件 2.导入数据 3.数据清洗 4.热力图 5.多元线性回归建模 6.模型末尾提示可能存在多元共线 ...
- 【经典案例】 | 多元线性回归模型预测房价(附Python代码与数据)
- 多元线性回归数据集_TensorFlow学习Program1——13.实现一元、多元线性回归(基于房价数据集)...
本节将针对波士顿房价数据集的房间数量(RM)采用简单一元线性回归,目标是预测在最后一列(MEDV)给出的房价.波士顿房价数据集可从http://lib.stat.cmu.edu/datasets/bo ...
- 使用Python+Pandas+Statsmodels建立线性回归模型预测房价
[综述] 本文通过使用Python+Pandas+Statsmodels建立简单一元线性回归模型.多元线性回归模型来预测房价. 主要内容来源自网页:https://www.learndatasci.c ...
- R语言构建多元线性回归模型预测汽车的耗油效率
目录 确定研究目的以及确定因变量和自变量 数据预处理 缺失值处理 异常值处理 估计回归模型参数,建立模型 判断数据是否满足多重线性回归假设条件 (1).线性 (2).独立性 (3).正态性 (4).方 ...
最新文章
- ECCV2020 | 北京大学提出RGB-D语义分割新网络,多模态信息融合
- POJ1741 Tree(树分治——点分治)题解
- 文章内容页调用所属栏目地址的标签
- 图片处理 javax.imageio.IIOException: Unsupported Image Type
- 适用于ELment-UI级联多选框,数据回填,根据子节点的值查找完整路径
- cocos 制作动态生成内容的列表_零代码工具,让你在线轻松制作交互内容!
- 深度强化学习-DDPG算法原理和实现
- 今天看到一篇小册子上的话
- 16. CSS 轮廓
- Google Picasa2
- TDSQL破圈背后:国产数据库加速出击
- 无法使用tftp下载Linux内核到开发板,总是显示TTTTTTTTT的原因
- android 8三星note8,三星note8和s8哪个好 三星note8和s8对比【详解】
- AE PR模板基本图形预设素材包动态字幕文字标题排版动画预设效果
- android中contains的用法
- macbook pro 700自己换SSD 开启AHC
- php php拼接字符串函数_PHP常见字符串操作函数与用法总结
- 2021年R2移动式压力容器充装考试技巧及R2移动式压力容器充装模拟考试题
- vSphere嵌套式搭建深信服HCI记录
- Go打印结构体使用“%+v”