手撸大模型-基础篇 简单线性回归模型预测房价

# NumPy Pandas Matplotlib
import numpy as np
import matplotlib.pyplot as plt

'''
双特征,矩阵化
'''

1. Min-Max 归一化及其逆操作

1.1 输入数据归一化

def normalize1(sample, data):
    max_value = np.max(data)
    min_value = np.min(data)
    return (sample - min_value) / (max_value - min_value)

1.2 预测结果去归一化

def d_normalize1(sample, data):
    max_value = np.max(data)
    min_value = np.min(data)
    return sample * (max_value - min_value) + min_value

2. Z-score 标准化及其逆操作

2.1 输入数据归一化

def normalize2(sample, data):
    mean = np.mean(data)
    stds = np.std(data)
    return (sample - mean) / stds

2.2 预测结果去归一化
def d_normalize2(sample, data):
    mean = np.mean(data)
    stds = np.std(data)
    return sample * stds + mean

3. 模型定义

def model(X, W, b):
    return  X@W + b

4. 损失函数
使用均方误差(MSE)作为损失函数:
def loss_func(predict, label):
    return (predict - label)**2

5. 主程序
if __name__ == "__main__":
    np.random.seed(17)

    prices_raw = np.arange(37294, 87294, 5000) + np.random.randn(10)*3000
    years_raw  = np.arange(2014, 2024)
    areas_raw  = np.arange(80, 140, 6) + np.random.randn(10)

    # X = np.vstack((areas_raw, years_raw)).T

 5.1 数据标准化
    prices = normalize2(prices_raw, prices_raw)
    years  = normalize2(years_raw, years_raw)
    areas  = normalize2(areas_raw, areas_raw)

    X = np.vstack((areas, years)).T

 5.2 模型初始化与训练参数设置

  • 设置训练周期(epoch)为 100。

  • 模型输入特征维度为 2,输出特征维度为 1。

  • 初始化权重矩阵 W 为全零矩阵,偏置 b 为 0。

  • 设置学习率 lr 为 0.01。

  • 设定批量大小 batch_size 为 3(小批量梯度下降)。

    epoch = 100
    in_features  = 2
    out_features = 1
    W = np.zeros((in_features, out_features))
    b = 0.

    lr = 0.01

    batch_size = 3
 5.3 小批量梯度下降训练循环

    for e in range(epoch):

        cursor = 0
        while cursor <= len(X):
            actual_batchsize = min(len(X)-cursor, batch_size)
            batch_inputs = X[cursor: cursor + actual_batchsize]
            batch_labels = prices[cursor: cursor + actual_batchsize].reshape(actual_batchsize, 1)

            predict = model(batch_inputs, W, b)

            loss = loss_func(predict, batch_labels)

            G = 2*(predict - batch_labels) / actual_batchsize
            
            dW = batch_inputs.T @ G
            db = G

            W -= lr*dW
            b -= lr*db
            b = np.mean(b)
            cursor += batch_size
        print("Loss: {}".format(loss))

5.4 预测功能

    inputs = np.array((normalize2(90, areas_raw), normalize2(2025, years_raw))).reshape(1, 2)
    predict = model(inputs, W, b)
    predict = d_normalize2(predict, prices_raw)
    
    pass

6. 完整代码 

# -*- coding: utf-8 -*-
# NumPy Pandas Matplotlib
import numpy as np
import matplotlib.pyplot as plt'''
双特征,矩阵化
'''def normalize1(sample, data):max_value = np.max(data)min_value = np.min(data)return (sample - min_value) / (max_value - min_value)def d_normalize1(sample, data):max_value = np.max(data)min_value = np.min(data)return sample * (max_value - min_value) + min_valuedef normalize2(sample, data):mean = np.mean(data)stds = np.std(data)return (sample - mean) / stdsdef d_normalize2(sample, data):mean = np.mean(data)stds = np.std(data)return sample * stds + meandef model(X, W, b):return X@W + bdef loss_func(predict, label):return (predict - label)**2if __name__ == "__main__":np.random.seed(17)prices_raw = np.arange(37294, 87294, 5000) + np.random.randn(10)* 3000years_raw  = np.arange(2014, 2024)areas_raw  = np.arange(80, 140, 6) + np.random.randn(10)# X = np.vstack((areas_raw, years_raw)).Tprices = normalize2(prices_raw, prices_raw)years  = normalize2(years_raw, years_raw)areas  = normalize2(areas_raw, areas_raw)X = np.vstack((areas, years)).Tepoch = 100in_features  = 2out_features = 1W = np.zeros((in_features, out_features))b = 0.lr = 0.01batch_size = 3for e in range(epoch):cursor = 0while cursor <= len(X):actual_batchsize = min(len(X)- cursor, batch_size)batch_inputs = X[cursor: cursor + actual_batchsize]batch_labels = prices[cursor: cursor + actual_batchsize].reshape(actual_batchsize, 1)predict = model(batch_inputs, W, b)loss = loss_func(predict, batch_labels)G = 2* ( predict - batch_labels) / actual_batchsizedW = batch_inputs.T @ Gdb = GW -= lr* dWb -= lr* dbb = np.mean(b)cursor += batch_sizeprint("Loss: {}".format(loss))inputs = np.array((normalize2(90, areas_raw), normalize2(2025, years_raw))).reshape(1, 2)predict = model(inputs, W, b)predict = d_normalize2(predict, prices_raw)pass

7. 运行结果

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用UA-SPEECH和TORGO数据库验证自动构音障碍语音分类方法

使用UA-SPEECH和TORGO数据库验证自动构音障碍语音分类方法 引言 原文:On using the UA-Speech and TORGO databases to validate automatic dysarthric speech classification approaches 构音障碍简介 构音障碍是一种由于脑损伤或神经疾病(如脑瘫、肌萎缩侧索硬化症、帕金森…

React底层原理详解

React中Element&Fiber对象、WorkInProgress双缓存、Reconcile&Render&Commit、第一次挂载过程详解 在面试中介绍React底层原理时&#xff0c;需遵循逻辑清晰、层次分明、重点突出的原则&#xff0c;结合技术深度与实际应用场景。以下是结构化回答模板&#xff1a;…

el-table修改表格颜色

文章目录 一、el-table属性修改表格颜色1.1、header-row-class-name修改表头行颜色1.2、header-row-style修改表头样式1.3、row-class-name修改行颜色 二、el-table-column属性修改表格颜色2.1、class-name修改整列的颜色2.2、label-class-name修改列标题颜色 本文讲解vue修改e…

Graphics View画一个可调速的风机(pyqt)

效果如图&#xff1a; 风机具备调节转速的功能&#xff0c;转速通过扇叶旋转的快慢来区别&#xff0c;共分为四档&#xff0c;其中零档为静止状态&#xff0c;而一、二、三档则依次增加转速。在代码中&#xff0c;BlowerWrapper 类包含了可旋转的扇叶、风机外框以及选项三个主要…

SP脏迹Dirt生成器

常用生成器之一 用于模型表面生成污垢和脏迹 添加一个填充图层 添加黑色遮罩 添加生成器 选择Dirt 调整强度 如果UV有接缝就把Use Triplanar打开

AnyDesk 远程桌面控制软件 v9.0.2

AnyDesk 是一款功能强大的跨平台远程桌面控制软件。它支持 Windows、MacOS、Linux 和 Android 系统&#xff0c;同时 iOS 也在其支持范围内。其主要功能包括远程桌面控制&#xff0c;用户能远程访问其他计算机或移动设备&#xff0c;用于远程协作、支持和教授等&#xff0c;可实…

关于延迟任务线程池,Java提供的ScheduledThreadPoolExecutor,Spring提供的ThreadPoolTaskScheduler

今天讲解定时任务、延迟任务的线程池使用方式&#xff1a; 1、从 java 角度 2、从 Spring 框架角度 文章目录 Java提供&#xff1a;ScheduledExecutorService接口&#xff08;创建延迟任务线程池&#xff09;① 用法1&#xff1a;1. 重写afterExecute方法2. .schedule()方法调度…

Python PDF文件拆分-详解

目录 使用工具 将PDF按页数拆分 将PDF的每一页拆分为单独的文件 将PDF按指定页数拆分 根据页码范围拆分PDF 根据指定内容拆分PDF 将PDF的一页拆分为多页 在日常生活中&#xff0c;我们常常会遇到大型的PDF文件&#xff0c;这些文件可能难以发送、管理和查阅。将PDF拆分成…

链表的概念及功能实现

一、链表之单向链表 前面我们使用顺序储存结构实现的顺序表&#xff0c;虽然查询的时候很快&#xff0c;但在进行元素的增加或者删除的时候:比较麻烦&#xff0c;需要你去移动大量的元素把数据删除或者增加。 链表里的数据是以结点方式来表示的&#xff0c;每一个结点的组成是…

【Python 语法】算法合集

查找二分查找代码大 O 表示法 广度优先搜索代码 狄克斯特拉算法 递归递归调用栈 分而治之&#xff08;divide and conquer&#xff0c;D&C&#xff09;贪心教室调度问题背包问题集合覆盖问题 动态规划背包问题旅游行程最优化 遇到问题时&#xff0c; 如果不确定该如何 高效…

Android 应用开发中,证书、签名和加固简述

在 Android 应用开发中&#xff0c;证书、签名和加固是保障应用安全和完整性的重要机制&#xff0c;各自作用如下&#xff1a; 一、应用证书&#xff08;Digital Certificate&#xff09; 作用&#xff1a; 身份标识&#xff1a;证书包含开发者的公钥、组织信息等&#xff0c;用…

在什么情况下需要使用光谱相机呢?

1.需要捕捉不可见光信息时 光谱相机不仅能捕捉可见光&#xff0c;还能记录红外、紫外等波段的光谱信息。以下场景尤其适用&#xff1a; 环境监测&#xff1a;检测水质、空气污染物等肉眼无法观察的物质。 农业监测&#xff1a;分析植物的近红外反射率&#xff0c;判断作物健…

一周一个Unity小游戏2D反弹球游戏 - 球板的发球

前言 本文将实现当游戏开始时球在球板上,且不具备物理性,在Windows平台上通过点击屏幕来球发射,安卓平台上当手指触摸到屏幕上时进行发球,并此时开始具备物理性。 发球逻辑 首先在球板上创建一个球的发射点,新建一个空的游戏物体,并命名为BallPoint,并将其作为SpringBoa…

【算法】图论 —— Floyd算法 python

洛谷 B3647 【模板】Floyd 题目描述 给出一张由 n n n 个点 m m m 条边组成的无向图。 求出所有点对 ( i , j ) (i,j) (i,j) 之间的最短路径。 输入格式 第一行为两个整数 n , m n,m n,m&#xff0c;分别代表点的个数和边的条数。 接下来 m m m 行&#xff0c;每行三…

从实例出发,讲解BLE专业调试工具nRF Connect

nRF Connect是NORDIC Semiconductor提供的一套强大的低功耗蓝牙&#xff08;BLE&#xff09;开发工具和应用程序&#xff0c;本文从两个示例着手分析&#xff1a;iBeacon和Eddystone协议的信标Beacon 前置知识&#xff1a;什么是信标Beacon&#xff1f; 信标&#xff08;Beacon…

[STM32]从零开始的STM32 BSRR、BRR、ODR寄存器讲解

一、前言 学习STM32一阵子以后&#xff0c;相信大家对STM32 GPIO的控制也有一定的了解了。之前在STM32 LED的教程中也教了大家如何使用寄存器以及库函数控制STM32的引脚从而点亮一个LED&#xff0c;之前的寄存器只是作为一个引入&#xff0c;并没有深层次的讲解&#xff0c;在教…

使用Truffle、Ganache、MetaMask、Vue+Web3完成的一个简单区块链项目

文章目录 概要初始化Truffle项目创建编写合约编译合约配置Ganache修改truffle-config.js文件编写迁移文件部署合约使用Truffle 控制台使用MetaMask和VueWeb3与链交互 概要 使用Truffle、Ganache、MetaMask、VueWeb3完成的一个简单区块链项目。 初始化Truffle项目 安装好truf…

在线会议时, 笔记本电脑的麦克风收音效果差是为什么

背景 最近在线面试. 使用腾讯会议或者飞书, 戴耳机参加在线面试, 遇到好几个面试官说我的音质不好. 一直没在意, 后来反思, 应该是电脑哪里出了问题. 排查 先买了一副品牌有线耳机, 测试后本地录制的声音仍然品质很差去掉耳机延长线后, 麦克风品质仍然很差最终找到答案, 原…

通过百度构建一个智能体

通过百度构建一个智能体 直接可用,我不吝啬算力 首先部署一个模型,我们选用deepseek14 构建智能体思考步骤,甚至多智能体; from openai import OpenAIclass Agent:def __init__(self, api_key, base_url, model

解决“request returned Internal Server Error for API route and version xxx”错误

一、问题描述 ragflow/README_zh.md at main infiniflow/ragflowhttps://github.com/infiniflow/ragflow/blob/main/README_zh.md 当我们使用Docker部署ragflow,确认服务器状态时,提示“request returned Internal Server Error for API route and version http://%2F%2F.%…