首页 > 编程知识 正文

多元线性回归参数估计公式,多元线性回归分析房价

时间:2023-05-05 13:39:23 阅读:26386 作者:964

目录

一.多元线性回归

1 .定义

2 .房价问题分析

利用Excel进行多元回归预测

1 .导入数据

2 .完善数据集

1 .删除数据偏差

2 .非数据值的处理

3 .基于3.Excel的线性回归

三.在jupyter sklearn上练习线性回归

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

五.总结

一.多元线性回归1 .定义

在回归分析中,如果有两个以上的参数,则称为多元回归。 事实上,一个现象经常与多个因素相关联,通过多个自变量的最佳组合来预测或估计因素变量比仅用一个自变量来预测或估计更有效和现实。 因此,多元线性回归比一元线性回归的实用意义更大。

2 .房价问题分析预测未来房价,一定程度上影响着社会经济的发展。 从广义上讲,准确的房价预测有助于国家对市场房价走势的宏观调控,从小而言,未来房价预测是企业战略修订的一部分,对消费者来说,房价预测对个体经济的合理修订起到了积极的作用。 房价与多因素有关,房价与影响房价的几个因素呈线性关系,选择多元线性回归模型研究该问题比较合适。

在本次课题研究中,通过对某一时期某一地区已售房价数据的线性回归分析,探索影响房价高低的主要因素,并分析这些影响因素的影响程度,利用分析后的数据,预测未来房价的趋势和方向。

2 .使用excel进行多元回归预测1 .导入数据

2 .维护数据集1 .删除数据偏差会删除不正确的数据

beedroom中存在0的数值明显是不合理的,所以筛选后删除

框选择并删除即可

xt-align:center;">

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做线性回归

输出结果

 通过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做线性回归练习

未处理数据的代码

#引入包import pandas as pdimport numpy as npimport seaborn as snsfrom sklearn import datasetsfrom 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']]# xdata_y=df['price']# y# 进行多元线性回归model=LinearRegression()l_model=model.fit(data_x,data_y)print('参数权重')print(model.coef_)print('模型截距')print(model.intercept_)

输出

处理数据后的代码

#引入包import pandas as pdimport numpy as npimport seaborn as snsfrom sklearn import datasetsfrom 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 分数点,返回异常值索引与所在数据框 """ """ params data: 完整数据 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 pdimport numpy as npimport seaborn as snsfrom sklearn import datasetsfrom sklearn.linear_model import LinearRegressionfrom 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()

输出结果

查看相关性

def vif(df, col_i): """ df: 整份数据 col_i:被检测的列名 """ cols = list(df.columns) cols.remove(col_i) cols_noti = cols formula = col_i + '~' + '+'.join(cols_noti) r2 = ols(formula, df).fit().rsquared return 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

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

输出结果

 五.总结

通过用线性回归预测房价,理解了误差数据和非合理数据的处理的方法。

六.参考文献

1.多元线性回归算法预测房价_平行叶子的博客-CSDN博客

2.多元线性回归分析_junseven164的博客-CSDN博客

3.数据预处理:数据探索与数据清洗(缺失值+异常值)、数据集成+数据规约+数据变换 - 许愿瓶666666 - 博客园

4.特征共线性问题_碧蓝的自行车的博客-CSDN博客

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。