前言

这是【机器学习代码模板】系列的第三篇文章,之后会持续更新,敬请关注!

与第上一篇文章相比增加的地方

  • 将数据集划分为training_settest_set
  • training_set上训练模型,在test_set上测试误差

话不多说,上号

1. 导入程序需要的包以及对数据集进行处理

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# m表示样本的数目,n表示特征的数目# 假设我们已经有了数据集
dataset = <np.array>    # dataset.shape = (m, n + 1)# >>> dataset
# np.array([[x, x, x, x, y, ],
#           [x, x, x, x, y, ],
#                 ...
#           [x, x, x, x, y, ]])# 打乱dataset
np.random.shuffle(dataset)# 以7:3的比例划分dataset
m = dataset.shape[0]
flag = m * 7 // 10
training_set = dataset[:flag, :]
test_set = dataset[flag:, :]# 取出X_train, y_train, m_train, n
X_train = training_set[:, :-1]    # X_train.shape = (m_train, n)
m_train, n = X_train.shape
y_train = training_set[:, -1].reshape(m_train, 1)    # y_train.shape = (m_train, 1)# 重构X_train
arr_ones = np.ones((m_train, 1))
X_train = np.concatenate((arr_ones, X_train), axis=1)    # X_train.shape = (m_train, n + 1)

2. 定义函数

2.1 定义假设函数Hypothesis Function

Hw(x)=w0+w1x1+w2x2+w3x3+...H_w\left(x\right) = w_0 + w_1x_1 + w_2x_2 + w_3x_3 + ...Hw​(x)=w0​+w1​x1​+w2​x2​+w3​x3​+...

# Hypothesis Funcyion
def hypothesis(X_data, w):y_hat = np.matmul(X_data, w) # np.matmul()计算矩阵乘法return y_hat

2.2 定义损失函数Loss Function

L(w)=12m∑i=1m(Hw(x(i))−y(i))2L\left(w\right) = \frac{1}{2m}\sum_{i=1}^{m}\left(H_w\left(x^{\left(i\right)}\right) - y^{\left(i\right)}\right)^2L(w)=2m1​∑i=1m​(Hw​(x(i))−y(i))2

# Loss Function
def loss(X_data, y_hat, y_data, m):# 均方误差error = (1 / (2 * m)) * np.sum(np.square(y_hat - y_data))return error

2.3 计算偏导数∂L∂w\frac{\partial L}{\partial w}∂w∂L​

∂L∂wj=1m∑i=1m(Hw(x(i))−y(i))xj\frac{\partial L}{\partial w_j} = \frac{1}{m}\sum_{i=1}^{m}\left(H_w\left(x^{\left(i\right)}\right) - y^{\left(i\right)}\right)x_j∂wj​∂L​=m1​∑i=1m​(Hw​(x(i))−y(i))xj​

# grad of Loss Function
def grad(X_data, y_hat, y_data, m):w_grad = (1 / m) * np.matmul(X_data.T, y_hat - y_data)    # <np.array>.T计算矩阵的转置return w_grad

3. 进行gradient descent

# 初始化学习率
learning_rate = <float>    # 笔者建议0.0001、0.001、0.01、0.1、...# 初始化迭代次数
iter_time = <int>    # 笔者建议1000、2000、5000、10000、...# 初始化参数w
w = np.random.randn((n + 1, 1))    # w.shape = (n + 1, 1)# 将每次的训练误差保存到列表里
list_training_error = []for i in range(iter_time):# 输入数据和参数,预测输出y_hat = hypothesis(X_train, w)    # y_hat.shape = (m_train, 1)# 计算均方误差并保存training_error = loss(X_train, y_hat, y_train, m_train)list_training_error.append(training_error)# 计算参数的梯度w_grad = grad(X_train, y_hat, y_data, m_train)    # w_grad.shape = (n + 1, 1)# 更新参数w = w - learning_rate * w_grad# 调用plot画出曲线图
plt.plot(list_training_error)
plt.xlabel('iterations')
plt.ylabel('error')
plt.title('Training Error')
plt.show()

4. 在test_set上测试误差

4.1 处理数据

# 取出X_test, y_test, m_test, n
X_test = test_set[:, :-1]    # X_test.shape = (m_test, n)
m_test, n = X_test.shape
y_test = test_set[:, -1].reshape(m_test, 1)    # y_test.shape = (m_test, 1)# 重构X_test
arr_ones = np.ones((m_test, 1))
X_test = np.concatenate((arr_ones, X_test), axis=1)    # X_test.shape = (m_test, n + 1)

4.2 测试误差

# 输入数据和参数,预测输出
y_hat = hypothesis(X_test, w)    # y_hat.shape = (m_test, 1)# 计算均方误差
testing_error = loss(X_test, y_hat, y_test, m_test)# 打印测试误差
print(testing_error)

5. 使用模型预测真实数据

# 准备X_realdata
X_realdata = <np.array>    # X_realdata.shape = (m_realdata, n)# 取出m_realdata, n
m_realdata, n = X_realdata.shape# 重构X_realdata
arr_ones = np.ones((m_realdata, 1))
X_realdata = np.concatenate((arr_ones, X_realdata), axis=1)    # X_realdata.shape = (m_realdata, n + 1)# 预测输出
y_pred = hypothesis(X_realdata, w)    # y_pred.shape = (m_realdata, 1)

写文不易,你的点赞就是对我最大的支持。

后记

文章中的代码已经放到了我的个人仓库里,欢迎Star

GitHub: https://github.com/Lovely-Pig/ML-Code-Model/

Gitee: https://gitee.com/lovely-pig/ml-code-model/


机器学习相关学习视频推荐

【中英字幕】吴恩达机器学习系列课程

【中英字幕】吴恩达深度学习课程第一课—神经网络与深度学习


机器学习项目写代码推荐平台:百度AI Studio

链接:https://aistudio.baidu.com/aistudio/index

推荐理由:

  • 百度AI Studio对jupyter notebook有很好的支持,省去了自己配置各种环境的麻烦。
  • 有免费的GPU算力支持,构建复杂的机器学习应用不是梦。
  • 对开源框架PaddlePaddle有很好的支持。
  • 社区有很多大佬的开源项目可以学习。

所有文章在这里

【机器学习代码模板】把你的线性回归模型拉出来遛一遛

【机器学习代码模板】用你的线性回归模型搞点儿事情

【机器学习代码模板】三步带你实现最简单的线性回归模型

【机器学习代码模板】把你的线性回归模型拉出来遛一遛相关推荐

  1. 机器学习(2)---简单线性回归模型

    机器学习(2)---简单线性回归模型 第一步:数据预处理 import pandas as pd import numpy as np import matplotlib.pyplot as pltd ...

  2. 基于机器学习梯度下降优化算法来寻找最佳的线性回归模型

    https://www.toutiao.com/a6638782437587419652/ 幻风的AI之路 2018-12-25 18:12:27 线性回归模型 线性回归模型是一个非常简单的算法模型, ...

  3. 机器学习实战4-sklearn训练线性回归模型(鸢尾花iris数据集分类)

    不贴图都没人看系列.... 线性回归推导: 上图求导部分有误,少些一个转置符号,更正为: 逻辑回归推导: (公式中"ln"和"log"表示一个意思,都是以&qu ...

  4. 吴恩达-机器学习-多元线性回归模型代码

    吴恩达<机器学习>2022版 第一节第二周 多元线性回归 房价预测简单实现         以下以下共两个实验,都是通过调用sklearn函数,分别实现了 一元线性回归和多元线性回归的房价 ...

  5. 机器学习之线性回归模型

    回归算法是一种有监督学习算法,用来建立自变量X和观测变量Y之间的映射关系,如果观测变量是离散的,则称其为分类Classification:如果观测变量是连续的,则称其为回归Regression. 回归 ...

  6. 机器学习算法——线性回归的详细介绍 及 利用sklearn包实现线性回归模型

    目录 1.线性回归简介 1.1 线性回归应用场景 1.2 什么是线性回归 1.2.1 定义与公式 1.2.2 线性回归的特征与目标的关系分析 2.线性回归api初步使用 2.1 线性回归API 2.2 ...

  7. 机器学习入门实践——线性回归模型(波士顿房价预测)

    机器学习入门实践--线性回归模型(波士顿房价预测) 一.背景介绍 给定一个大小为 n n n的数据集 { y i , x i 1 , . . . , x i d } i = 1 n {\{y_{i}, ...

  8. 机器学习课后题——线性回归模型

    第5章 线性回归模型 5.1 试分析在什么情况下,式fx=wTx+b 不必考虑偏置项b. 答:我的看法是,如果样本 x  中有某一个属性 xi  为固定值时,wixi+b 等价于偏置项. 即此时  w ...

  9. 【机器学习之线性回归】多元线性回归模型的搭建+Lasso回归的特征提取

    文章目录 前言 一.多元线性回归 1.原理介绍 2.sklearn代码实现 二.Lasso回归 1.原理介绍 2.sklearn代码实现 三.总结 前言 回归是监督学习的一个重要问题,回归用于预测输入 ...

最新文章

  1. java 反射 getclass_java 反射getClass .class 的使用方法示例
  2. Pandas初学者代码优化指南
  3. 字节数组输入流读取操作
  4. MySQL中文全文索引
  5. Android Linux下开发环境搭建
  6. 44)PHP,多个数据库查询(我没试)
  7. POJ - 2516 Minimum Cost(最小费用最大流)
  8. IE不能直接顯示PDF的原因分析和解決方法
  9. 数云:PolarDB助力数云轻松应对双十一
  10. android创建空文件,ADT 更新 eclipse srclayout 文件夹创建时候为空
  11. matlab遗传算法工具箱介绍和详细使用方法【matlab优化算法工具箱】
  12. 【报错】Failed to start A high performance web server and a reverse proxy server.
  13. html中的if函数,IF函数的使用方法
  14. linux中wps默认安装目录,在Linux系统中安装使用WPS的方法
  15. vue 组件通信合集
  16. 9 Greenplum高级使用
  17. 计算机 检测三维球状表面的算法,三维形状计测,3-D height measurement,音标,读音,翻译,英文例句,英语词典...
  18. idea的项目模板的创建
  19. File转MultipartFile格式
  20. Python性能分析 (Profiling)

热门文章

  1. 用HTML+CSS做一个漂亮简单的节日网页【元宵节】
  2. [小说]魔王冢(35)天目
  3. DL2 - Improving Deep Neural Networks- Hyperparameter tuning, Regularization and Optimization
  4. 部分GDAL工具功能简介
  5. 该网页无法正常运作localhost 目前无法处理此请求。
  6. python语言的实验心得体会范文_实验报告心得体会范文3篇_心得体会
  7. 【BZOJ1062】[NOI2008]糖果雨【二维树状数组】
  8. 【搬运】1 简谱和基本知识
  9. Sicily2000——Toy Shopping
  10. 良心推荐:最适合玩吃鸡手游的安卓机型有哪些?刺激战场为例