首页 > 编程知识 正文

散点的趋势线是回归线吗,基于回归分析的房价预测模型

时间:2023-05-04 14:07:13 阅读:226486 作者:190

回归是统计学中最有力的工具之一。机器学习监督学习算法分为分类算法和回归算法两 种,其实就是根据类别标签分布类型为离散型、连续性而定义的。回归算法用于连续型分布 预测,针对的是数值型的样本,使用回归,可以在给定输入的时候预测出一个数值,这是对 分类方法的提升,因为这样可以预测连续型数据而不仅仅是离散的类别标签。 回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示, 这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因 变量和自变量之间是线性关系,则称为多元线性回归分析。多元线性回归假定预测值与样本特征间的函数关系是线性的,回归分析的任务,就在于依据样本 X 和 Y 的观察值。去预计函数 h,寻求变量之间近似的函数关系。定义:![在这里插入图片描述](https://img-blog.csdnimg.cn/20190929143207727.png)当中,n=特征数目; xj=每一个训练样本第 j 个特征的值,能够觉得是特征向量中的第 j 个值。 为了方便。记 x0=1。则多变量线性回归能够记为:![在这里插入图片描述](https://img-blog.csdnimg.cn/20190929143247633.png) #-*-coding:utf-8-*-import pandas as pdimport numpy as npimport matplotlib.pyplot as plt#加载数据from sklearn.datasets import load_bostonfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.linear_model import LinearRegression#正规方程求解的线性回归from sklearn.linear_model import SGDRegressor#sgd线性回归,随机梯度下降线性回归from sklearn.linear_model import Ridge#岭回归算法#默认不支持中文,需要配置RC参数plt.rcParams['font.sans-serif']='SimHei'#设置字体之后不支持,需要去设置RC参数更改编码plt.rcParams['axes.unicode_minus']=Falsedef show_res(y_test,y_predict): """ 结果展示 :param x_test: 测试集目标值的真实值 :param y_predict: 预测值 :return: None """ #1、画布 plt.figure() #2、绘图折线图 x=np.arange(0,len(y_test)) res=np.argsort(y_predict) # 以列表推导式的形式来获取x 按照z 排序规则进行排序之后的结果 y_test= [y_test[i] for i in res] y_predict.sort(axis=0)#排序不能用原变量命名 print(2,type(y_predict)) plt.scatter(x, y_test, s=60, c='red', marker='.', alpha=1) plt.plot(x, y_predict, c='green') #plt.plot(x,y_predict) #增加标题 plt.title('房价预测与真实值的走势') #坐标轴 plt.xlabel('x轴') plt.ylabel('房价') #图例 plt.legend(['真实值','预测值']) #3、展示 plt.show()#函数自带数据boston=load_boston()print(boston)#获取tezhengzhifeature=boston['data']feature_names=boston['feature_names']target=boston['target']#将波士顿房价数据保存到本地#将特征值转化为DF# df_feature=pd.DataFrame(feature,columns=feature_names)# #将目标值转化为df# df_target=pd.DataFrame(target,columns=['MEDV'])# #将特征值df与目标值df拼接,在进行保存# df_data=pd.concat((df_feature,df_target),axis=1)# df_data.to_excel('./boston.xlsx',index=False)#拆分数据集-拆分成训练集与测试集,特征值与目标值#测试集占比test_size=0.3#返回值--先特征值(先训练集,在测试集),在目标值(先训练集,在测试集)#random_state=1(True)固定拆分,准确率不同是因为拆分数据的随机性x_train,x_test,y_train,y_test=train_test_split(feature,target,test_size=0.3,random_state=1)print(x_train,x_test,y_train,y_test)#检测缺失值--没有缺失值#检测异常值--没有异常值#目标值不需要标准化,特征值需要标准化stand=StandardScaler()#先计算均值与标准差,在进行转化# x_train=stand.fit_transform(x_train)# x_test=stand.fit_transform(x_test)stand.fit(x_train)#计算指标x_train=stand.fit_transform(x_train)x_test=stand.fit_transform(x_test)#正规方程进行求解的线性回归-适用于特征数据较少的数据#进行构建模型--线性模型--lr=LinearRegression()#训练数据lr.fit(x_train,y_train)#预测数据y_predict=lr.predict(x_test)print(y_predict)#计算准确率score=lr.score(x_test,y_test)#sgd=SGDRegressor()#适用于特征较多,数据量较大的情况#默认的学习率为0.01#如果想要更改学习率--# 1、learning_rate='constant'#2、eta0=学习率#梯度方向--不需要考虑--沿着损失减少的方向#学习率如何设置,设置合适的大小,(0.1,0.01,0.001)#学习率过大会造成梯度爆炸(很少出现),经常出现在复杂神经网络中-#梯度爆炸-》损失、准确率,全变成NAN类型#学习率过小,会造成原地打转,梯度消失--损失不减少#进行自我学习修正的过程#训练数据# sgd.fit(x_train,y_train)# #预测数据# y_predict=sgd.predict(x_test)# print(y_predict)# #计算准确率# score=sgd.score(x_test,y_test)# #获取权重与偏置# weight=sgd.coef_# bias=sgd.intercept_#Ridge()线性回归+L2正则化--在小的数据集上,效果会比LinearRegression准确#L2正则化将权重降为接近0,或者删除无效的特征值rd=Ridge()#训练数据rd.fit(x_train,y_train)#预测数据y_predict=rd.predict(x_test)print(y_predict)#计算准确率score=rd.score(x_test,y_test)print(score)#获取权重与偏置# weight=rd.coef_# bias=rd.intercept_# print(weight,bias,score)# #绘图展示show_res(y_test,y_predict)

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