目录

一、多元线性回归

二.用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库调用函数的方法,了解了一些处理数据的基本方法,包括处理缺省值和非数值数据的处理方法等,计算很麻烦,需要借助软件来计算。

. 参考链接

多元线性回归之预测房价

多元线性回归算法预测房价

多元线性回归之预测房价相关推荐

  1. 多元线性回归算法预测房价【人工智能】

    目录 一.理论知识 二.Excel多元线性回归 1.数据集 2.数据分析 三.借助Sklearn库实现多元线性回归 1.基础包与数据导入 2.变量探索 3.分析数据 4.建立线性回归模型 5.Skle ...

  2. 多元线性回归算法预测房价——Excel、jupyter+sklearn

    嘿!我是目录 一.多元线性回归 1. 定义 2. 数据清洗 2.1 缺失值处理 2.2 异常值(离群点)处理 3. 特征共线性问题 二.用Excel做房价预测线性回归 1. 配置Excel 2. 完善 ...

  3. 机器学习(二)多元线性回归算法预测房价

    机器学习(二)多元线性回归算法预测房价 本篇文章已作为重庆交通大学19级微课<机器视觉>大作业提交,提前声明,避免抄袭误会 "garbage in garbage out&quo ...

  4. 多元线性回归算法预测房价

    目录 一.多元线性回归 1.定义 2.房价问题分析 二.使用Excel进行多元先回归预测 1.导入数据 2.完善数据集 1.删除数据偏差 2. 处理非数据数值 3.Excel做线性回归 三.用jupy ...

  5. jupyter多元线性回归算法预测房价

    目录 一.概念 二.Excel预测房价 三.Python预测房价(不用Sklearn) 1.上传数据文件 2.导入数据 3.数据清洗 4.热力图 5.多元线性回归建模 6.模型末尾提示可能存在多元共线 ...

  6. 【经典案例】 | 多元线性回归模型预测房价(附Python代码与数据)

  7. 多元线性回归数据集_TensorFlow学习Program1——13.实现一元、多元线性回归(基于房价数据集)...

    本节将针对波士顿房价数据集的房间数量(RM)采用简单一元线性回归,目标是预测在最后一列(MEDV)给出的房价.波士顿房价数据集可从http://lib.stat.cmu.edu/datasets/bo ...

  8. 使用Python+Pandas+Statsmodels建立线性回归模型预测房价

    [综述] 本文通过使用Python+Pandas+Statsmodels建立简单一元线性回归模型.多元线性回归模型来预测房价. 主要内容来源自网页:https://www.learndatasci.c ...

  9. R语言构建多元线性回归模型预测汽车的耗油效率

    目录 确定研究目的以及确定因变量和自变量 数据预处理 缺失值处理 异常值处理 估计回归模型参数,建立模型 判断数据是否满足多重线性回归假设条件 (1).线性 (2).独立性 (3).正态性 (4).方 ...

最新文章

  1. ECCV2020 | 北京大学提出RGB-D语义分割新网络,多模态信息融合
  2. POJ1741 Tree(树分治——点分治)题解
  3. 文章内容页调用所属栏目地址的标签
  4. 图片处理 javax.imageio.IIOException: Unsupported Image Type
  5. 适用于ELment-UI级联多选框,数据回填,根据子节点的值查找完整路径
  6. cocos 制作动态生成内容的列表_零代码工具,让你在线轻松制作交互内容!
  7. 深度强化学习-DDPG算法原理和实现
  8. 今天看到一篇小册子上的话
  9. 16. CSS 轮廓
  10. Google Picasa2
  11. TDSQL破圈背后:国产数据库加速出击
  12. 无法使用tftp下载Linux内核到开发板,总是显示TTTTTTTTT的原因
  13. android 8三星note8,三星note8和s8哪个好 三星note8和s8对比【详解】
  14. AE PR模板基本图形预设素材包动态字幕文字标题排版动画预设效果
  15. android中contains的用法
  16. macbook pro 700自己换SSD 开启AHC
  17. php php拼接字符串函数_PHP常见字符串操作函数与用法总结
  18. 2021年R2移动式压力容器充装考试技巧及R2移动式压力容器充装模拟考试题
  19. vSphere嵌套式搭建深信服HCI记录
  20. Go打印结构体使用“%+v”

热门文章

  1. 这份新年豪礼面试锦囊,真舍不得给你们!
  2. Unity3D 罗技G29开发笔记
  3. 关于计算机培训策划案,2019年计算机培训策划书.docx
  4. 计算机视觉论文-2021-08-02
  5. 生成yolo.h5的方法
  6. Python-使用正则表达式爬取斗破苍穹小说文字内容(使用Requests库实现)
  7. ubuntu windows双系统默认启动项切换
  8. 计算机低配配置单,吃鸡需要什么配置|电脑玩绝地求生最低配置多少
  9. 软件著作权申请——使用了MIT-licence开源框架
  10. springMVC中拦截器执行时机和执行顺序分析