线性回归模型用于波士顿房价预测的(普通VSsklearn库方法)比较

在这里插入图片描述

努力是为了不平庸~

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰

线性回归是一种统计学习方法,用于建立一个线性模型来预测因变量与自变量之间的关系。它假设因变量与自变量之间存在线性关系,并通过最小化残差平方和来拟合数据。

线性回归模型用于波士顿房价预测的示例是一个经典的应用场景。在这个问题中,我们希望根据一些特征(如房间数量、犯罪率、学生-教师比例等)来预测波士顿地区的房价。

比如利用sklearn库中的方法,我们可以实现线性回归模型的三个主要模块:数据准备、模型训练和预测。

1. 数据准备:
   首先,我们需要收集波士顿房价的相关数据集,如sklearn库中的波士顿房价数据集(load_boston)。
   然后,我们将数据集分为特征(X)和目标(y),其中X包含所有的自变量特征,y包含对应的因变量(房价)。
   我们可以通过数据预处理的方式,如标准化或归一化,对数据进行必要的转换和缩放。

2. 模型训练:
   使用sklearn库中的线性回归模型(LinearRegression)进行模型训练。
   调用fit()方法,将特征数据X和目标数据y作为输入,拟合线性回归模型。
   在训练过程中,模型会自动计算最佳的回归系数以及截距,以最小化残差平方和。

3. 预测:
   使用训练好的线性回归模型进行预测。
   调用predict()方法,将待预测的特征数据作为输入,得到预测结果。
   预测结果可以用于判断波士顿地区的房价。

先来看看线性回归相关模拟

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# 1、线性回归模拟
## 1.1 读取模拟数据ex0_1.csv
df = pd.read_csv("ex0_1.csv")
data = df.values
X = data[:, 0].reshape((-1, 1))
y = data[:, 1].reshape((-1, 1))

## 1.2 绘制散点图
plt.scatter(X, y)
plt.xlabel('X')
plt.ylabel('y')
plt.title('Scatter Plot')
plt.show()

## 1.3 正规方程解 inv(X.T * X ) * X.T * y
X_b = np.c_[np.ones((len(X), 1)), X]  # 添加偏置项
theta = np.linalg.inv(X_b.T @ X_b) @ X_b.T @ y

## 1.4 绘制拟合的直线
plt.scatter(X, y)
plt.plot(X, X_b @ theta, color='red')  # 使用X_b计算预测值
plt.xlabel('X')
plt.ylabel('y')
plt.title('Fitted Line')
plt.show()

## 1.5 函数形式
intercept, slope = theta[0][0], theta[1][0]
print("拟合函数形式为:y = {:.2f} + {:.2f}x".format(intercept, slope))

## 1.6 利用梯度下降法求
def gradient_descent(X, y, theta, alpha, num_iters):
    m = len(y)
    for iter in range(num_iters):
        h = X.dot(theta)
        loss = h - y
        gradient = X.T.dot(loss) / m
        theta -= alpha * gradient
    return theta

alpha = 0.01  # 学习率
num_iters = 1000  # 迭代次数
theta = np.zeros((X_b.shape[1], 1))  # 初始化参数
theta = gradient_descent(X_b, y, theta, alpha, num_iters)
print("利用梯度下降法求得的参数为:", theta)


 下面我们使用两种方法来实现波士顿房价预测

# -*- coding: utf-8 -*-
import pickle
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import numpy as np
import matplotlib.pyplot as plt

# 2.1 数据准备
data = pickle.load(open("data.save","rb"))
X = data[:,:-1]
y = data[:,-1]
print(data)

# 数据划分
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=420)

# 2.3 调用LR函数
def LR(X, y):
    ones = np.ones((X.shape[0], 1))
    X_ones = np.hstack((ones, X))
    XT = X_ones.T
    XTX = np.dot(XT, X_ones)
    XTX_1 = np.linalg.inv(XTX)
    XTX_1XT = np.dot(XTX_1, XT)
    W = np.dot(XTX_1XT, y)
    return W

W=LR(X_train,y_train)

# 2.4 预测
ones = np.ones((X_test.shape[0],1))
X_test_ones=np.hstack((ones,X_test))
y_predict=np.dot(X_test_ones,W)

# 2.5 评估
print("均方根误差:",mean_squared_error(y_test,y_predict))


plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文字体为黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号无法正常显示的问题

# 绘制房间数量与房屋价格的关系
plt.scatter(X_train[:, 5], y_train, label='训练数据')
plt.scatter(X_test[:, 5], y_test, label='测试数据')
plt.xlabel('每个住宅的平均房间数量')
plt.ylabel('房价')
plt.title('房间数量与价格的关系')
plt.legend()
plt.show()

 注意,这里是直接导入数据集,因为高版本python版本不适配

下面则是采用另外的导入方法

# -*- coding: utf-8 -*-
# 3.利用sklearn中的方法实现
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#导入数据集
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]

#划分数据集
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=38)

## 3.1 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

## 3.2 预测
y_pred = model.predict(X_test)

## 3.3 评估
mse = mean_squared_error(y_test, y_pred)
print("均方根误差:", mse)
r2 = model.score(X_test, y_test)
print("拟合优度:", r2)


plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文字体为黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号无法正常显示的问题

# 绘制房间数量与房屋价格的关系
plt.scatter(X_train[:, 5], y_train, label='训练数据')
plt.scatter(X_test[:, 5], y_test, label='测试数据')
plt.xlabel('每个住宅的平均房间数量')
plt.ylabel('房价')
plt.title('房间数量与价格的关系')
plt.legend()
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/148848.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

移远EC600U-CN开发板 11.15

制作一个简单UI: 1."端口设置"模块 *效果图 *代码 def backEvent(evt): #返回主界面code evt.get_code() if code lv.EVENT.CLICKED:lv.scr_load(mainInterface)def popUpEvent(evt): #弹窗提醒code evt.get_code()if code lv.EVENT.CL…

YOLOv8改进实战 | 更换主干网络Backbone(五)之2023最新轻量化主干网络VanillaNet,深度学习中极简主义的力量

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

HackTheBox-Starting Point--Tier 2---Unified

文章目录 一 Unified 测试过程1.1 打点1.2 权限获取1.3 权限提升 二 题目 一 Unified 测试过程 1.1 打点 1.端口扫描 nmap -sV -sC 2.访问8080端口 页面跳转到:https://10.129.96.149:8443/manage/account/login?redirect%2Fmanage   观察到版本号为unifi 6.4.5…

【LeetCode刷题-滑动窗口】--1423.可获得的最大点数

1423.可获得的最大点数 思路: 数组cardPoints的长度为n,由于只能从开头和末尾拿k张卡牌,所以最后剩下的必然是连续的n-k张卡牌,可以通过求出剩余卡牌点数之和的最小值,来求出拿走卡牌点数之和的最大值 算法&#xff…

antd中的form表单数据不更新

antd中的form表单 initialValue导致数据不更新问题 理解 : initialValue就是所谓的defaultValue,只会在第一次赋值的时候改变,却又有一些不同,因为 initialValue又会因其他改动而改变。 解决: form.resetFields();

NumLevels

NumLevels:输入参数,最大的金字塔层数。默认auto,范围【0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, auto】。 AngleStart:输入参数,输入匹配时的起始角度。默认-0.39,建议值【 -3.14, -1.57, -0.79, -0.39, -0.20,…

旅游业做服务预约小程序的效果

随着大环境放开,我国旅游业恢复了以往的热闹景象,人们仿佛看到了刺激性消费,各地景区的日接客量多且增加中,各旅行社又开始了忙碌的工作。 虽然目前大环境因素下,行业增长迅速,但也不得不面临一些固有的困…

Leetcode_203.移除链表元素—C语言

目录 ❣️1.题目❣️ ❣️2.解答❣️ 💞方法一:暴力法 💞方法二: 尾插法 💞方法三:哨兵位法 ❣️1.题目❣️ 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.va…

Axure9 基本操作(一)

产品经理零基础入门(四)Axure 原型图教程,2小时学会_哔哩哔哩_bilibili Axure 9 从入门到精通全集,自学必备_哔哩哔哩_bilibili 1. 页面对应页面个数,概要对应每个页面的具体内容 2. 文件类型 3. 备用间隔改为5分钟 …

智能客服外包与传统呼叫中心人力外包对比有哪些优势?

随着人工智能技术的飞速发展,智能客服外包服务为企业提供了更高效、更智能的客户服务解决方案,越来越多的企业更愿意选择智能客服外包服务。与传统呼叫中心人力外包相比,智能客服外包有哪些优势呢? 减轻人力资源压力 智能客服系统…

Kafka 的应用场景

Kafka 是一个开源的分布式流式平台,它可以处理大量的实时数据,并提供高吞吐量,低延迟,高可靠性和高可扩展性。 Kafka 最初是为分布式系统中海量日志处理而设计的。它可以通过持久化功能将消息保存到磁盘,并让消费者按…

竞赛选题 深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的视频多目标跟踪实现 …

Loguru:Python中强大的日志库

目录 一、Loguru的安装 二、Loguru的使用 2.1 日志级别的设置 2.2 日志的输出格式 2.3 日志轮转与压缩 2.4 日志的彩色输出 2.5 在生产环境中使用Loguru 2.6 日志的过滤和搜索 2.7 日志的自定义格式化 2.8 日志的上下文信息 2.9 日志的异步处理 2.10 日志的搜索和筛…

数据库事务相关问题

1. 什么是数据库事务? 事务,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。 假如A转账给B 100 元,先从A的账户里扣除 100 元,再在 B 的账户上加上 100 …

一道 python 数据分析的题目

python 数据分析的题目。 做题方法:使用 pandas 读取数据,然后分析。 知识点:pandas,正则表达式,py知识。 过程:不断使用 GPT,遇到有问题的地方自己分析,把分析的结果告诉 GPT&am…

Android修行手册 - 阴影效果的几种实现以及一些特别注意点

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列点击跳转>ChatGPT和AIGC 👉关于作者 专…

文生图算法评价

1.sd_eval stable diffusion模型评价框架_Kun Li的博客-CSDN博客文章浏览阅读418次。作者的思路我认为也是没问题,和我看法基本一致,生成式的sd不需要那么多定向的模型,提供强泛化能力的基础模型只需要几个就可以,而外挂的能力多…

【PyQt小知识 - 2】:QTextEdit内容的更新和获取、隐藏或显示滚动条、光标插入文本、文本自适应移动

文章目录 QTextEdit更新和获取内容隐藏或显示滚动条光标插入文本文本自适应移动 QTextEdit 更新和获取内容 更新:QTextEdit().setText(text) 或 QTextEdit().setPlainText(text) 获取:QTextEdit().toPlainText() setText()和setPlainText()的区别&…

力扣刷题篇之栈与队列3

系列文章目录 前言 本系列是个人力扣刷题汇总,本文是栈与队列。刷题顺序按照[力扣刷题攻略] Re:从零开始的力扣刷题生活 - 力扣(LeetCode) ​ 一、表达式求值 150. 逆波兰表达式求值 - 力扣(LeetCode) 方…

Harmony SDK API 版本 与 Harmony OS 版本对照表,及如何查看鸿蒙手机Harmony SDK Api 版本

Harmony SDK API 版本 与 Harmony OS 版本对照表 Harmony OSHarmony SDK APIHarmony 4.09Harmony 3.19Harmony 3.08Harmony 3.0 pre7Harmony 2.2.06Harmony 2.1.05Harmony 2.04 具体到真机上可能会有差异,如我的手机OS版本是2.0,按照上面表应该是4&…