梯度下降法实现线性回归, 实例---预测波士顿房价

2023-11-05

本文先手动实现一个线性回归模型, 然后用sklearn的线性回归模型作对比

import pandas as pd
df = pd.read_csv('house_data.csv')  #数据集可到网上下载,波士顿房价
df.head()

Out[1]:

  CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX PTRATIO B LSTAT MEDV
0 0.00632 18.0 2.31 0 0.538 6.575 65.2 4.0900 1 296 15.3 396.90 4.98 24.0
1 0.02731 0.0 7.07 0 0.469 6.421 78.9 4.9671 2 242 17.8 396.90 9.14 21.6
2 0.02729 0.0 7.07 0 0.469 7.185 61.1 4.9671 2 242 17.8 392.83 4.03 34.7
3 0.03237 0.0 2.18 0 0.458 6.998 45.8 6.0622 3 222 18.7 394.63 2.94 33.4
4 0.06905 0.0 2.18 0 0.458 7.147 54.2 6.0622 3 222 18.7 396.90 5.33 36.2

In [2]:

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
sns.set(context='notebook')

cols = ['MEDV', 'LSTAT', 'AGE', 'DIS', 'CRIM', 'TAX', 'RM']
sns.pairplot(df[cols], height=2.5)

Out[2]:

<seaborn.axisgrid.PairGrid at 0x111c676d8>

In [3]:

from sklearn import datasets
dataset = datasets.load_boston()  #也可以通过sklearn加载数据集

实现线性回归模型

In [4]:

class LinearRegressionByMyself(object):
    def __init__(self, Learning_rate=0.001, epoch=20):
        self.Learning_rate = Learning_rate
        self.epoch = epoch
        
    def fit(self, X, y):
        self.w = np.zeros(1 + X.shape[1])
        self.cost_list = []
        
        for i in range(self.epoch):
            output = self.Regression_input(X)
            #shape重置, 这里需要注意矩阵的运算问题
            output = output.T.reshape(y.shape)
            
            error = (y - output)
            #shape重置
            self.w[1:] += self.Learning_rate * X.T.dot(error).reshape(-1,)
            
            self.w[0] += self.Learning_rate * error.sum()
            cost = (error ** 2).sum() / 2.0
            self.cost_list.append(cost)
        return self
    
    def Regression_input(self, X):
        return np.dot(X, self.w[1:]) + self.w[0]
    
    def predict(self, X):
        return self.Regression_input(X)
模型写完了, 开始准备数据, 并且做数据的预处理 fit_transform

In [5]:

from sklearn.preprocessing import StandardScaler
X = df[['LSTAT']].values   # 这里只去了一维数据
y = df[['MEDV']].values
y = y.reshape(-1,1)

StandardScaler_x = StandardScaler()
StandardScaler_y = StandardScaler()
X_standard = StandardScaler_x.fit_transform(X)
y_standard = StandardScaler_y.fit_transform(y)

实际开始跑模型

In [6]:

model = LinearRegressionByMyself()
model.fit(X_standard, y_standard)

Out[6]:

<__main__.LinearRegressionByMyself at 0x1172c0898>

画出模型的损失值随着epoch变化的折线图

可见前三次变化很大, 后面趋于稳定

In [7]:

plt.plot(range(1, model.epoch+1), model.cost_list)
plt.ylabel('SSE')
plt.xlabel('Epoch')

Out[7]:

<matplotlib.text.Text at 0x11626e470>

In [8]:

def Regression_plot(X, y, model):
    plt.scatter(X, y, c='blue')
    plt.plot(X, model.predict(X), color='red')
    return None

In [8]:

Regression_plot(X_standard, y_standard, model)

模型已经完成了, 上图看起来效果还不错, 接下来做个实际的预测吧

In [9]:

#这里要注意手动实现的数据, 是做了transform预处理的, 输出实际预测值是还要inverse_transform还原预测值
Rercentage_standard = StandardScaler_x.transform([[23]])
Price_standard = model.predict(Rercentage_standard)
StandardScaler_y.inverse_transform(Price_standard)

Out[9]:

array([ 12.70271311])

使用sklearn构建线性模型

In [10]:

from sklearn.linear_model import LinearRegression
sk_model = LinearRegression()
sk_model.fit(X,y)
print(sk_model.coef_, sk_model.intercept_)
[[-0.95004935]] [ 34.55384088]

sklearn 只需要3行代码就能实现预测了, 很方便, 还不用数据预处理

In [11]:

Regression_plot(X, y, sk_model)

In [12]:

sk_model.predict(23) #实际预测结果

Out[13]:

array([[ 12.70270574]])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

梯度下降法实现线性回归, 实例---预测波士顿房价 的相关文章

  • 求出最大连续子序列和 暴力算法、分治法、动态规划、贪心算法实现;Leecode 51.最大子序和

    求出最大连续子序列和 问题描述 给定一个整数数组 a 找到一个具有最大和的连续子数组 子数组最少包含一个元素 返回其最大和 这个问题也可转入Leecode 51 最大子序和 来源 力扣 LeetCode 示例 输入 2 1 3 4 1 2
  • R语言线性回归代码

    data rwalk 的回归结果 library TSA data rwalk lm rwalk lm rwalk time rwalk summary lm rwalk win graph width 4 8 height 8 point
  • 算法笔记-第四章-第六章

    4 1排序 1 选择排序 思路 总共需要进行N趟操作 每次从i n中选出最小的元素并与第I个元素交换 算法的时间复杂度为O n2 假设有数组A i 0 lt i lt n 1 如下 void selectSort for int i 0 i
  • 线性回归总结

    向量相似理论 线性回归 比如预测房价中学区属性0 4 居住体验0 2 通勤距离0 2 商业环境0 2等因素 在同一价格区间 只有样本特征与上述属性分布一致时 各方面都加权均衡 才能取得高分 任一单一属性过高 必然导致其他属性降低 通常意义上
  • 我的机器学习--线性回归

    1 最小二乘法 上述方法可以直接得到线性回归方程 import numpy as np import matplotlib pyplot as plt x 2 np random rand 100 1 y 4 3 x np random r
  • FFT(快速傅里叶变换)算法

    文章目录 功能 一次FFT的功能 一次IFFT的功能 总体功能 前置技能 多项式的阶 多项式的系数表达式 多项式的点值表达式 复数 复数的基本单位 复数的运算 复平面 复根 定义 几个性质 求多项式乘积的基本步骤 FFT 递归版FFT 核心
  • 线性回归、Arima和LSTM做单特征预测

    一 数据集展示 1 本文只针对单特征的时间序列 这里分别只有时间和牛肉批发价两个特征 一共是三百多条数据 二 模型 1 线性回归 任务 只以当前的牛肉批发价作为特征 预测过后5天的牛肉批发价 1 线性回归需要有x和y两个维度 这里将原本的牛
  • 线性回归(Linear Regression)

    引言 说到底 回归任务都是寻找特征与目标之间的关系 我们认为每一个特征或多或少 或积极或消极地对目标产生着影响 我们期望寻找数学表达式来表达出这种影响 一 回归模型 想象一下描述特征与目标之间最简单明了的关系是什么 当然是线性关系了 每个特
  • 深度学习基础:线性回归、感知机、反向传播和梯度下降法

    当代机器学习领域中 线性回归和多层感知机是最常用的基本模型 在深度学习中 这些模型通常是由多个神经网络层次组成 其中前向传播和反向传播是两个非常重要的步骤 本文将介绍线性回归 多层感知机 前向传播和反向传播的基本原理 线性回归 线性回归是一
  • 对比梯度下降和正规方程解性能

    现在用导数的方式模拟线性回归中的梯度下降法 首先再来回顾一下梯度下降法的基础 梯度下降法不是一个机器学习算法 而是一个搜索算法 梯度下降法用在监督学习中 梯度下降法的过程 对比模型输出值和样本值的差异不断调整本省权重 直到最后模型输出值和样
  • 客户价值预测:线性回归模型与诊断(概念)

    客户生命周期可分为四个阶段 潜在客户阶段 响应客户阶段 既得客户阶段 流失客户阶段 本章整体是一个客户价值预测的案例 背景是某信用卡公司在地推活动之后 获取了大量客户的信用卡申请信息 其中一个部分客户顺利开卡 并且有月消费记录 而另外一部分
  • (实战)sklearn----多元线性回归&sklearn----多项式回归

    import numpy as np from numpy import genfromtxt from sklearn import linear model import matplotlib pyplot as plt from mp
  • 机器学习基础学习-多元线性回归问题(梯度下降法实现)

    1 基本概念 在之前的博客当中描述了怎样模拟出了梯度下降的过程 如果是多维情况 theta其实是一个向量 那么对其求导的损失函数也是向量 梯度就是损失函数对每个方向的theta求偏导 和之前的一维线性回归相比 我们对只是对w这个数字进行求导
  • 基于梯度下降的线性回归(Gradient Descent For Linear Regression)

    概述 梯度下降是很常用的算法 它不仅被用在线性回归上和线性回归模型 平方误差代价函数 在本次 我们要将梯度下降和代价函数结合 我们将用到此算法 并将其应用于具体的拟合直线的线性回归算法里 梯度下降算法和线性回归算法比较如图 左边梯度下降 右
  • matlab画一个正弦函数y=sin(x)(全网最简便,没有之一)

    本博日常打卡 x 0 pi 100 2 pi y sin x plot x y plottools 说明 plottools on 按照您上次使用时的布局在当前图窗上显示图窗选项板 绘图浏览器和属性编辑器 不带参数的 plottools 与
  • 数据分析——最小二乘法建立线性回归方程(最简单的一元线性模型为例)

    概述 别看公式多 其实很简单 最小二乘法其实又叫最小平方法 是一种数据拟合的优化技术 实质上是利用最小误差的平方寻求数据的最佳匹配函数 利用最小二乘法可以便捷的求得未知的数据 起到预测的作用 并且是的这些预测的数据与实际数据之间的误差平方和
  • 机器学习:正则化

    正则化 引入正则化的目的是为了解决过拟合问题 左边的图中蓝色的线是目标函数 随机产生五个带噪声的点 我们理想的拟合曲线为红色的线 虽然有些许误差 但是整体拟合情况和目标函数接近 但是 事先不知道需要用二次曲线来拟合这些点 如果使用了更高次方
  • 判断一个大于2的正整数n是否为素数的方法有多种,给出两种算法,说明其中一种算法更好的理由

    判断一个大于2的正整数n是否为素数的方法有多种 给出两种算法 说明其中一种算法更好的理由 问题解答 include
  • 线性回归误差项方差的估计

    线性回归误差项方差的估计 摘要 线性回归误差项概念的回顾 残差平方和 residual sum of squares 残差平方和的期望 实验验证 参考文献 摘要 之前在文章线性回归系数的几个性质 中 我们证明了线性回归系数项的几个性质 在这
  • 线性回归建模及模型诊断

    目录 一 建模背景及目的及数据源说明 二 描述性分析 2 1 连续自变量与连续因变量的相关性分析 2 2 二分类变量与连续变量的相关性分析 2 3 多分类变量与连续变量的相关性分析 三 模型建立与诊断 3 1 一元线形回归及模型解读 3 2

随机推荐

  • linux:TCP(传输控制协议)1、客户端和服务器连接并通信客户端,向服务器发送数据2、实现回传。服务器收到客户端的数据之后,将数据返传给客户端

    注意 服务器中的ip 192 168 31 122 和端口号port 6666 客户端中必须一致 编译 客户端 gcc tcp client c o client 服务器 gcc tcp server c o server 运行 客户端 c
  • GAN的图像修复:多样化补全

    点击上方 机器学习与生成对抗网络 关注 星标 获取有趣 好玩的前沿干货 2019 cvpr Pluralistic Image Completion https arxiv xilesou top pdf 1903 04227 pdf ht
  • 使用IO流对文件进行读取功能

    对于文件的读取可以用字符流也可以用字节流 下面整理了一份利用字节读流对本地文件进行读取 1 实现思路 第一步 选择文件 实例化一个文件File 在File的构造里放上你要读取的文件路径 文件路径的斜杠需要用转义符进行处理 如果文件在项目的根
  • 为什么 Java 中只有值传递?

    开始之前 我们先来搞懂下面这两个概念 形参 实参 值传递 引用传递 形参 实参 方法的定义可能会用到 参数 有参的方法 参数在程序语言中分为 实参 实际参数 用于传递给函数 方法的参数 必须有确定的值 形参 形式参数 用于定义函数 方法 接
  • 管理conda environments

    欢迎关注 生信修炼手册 environments作为conda的核心组件 用于封装相互独立的软件环境 通过在不同的environment中安装packages 来实现不同软件的相互独立 通过在不同的environments之间进行切换 从而
  • C语言 实现学生管理系统(手把手教学)

    学生管理系统怎么实现 首先要对问题能分析出框架来 这样在之后书写功能时就会对所需要的东西有一个清晰的认知 那么 管理系统的任务就是 能删除 查找和修改学生信息 能进行排序 能打印信息 这些都是最基本的功能 把这些功能框架写在一个c源文件里
  • HDU1007(Quoit Design)

    Quoit Design 题目传送门 Problem Description Have you ever played quoit in a playground Quoit is a game in which flat rings ar
  • 浅谈Javac编译原理

    一 javac是什么 1 javac是一种编译器 能够将一种语言规范转化成另外一种语言规范 2 javac的任务就是将Java源代码转化成JVM能够识别的一种语言 Java字节码 这种字节码不是针对某种机器 某种平台的 二 javac编译器
  • Rethink LSTM&GRU

    LSTM 设计思想 姑且不看偏置 W W W 和 U U U 是加权的矩阵 写模型的时候用 nn Linear in dim out dim 就成
  • 02Linux下使用libcurl(C语言)来实现http请求(数据保存至内存)(这里可以让你深入了解realloc函数)

    02Linux下使用libcurl C语言 来实现http请求 数据保存至内存 这里可以让你深入了解realloc函数 其它关于lincurl文章 01Linux下使用libcurl C语言 来实现http请求 数据保存至文件 包括下载li
  • iPad 上如何查看 Safari 页面的 html 源代码

    最近需要解决一个 ipad 上 Safari 浏览器相关的问题 需要查看其中页面的 html 源代码 找了半天 发现浏览器没有提供原生态的功能 最后在网上找到了如下神奇的方式 1 Safari 浏览器定位到你要查看源代码的页面 2 在地址栏
  • Python多进程分片下载远端大文件 - multiprocessing paramiko

    Python多进程分片下载远端大文件 可以按照以下流程设计代码框架 导入需要的模块 首先 导入所需的模块 包括paramiko os和multiprocessing 创建下载函数 创建一个用于分片下载文件的函数 该函数将使用SSH连接到远程
  • 布隆过滤器,原理+案例+代码实现

    概述 什么是布隆过滤器 布隆过滤器 Bloom Filter 是1970年由布隆提出的 它实际上是由一个很长的二进制向量和一系列随意映射函数组成 它是一种基于概率的数据结构 主要用来判断某个元素是否在集合内 它具有运行速度快 时间效率 占用
  • React 中插入图片的三种方式

    使用import 导入 import React Component from react import logo from asset worker png export default class Md extends Componen
  • 【C语言scanf函数用法】

    本节介绍输入函数 scanf 的用法 scanf 和 printf 一样 非常重要 而且用得非常多 所以一定要掌握 概述 scanf 的功能用一句话来概括就是 通过键盘给程序中的变量赋值 该函数的原型为 include
  • 优秀博文-技术栈

    设计模式大牛 https blog csdn net lovelion article category 738450 10 石杉的架构笔记 https juejin im user 5be0588ae51d452b0255727d 程序猿
  • 前端日历控件

    前端日历控件 最简单 使用html自带的type
  • 计算机算法与程序设计 第二章 编程作业

    第二章 编程作业 查看帮助 返回 所有测验 作业和考试都在2020年12月30日23点截止 请及时完成 编程作业题可以多次提交 取最高分作为本题成绩 依照学术诚信条款 我保证此作业是本人独立完成的 温馨提示 1 本次作业属于Online J
  • Echarts

    数据可视化 数据可视化主要目的 借助于图形化手段清晰有效的传达与沟通信息 数据可视化把数据从冰冷的数字转换成图形 揭示蕴含在数据中的规律和道理 Echarts简介 常见的数据可视化库 D3 js 目前 Web 端评价最高的 Javascri
  • 梯度下降法实现线性回归, 实例---预测波士顿房价

    本文先手动实现一个线性回归模型 然后用sklearn的线性回归模型作对比 import pandas as pd df pd read csv house data csv 数据集可到网上下载 波士顿房价 df head Out 1 CRI