ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-09-21 09:43:23  阅读:282  来源: 互联网

标签:特征值 基于 predict pyplot feature test train 线性 波士顿


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)

标签:特征值,基于,predict,pyplot,feature,test,train,线性,波士顿
来源: https://blog.csdn.net/ybw_2569/article/details/101095500

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有