嘿!我是目录

  • 一、多元线性回归
    • 1. 定义
    • 2. 数据清洗
      • 2.1 缺失值处理
      • 2.2 异常值(离群点)处理
    • 3. 特征共线性问题
  • 二、用Excel做房价预测线性回归
    • 1. 配置Excel
    • 2. 完善数据集
      • 2.1 剔除错误数据
      • 2.2 处理非数据数值
    • 3. Excel做线性回归
  • 三、用jupyter+sklearn做线性回归练习
    • 1. 打开jupyter步骤
    • 2.写入代码
      • 2.1 不做数据处理
      • 2.2 进行数据处理
  • 四、用线性回归模型的统计学库实现
  • 小小的总结
  • 参考文献

一、多元线性回归

1. 定义

在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行预测或估计更有效,更符合实际。因此多元线性回归比一元线性回归的实用意义更大。

2. 数据清洗

多元线性回归属于监督机器学习算法,通过已知数据训练得到模型或决策函数。应用此算法时,不能盲目地套用算法,必须对数据的有效性、正确性、假设合理性进行验证,如果发现数据本身不正确,就需要纠正。

数据清洗

  • 缺失值处理
    异常值处理

2.1 缺失值处理

删除法

删除观测样本
删除变量
使用完整原始数据进行分析
改变权重

插补法

抽样填补
均值差补
回归模型
热平台差补
冷平台差补
拉格朗日插值法
随机森林插值

替换法

缺失值所在变量为数值型:用该变量在其他所有对象的取值的均值/特定值来替换变量的缺失值
缺失值所在变量为非数值型:用该变量其他全部有效观测值的中位数或众数进行替换

参考: http://blog.csdn.net/qq_31584157/article/details/52562830

2.2 异常值(离群点)处理

异常值定义:测定值中与平均值的偏差超过三倍标准差的值
异常值大概包括离群值、重复值、数据不一致。

1.判断异常值方法汇总

简单统计量分析:描述性统计,判断变量的取值是否超出合理的范围
3O原则:正态分布假设下,P(|x-u|>3o)<=0.003,属于极个别的小概率事件
箱型图分析:1.5倍四分位间距的值
图像法汇总:绘制直方图、绘制点图、绘制箱形图、绘制qq图、绘制单变量散点图
局部异常因子检测:基于密度识别异常值的算法,只对数值型数据有效
通过聚类检测异常值

2.异常值处理方法(数据光滑)
分析异常值出现的原因,再判断是否取舍,如果数据正确,可直接在数据上进行挖掘建模

删除法:直接把相应的记录删除
把异常值视为缺失值:利用缺失值处理的方法进行处理
平均值修正:可用前后两个观测值的平均值修正该异常值
不处理:直接在具有异常值的数据集上进行挖掘建模

3. 特征共线性问题

  1. 定义

多重共线性(Multicollinearity)是指线性回归模型中的自变量之间由于存在高度相关关系而使模型的权重参数估计失真或难以估计准确的一种特性,多重是指一个自变量可能与多个其他自变量之间存在相关关系。

多重共线性是使用线性回归算法时经常要面对的一个问题。在其他算法中,例如决策树或者朴素贝叶斯,前者的建模过程时逐渐递进,每次都只有一个变量参与,这种机制含有抗多重共线性干扰的功能;后者假设变量之间是相互独立的。但对于回归算法来说,都要同时考虑多个预测因子,因此多重共线性通常不可避免。

  1. 检测方法
  • 经验式的诊断方法
  • 统计检验方法
    详细可见:多重共线性(统计累赘)的概念、特征及其测量方式和处理方式

二、用Excel做房价预测线性回归

1. 配置Excel

用Excel做线性回归前的具体配置准备步骤,请参照上次博客《用Excel+Anoconda-jupyter做线性回归》中的1.1。

2. 完善数据集

2.1 剔除错误数据

数据集中部分数据存在错误,在对数据进行分析之前,需要剔除错误数据。

此处剔除卧室数和洗浴间数都为0的数据。

选中一组bedroombathroom都为0的数据:

筛选不正常数据:

选中序号为蓝色及前面一组序号为黑色的所有行,删除:

此时是不是看不到其他正常数据了?这时候我们点一下上面的筛选,就能显示删除不正常的数据后的全部的数据了。

当做其他线性回归时,或者其他需要筛选步骤的,都可用此方法查找数据。

2.2 处理非数据数值

线性回归中经常会遇到非数值型数据,即分类型数据,比如性别、所属省份、专业类型等等
分类型数据无法量化,一般会采用哑数据进行处理
如某个数据分为A、B、C三类,即可采用两个哑数据a,b
类型为A时,a=1,b=0
类型为B时,a=0,b=1
类型为C时,a=0,b=0
不使用a,b,c三个哑数据,是因为如果哑数据个数与分类数相同时,恒有a+b+c=1,会存在多重共线性问题
所以在N分类时,一般使用N-1个哑数据

  1. 在我们的数据集中neighborhood和style栏是非数值数据,在neighborhood一栏中将A,B,C以二进制编码表示为10,01,00,也就是十进制的2,1,0。
  2. 在style一栏中同理可得ranch,victorian,lodge为2,1,0。
    方法:点击菜单栏的开始,找到查找和选择,点击选择替换,根据上述替换数据。

在替换的时候一定要勾选区分大小写:

3. Excel做线性回归

  1. 数据选择:

①Excel中——数据——数据分析

② 选择回归


  1. 得到结果:

通过P-value一栏可以得到房屋面积和价格的相关性最强。

根据表中数据得到回归方程:
y= -0.45723 x1 -28426 x2 +345.9623 x3 +4509.576 x4 -2915.15 x5 +2128.176 x6
r²=0.723794

三、用jupyter+sklearn做线性回归练习

1. 打开jupyter步骤

点开Windows



2.写入代码

2.1 不做数据处理

①代码(以下代码可分步进行):

#引入包
import pandas as pd
import numpy as np
import seaborn as sns
from sklearn import datasets
from sklearn.linear_model import LinearRegressiondf = pd.read_csv('D:\\**\\house_prices.csv')#读取文件,此处为自己的文件的路径
df.info()#显示列名和数据类型类型
df.head(6)#显示前n行,n默认为5#取出自变量
data_x=df[['area','bedrooms','bathrooms']]# x
data_y=df['price']# y# 进行多元线性回归
model=LinearRegression()
l_model=model.fit(data_x,data_y)
print('参数权重')
print(model.coef_)
print('模型截距')
print(model.intercept_)

②显示结果:

2.2 进行数据处理

①代码(同样按间隔,可分步进行):

#引入包
import pandas as pd
import numpy as np
import seaborn as sns
from sklearn import datasets
from sklearn.linear_model import LinearRegressiondf = pd.read_csv('D:\\**\\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, loweroutlier, upper, lower = outlier_test(data=df, column='price', method='z')#获得异常数据
outlier.info(); outlier.sample(5)
df.drop(index=outlier.index, inplace=True)#丢弃异常数据#取出自变量
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_)

② 显示结果

四、用线性回归模型的统计学库实现

① 代码:

#引入包
import pandas as pd
import numpy as np
import seaborn as sns
from sklearn import datasets
from sklearn.linear_model import LinearRegression
from statsmodels.formula.api import ols #相比前面新引入的包df = pd.read_csv('D:\\**\\house_prices.csv')#读取文件,此处为自己的文件的路径
df.info()#显示列名和数据类型类型
df.head(6)#显示前n行,n默认为5#不使用虚拟变量
lm = ols('price ~ area + bedrooms + bathrooms', data=df).fit()
lm.summary()

②结果显示

  1. 我们可以用以下代码来查看相关性(当出现多元共线性时):

①代码

def vif(df, col_i):"""df: 整份数据col_i:被检测的列名"""cols = list(df.columns)cols.remove(col_i)cols_noti = colsformula = col_i + '~' + '+'.join(cols_noti)r2 = ols(formula, df).fit().rsquaredreturn 1. / (1. - r2)
test_data = results[['area', 'bedrooms', 'bathrooms', 'A', 'B']]
for i in test_data.columns:print(i, '\t', vif(df=test_data, col_i=i))

② 结果显示:

可见bedroom和bathroom相关程度较高。

  1. 这时我们去掉bedroom

①代码

# 去掉bedroom再次建模
lm = ols(formula='price ~ area + bathrooms', data=df).fit()
lm.summary()

②结果显示

小小的总结

  1. 在做多元线性回归时,虽然自变量越多并不一定得到结果的就越准确,但多个自变量的最优组合共同来预测或估计因变量,比只用某些自变量进行预测或估计更有效,更符合实际。
  2. 多元线性回归属于监督机器学习算法,通过已知数据训练得到模型或决策函数。应用此算法时,不能盲目地套用算法,必须对数据的有效性、正确性、假设合理性进行验证,如果发现数据本身不正确,就需要纠正。一定要对数据进行预处理,数据对结果有很大的影响,特别在错误数据很多的时候。

参考文献

  1. 多元线性回归算法预测房价
  2. 多元线性回归分析
  3. 数据预处理:数据探索与数据清洗(缺失值+异常值)、数据集成+数据规约+数据变换
  4. 特征共线性问题
  5. 多重共线性(统计累赘)的概念、特征及其测量方式和处理方式

多元线性回归算法预测房价——Excel、jupyter+sklearn相关推荐

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

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

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

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

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

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

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

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

  5. 多元线性回归之预测房价

    目录 一.多元线性回归 二.用EXCEL来做 三.Juypter中分析(不使用Sklearn) 四. 模型优化 五. 总结 六 . 参考链接 一.多元线性回归 在回归分析中,如果有两个或两个以上的自变 ...

  6. 大数据分析案例-基于多元线性回归算法预测学生期末成绩

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

  8. python最佳身高_Python+sklearn使用线性回归算法预测儿童身高

    原标题:Python+sklearn使用线性回归算法预测儿童身高 问题描述:一个人的身高除了随年龄变大而增长之外,在一定程度上还受到遗传和饮食以及其他因素的影响,本文代码中假定受年龄.性别.父母身高. ...

  9. 基于线性回归算法的房价预测项目

    1. 查看数据的基本信息 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn a ...

最新文章

  1. 系列文章--oracle简单入门教程
  2. c++ 数组换行_C语言的数组的构建与打印
  3. 在java中使用base64加密解密的方法
  4. Java基础——线程及并发机制
  5. 【华为云技术分享】LiteAI四大绝招,解锁物联网智能设备AI开发难关
  6. 魅族17系列渲染图曝光:“防爆盾”后盖引网友无限吐槽
  7. 计算机主机名在哪里看win7,大师教您win7系统查看win7系统电脑主机名的图文步骤...
  8. struct和class的区别
  9. 别嘲笑老同志了!网络诈骗,19岁小鲜肉最容易中招
  10. 腾讯信鸽 php sdk,xinge: 腾讯信鸽Golang SDK(非官方版本)
  11. 爱普生Epson L301 清零软件+图解教程
  12. 三十岁以后,我一定能阔起来!
  13. 通达OA-公共文件柜在线阅读Word 文档失败:Word 无法创建工作文件,请检查临时环境变量
  14. AD9361使用概述
  15. 电商不仅仅有CRUD——0基础了解电商中的引流工具谷歌GMC
  16. 决策理论(decision theory)
  17. 丹江口计算机学校,丹江口中专学校计算机网络技术寒假实习
  18. c语言实现2048程序设计小游戏
  19. 2020年深圳杯b题、c题 论文及代码
  20. 免费好用的Gif录制工具——Licecap

热门文章

  1. Brenda-利用SOAP API访问Brenda及本地保存
  2. Cisco设备telnet登录设置
  3. termux php 出错,Termux MariaDB 升级后报错解决
  4. linux7yum配置后使用报错,Centos7 使用yum安装MariaDB 10.1(报错缺少依赖的解决情况,报错信息贴在最后)-Go语言中文社区...
  5. Doris入门到精通-阶段一(简介安装使用)
  6. STM32进入Standby模式并唤醒
  7. Excel Application对象应用
  8. 好想与你天长地久,共度岁月
  9. win7系统下,手机投屏到电脑
  10. android逆向公众号,逆向一款微信公众号搜索工具(技术含量极低)