基于线性回归的波士顿房价预测

匿名 (未验证) 提交于 2019-12-03 00:09:02
import numpy import pandas from matplotlib import pyplot from sklearn.linear_model import  Ridge # 岭回归---线性回归+ L2正则化【L2正则:将不重要的权重减少到几乎为0】 from sklearn.datasets import load_boston  # 数据 from sklearn.linear_model import SGDRegressor # sgd线性回归---随机梯度下降线性回归 from sklearn.preprocessing import StandardScaler  # 标准化 from  sklearn.linear_model import LinearRegression # 正规方程求解的线性回归 from sklearn.model_selection import train_test_split # 训练集 特征值拆分   def show_res(y_text,y_predict):     '''     结果展示     :param y_text: 测试集目标值真实值     :param y_predict: 预测值     :return:     '''      # 画布     pyplot.figure()      # 默认不支持中文,需要配置RC 参数     pyplot.rcParams['font.sans-serif'] = 'SimHei'     # 设置字体之后不支持负号,需要去设置RC参数更改编码     pyplot.rcParams['axes.unicode_minus'] = False       # 绘图     # 折线图     x = numpy.arange(0,len(y_predict))      pyplot.plot(x,y_test,marker='*')     pyplot.plot(x,y_predict,marker='.' )       # 增加标题     pyplot.title('房价预测与真实值的走势')      # 增加横轴,纵轴名称     pyplot.xlabel('x')     pyplot.ylabel('房价')      # 图例     pyplot.legend(['真实值','预测值'])      # 展示     pyplot.show()     # 加载数据 data = load_boston()  # 获取特征值 feature = data['data']  # 特征值  target = data['target'] #目标值  feature_names = data['feature_names']  # 特征值的列名  print(feature) print(target) print(feature_names) print('*='*40)  # # 将特征值转化为df # df_feature = pandas.DataFrame(feature,) # # # 将目标值转化为df # df_target = pandas.DataFrame(target) # # # 拼接特征值 和 目标值 # df_data = pandas.concat((df_feature,df_target),axis=1) # # # 保存 # df_data.to_excel('data/boston_data.xlsx',index=False)   # 拆分数据集  -- 拆分成训练集与测试集,特征值与目标值 # feature,target,test_size=0.3 特征值 、目标值、测试集占比 # 返回值---先特征值(先训练集,再测试集),再目标值(先训练集,再测试集) x_train,x_test,y_train,y_test = train_test_split(feature,target,test_size=0.3)   # 进行标准化---目标值是具体的房价,特征值是各个特征,--量级减小--W量级变大 # 目标值不需要标准化--特征值需要标准化 stand = StandardScaler() # 先计算均值与标准差,在进行转化 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)  # 计算准确率 score = lr.score(x_test,y_test)  # 获取权重和偏执 weight = lr.coef_ bias = lr.intercept_  # 绘图展示 show_res(y_test,y_predict) '''  ''' # 适合用于 特征较多,数量极大的情况 # 进行自我学习修正的过程 --- 梯度方向,与学习率 #默认的学习率 为0.01 # 如果想要更改学习率  ---添加参数 1,learning_rate='constant' 2,eta0 = 学习率 # 梯度方向   ----- 无需考虑 -- 沿着损失减小的方向 # 学习率 -- 应该设置在合适的位置 0.1 0.01 0.001 不可过大或者过小 # 过大 会造成梯度爆炸,梯度爆炸经常出现复杂神经网络中----梯度爆炸-->损失、准确率 全变成NAN类型 # 过小   如果过线,会造成原地打转,此时梯度消失,---损失不减小,一直那么大  # 进行构建模型 -- 线性模型 sgd = SGDRegressor()  # 训练数据 sgd.fit(x_train,y_train)  # 预测数据 y_predict = sgd.predict(x_test)  # 计算准确率 score = sgd.score(x_test,y_test)  # 获取权重和偏执 weight = sgd.coef_ bias = sgd.intercept_   # 展示 show_res(y_test,y_predict) '''   # 线性回归+L2正则化 ---- 再小的数据集上,效果会比LinearRegression效果好一些   # 进行构建模型 -- 线性模型 rd = Ridge()  # 训练数据 rd.fit(x_train,y_train)  # 预测数据 y_predict = rd.predict(x_test)  # 计算准确率 score = rd.score(x_test,y_test)  # 获取权重和偏执 weight = rd.coef_ bias = rd.intercept_   # 展示 show_res(y_test,y_predict) 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!