机器学习之利用线性回归预测波士顿房价和可视化分析影响房价因素实战(python实现 附源码 超详细)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 机器学习之利用线性回归预测波士顿房价和可视化分析影响房价因素实战(python实现 附源码 超详细)

数据集和源码请点赞关注收藏后评论区留下QQ邮箱或者私信

线性回归是利用最小二乘函数对一个或多个因变量之间关系进行建模的一种回归分析,这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个变量的称为一元回归,大于一个变量的情况叫做多元回归。利用线性回归,我们可以预测一组特定数据是否在一定时期内增长或下降。

接下来以线性回归预测波士顿房价进行实战解析

线性回归代码如下

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
# 读数据
data = np.loadtxt(boston_house_price.csv', float, delimiter=",", skiprows=1)
X, y = data[:, :13], data[:, 13]
# Z-score归一化
for i in range(X.shape[1]):
    X[:, i] = (X[:, i] - np.mean(X[:, i])) / np.std(X[:, i])
# 划分训练集、测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 将训练集、测试集改为列向量的形式
y_train = y_train.reshape((-1, 1))
y_test = y_test.reshape((-1, 1))
# 初始化模型参数
def initialize_params(feature_num):
    w=np.random.rand(feature_num,1)
    b=0
    return w,b
def forward(X, y, w, b):
    num_train=X.shape[0]
    y_hat=np.dot(X,w)+b
    loss=np.sum((y_hat-y)**2)/num_train
    dw=np.dot(X.T,(y_hat-y))/num_train
    db=np.sum((y_hat-y))/num_train
    return y_hat,loss,dw,db
# 定义线性回归模型的训练过程
def my_linear_regression(X, y, learning_rate, epochs):
    loss_his=[]
    w,b=initialize_params(X.shape[1])
    for i in range(epochs):
        y_hat,loss,dw,db=forward(X,y,w,b)
        w+=-learning_rate*dw
        b+=-learning_rate*db
        loss_his.append(loss)
        if i%100==0:
            print("epochs %d loss %f"%(i,loss))
    return loss_his,w,b
# 线性回归模型训练
loss_his, w, b = my_linear_regression(X_train, y_train, 0.01, 5000)
# 打印loss曲线
plt.plot(range(len(loss_his)), loss_his, linewidth=1, linestyle="solid", label="train loss")
plt.show()
# 打印训练后得到的模型参数
print("w:", w, "\nb", b)
# 定义MSE函数
def MSE(y_test, y_pred):
    return np.sum(np.square(y_pred - y_test)) / y_pred.shape[0]
# 定义R系数函数
def r2_score(y_test, y_pred):
    # 测试集标签均值
    y_avg = np.mean(y_test)
    # 总离差平方和
    ss_tot = np.sum((y_test - y_avg) ** 2)
    # 残差平方和
    ss_res = np.sum((y_test - y_pred) ** 2)
    # R计算
    r2 = 1 - (ss_res / ss_tot)
    return r2
# 在测试集上预测
y_pred = np.dot(X_test, w) + b
# 计算测试集的MSE
print("测试集的MSE: {:.2f}".format(MSE(y_test, y_pred)))
# 计算测试集的R方系数
print("测试集的R2: {:.2f}".format(r2_score(y_test, y_pred)))

损失值随训练次数的变化图如下 可以看出符合肘部方法

接下来可视化分析影响房价的因素

"""

各个字段的含义:

   CRIM     犯罪率

   ZN       住宅用地所占比例

   INDUS    城镇中非商业用地所占比例

   CHAS     是否处于查尔斯河边

   NOX      一氧化碳浓度

   RM       住宅房间数

   AGE      1940年以前建成的业主自住单位的占比

   DIS      距离波士顿5个商业中心的加权平均距离

   RAD      距离高速公路的便利指数

   TAX      不动产权税

   PTRATIO  学生/教师比例

   B        黑人比例

   LSTAT    低收入阶层占比

   MEDV     房价中位数

"""

可视化结果如下

可视化部分代码如下

import  pandas as pd
import  numpy as np
import  seaborn as sns
import  matplotlib.pyplot as plt
df=pd.read_csv(boston_house_price.csv',encoding='utf-8')
print(df.head())
df.describe()
df['medv'].hist()
sns.boxplot(x=df['medv'])#有点问题 要加个x传参
plt.scatter(df['rm'],df['medv'])
def box_plot_outliers(df,s):
    q1,q3=df[s].quantile(0.25),df[s].quantile(0.75)
    iqr=q3-q1
    low,up=q1-1.5*iqr,q3+1.5*iqr
    df=df[(df[s]>up)|(df[s]<low)]
    return df
df_filter=box_plot_outliers(df,'rm')
df_filter.mean()
plt.scatter(df['dis'],df['medv'])
plt.scatter(df['rad'],df['medv'])
plt.scatter(df['b'],df['medv'])
df.corr()
plt.style.use({'figure.figsize':(15,10)})
df.hist(bins=15)
sns.boxplot(data=df)
plt.figure(figsize=(12,22))
for i in range(13):
    plt.subplot(4,4,(i+1))
    plt.scatter(df.iloc[:,i],df['medv'])
    plt.title('{}-price scatter'.format(df.columns[i]))
    plt.xlabel(df.columns[i])
    plt.ylabel('boston house price')
plt.show()
plt.tight_layout()

数据集和源码请点赞关注收藏后评论区留下QQ邮箱或者私信

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
9天前
|
数据采集 XML 存储
Python爬虫实战:一键采集电商数据,掌握市场动态!
这个爬虫还挺实用,不光能爬电商数据,改改解析规则,啥数据都能爬。写爬虫最重要的是要有耐心,遇到问题别着急,慢慢调试就成。代码写好了,运行起来那叫一个爽,分分钟几千条数据到手。
|
9天前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
|
9天前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
9天前
|
存储 监控 API
1688平台API接口实战:Python实现店铺全量商品数据抓取
本文介绍如何使用Python通过1688开放平台的API接口自动化抓取店铺所有商品数据。首先,开发者需在1688开放平台完成注册并获取App Key和App Secret,申请“商品信息查询”权限。接着,利用`alibaba.trade.product.search4trade`接口,构建请求参数、生成MD5签名,并通过分页机制获取全量商品数据。文中详细解析了响应结构、存储优化及常见问题处理方法,还提供了竞品监控、库存预警等应用场景示例和完整代码。
|
9天前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建微服务架构
本文深入探讨了 Python 中的微服务架构,介绍了 Flask、FastAPI 和 Nameko 三个常用框架,并通过实战项目帮助读者掌握这些技术。每个框架都提供了构建微服务的示例代码,包括简单的 API 接口实现。通过学习本文,读者将能够使用 Python 构建高效、独立的微服务。
|
4月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
230 6
|
18天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。
|
14天前
|
人工智能 编解码 算法
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
|
2月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
434 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
25天前
|
机器学习/深度学习 人工智能 自然语言处理
解锁机器学习的新维度:元学习的算法与应用探秘
元学习作为一个重要的研究领域,正逐渐在多个应用领域展现其潜力。通过理解和应用元学习的基本算法,研究者可以更好地解决在样本不足或任务快速变化的情况下的学习问题。随着研究的深入,元学习有望在人工智能的未来发展中发挥更大的作用。

热门文章

最新文章