第四周:线性回归模型

机器学习入门:线性回归及梯度下降 本文会讲到: (1)线性回归的定义 (2)单变量线性回归 (3)cost function:评价线性回归是否拟合训练集的方法 (4)梯度下降:解决线性回归的方法之一 (5)feature scaling:加快梯度下降执行速度的方法 (6)多变量线性回归 Linear Regression     注意一句话:多变量线性回归之前必须要Feature Scaling 阅读详情

目录

1. 学习目标

2. 简单线性回归与最小二乘法

2.1 什么是简单线性回归

2.2 如何找到最佳的直线

2.3 千奇百怪的单样本损失函数

2.3.1 0-1损失函数

2.3.2 平方损失函数

2.3.3 绝对损失函数

2.3.4 对数损失函数

2.4 侧重不同的多样本风险函数

2.4.1 期望风险

2.4.2 经验风险

2.4.3 结构风险

2.5 最小二乘法

2.6 简单线性回归的实现及应用(以波士顿房价数据为例)

3. 多元线性回归

3.1 定义及损失函数

3.2 多元线性回归的实现及应用(以波士顿房价数据为例)

3.3 避免最优参数无解而引入的正则化处理

4. 参考文献

1. 学习目标

1. 简单线性回归:简单线性回归及最小二乘法的数据推导

2. 实践:简单线性回归实现及向量化应用

3. 多元线性回归:多选线性回归和正规方程解及实现

2. 简单线性回归与最小二乘法

2.1 什么是简单线性回归

所谓简单,是指只有一个样本特征,即只有一个自变量;所谓线性,是指方程是线性的;所谓回归,是指用方程来模拟变量之间是如何关联的[1],即找到一条直线,使其可以最大程度地拟合样本特征和样本标签之间的关系。

图2.1 简单线性回归

2.2 如何找到最佳的直线

在图2.1中,我们可能会画出许多条直线来描述特征与标签之间的关系。但是既然会存在多条直线,那就有可能比较出个优劣。而之前我们也说过,这条直线需要最大程度地拟合二者之间的关系即尽可能地拟合真实情况。因此,从这个角度入手,我们就可以找到量化分析不同直线的指标从而挑出最合适的那个。

对于一个样本点x^{(i)},我们根据直线方程都可以得到一个预测值\hat{y}^{(i)}=a x^{(i)}+b。直线方程能够尽可能地拟合真实情况,也就是说真实值y^{(i)}和预测值\hat{y}^{(i)}之间的差距应尽量小。所有的样本的误差都小,说明直线方程拟合性好。而一条直线的具体表示又是由其斜率a和截距b来决定的。因此,这个问题就变成了当a与b取什么值时,样本误差最小。

由于描述样本误差的指标有很多,因此我们需要先挑选一个合适的。通常来说,为了防止出现正误差值和负误差值相抵的情况,使用绝对值来表示误差,即\left|y^{(i)}-\hat{y}^{(i)}\right|。可是,通过一个绝对值函数来求最小值往往会存在一个问题,那就是不能求导。因为绝对值函数不是一个处处可导的函数。为了保证函数可导从而方便通过导数找到最小值,我们自然想到使用\left(y^{(i)}-\hat{y}^{(i)}\right)^{2}来替换绝对值。因此,此时对于所有的n个样本而言,误差函数就变成了

\sum_{i=1}^{n}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2}=\sum_{i=1}^{n}\left(y^{(i)}-a x^{i}-b\right)^{2}

此时的误差函数也被称之为损失函数或者目标函数,能令损失函数最小的参数a和b也就是最佳直线的斜率和截距。这时,可以用令偏导数为0的方式求出满足条件的a和b。具体推导过程见2.5。结果如下:

a=\frac{\sum_{i=1}^{n}\left(x^{i}-\bar{x}\right)\left(y^{i}-\bar{y}\right)}{\sum_{i=1}^{n}\left(x^{(i)}-\bar{x}\right)^{2}}=\frac{\bar{xy}-\bar{x}\bar{y}}{\bar{x^2}-\bar{x}^2}

b=\bar{y}-a \bar{x}

2.3 千奇百怪的单样本损失函数

首先需要注意,这部分讲的损失函数不同于2.2中的简单线性回归模型的损失函数。这里的损失函数是对于单个样本而言的。损失函数是衡量预测模型预测期望结果表现的指标。损失函数越小,模型的鲁棒性越好[1]。常见的单样本损失函数有以下几种:

2.3.1 0-1损失函数

分类问题常用的损失函数,分类正确结果为0,错误为1。

L(y, f(x))=\left\{\begin{array}{ll} 1, & y \neq f(x) \\ 0, & y=f(x) \end{array}\right.

2.3.2 平方损失函数

用来描述回归问题,为真实值与预测值差值的平方。误差值越大、惩罚力度越强,即对表现差的值更敏感。

L(y, f(x))=(y-f(x))^{2}

2.3.3 绝对损失函数

可以用来描述回归问题,为真实值与预测值差的绝对值。

L(y, f(x))=|y-f(x)|

2.3.4 对数损失函数

可以用来描述分类问题。该损失函数用到了极大似然估计的思想。P(Y|X)通俗的解释就是:在当前模型的基础上,对于样本X,其预测值为Y,也就是预测正确的概率。由于概率之间的同时满足需要使用乘法,为了将其转化为加法,我们将其取对数。最后由于是损失函数,所以预测正确的概率越高,其损失值应该是越小,因此再加个负号取个反。

L(y, f(x))=-\log P(y | x)

另外,需要说明的是,对于多样本的对数损失函数需要假设所有样本是相互独立的。

2.4 侧重不同的多样本风险函数

损失函数是针对于单个样本的,但是一个训练数据集中存在多个样本,多个样本会给出多个损失。此时应该如何进行选择呢?为了解决这个问题,于是引出了风险函数的概念[1]。

2.4.1 期望风险

期望风险是损失函数的期望,用来表达理论上模型f(x)关于联合分布P(x, y)的平均意义下的损失。又叫期望损失/风险函数。

R_{exp}(f)=E_{p}(L(y, f(x)))=\int_{x\times y} L(y, f(x)) P(x, y)dxdy

2.4.2 经验风险

模型f(x)关于训练数据集的平均损失,称为经验风险或经验损失。其含义为:模型关于训练集的平均损失。具体来说就是将每个样本的损失加起来,然后平均一下。

R_{\mathrm{emp}}(f)=\frac{1}{n} \sum_{i=1}^{n} L\left(y_{i}, f\left(x_{i}\right)\right)

可以观察到该公式与2.2中简单线性回归模型的损失函数之间的关系。事实上,经验风险最小的模型为最优模型。在训练集上最小经验风险最小,也就意味着预测值和真实值尽可能接近,模型的效果越好。因此,公式含义还可以解释为训练样本集中对数损失函数平均值的最小值。

\min _{f \in F} \frac{1}{n} \sum_{i=1}^{n} L\left(y_{i}, f\left(x_{i}\right)\right)

期望风险是模型关于联合分布的期望损失,经验风险是模型关于训练样本数据集的平均损失。根据大数定律,当样本容量趋于无穷时,经验风险趋于期望风险。因此很自然地想到用经验风险去估计期望风险。

2.4.3 结构风险

由于训练样本个数有限,用经验风险去估计期望风险容易出现过拟合问题。因此需要对经验风险其进行修正。而结构风险指的是在经验风险上加上一个正则化项或者惩罚项 。这样便可以实现修正。

\min _{f \in F} \frac{1}{n} \sum_{i=1}^{n} L\left(y_{i}, f\left(x_{i}\right)\right)+\lambda J(f)

2.5 最小二乘法

最小二乘法源于法国数学家阿德里安的猜想:对于测量值来说,让总的误差的平方最小的就是真实值。这是基于,如果误差是随机的,应该围绕真值上下波动。

意思就是说,如果误差是随机的,那么能让总的误差最小的测量值就可以认为是真实值。

高斯证明过:如果误差的分布是服从正态分布的,那么最小二乘法得到的值就最有可能是真实的值。

那,什么是“二乘”呢?其实就是“平方”的意思。是不是有些恍然大悟,明白了最小二乘法用的是什么误差计算方式。其实就是2.2中提到的真实值与预测值差的平方。

现在,我们承接2.2中的问题:如何利用偏导数为0求出令损失函数最小的a和b?具体过程参考如下:

首先,求解b:

\begin{aligned} \frac{\partial L(a, b)}{\partial b}&=\sum_{i=1}^{n} 2\left(y^{(i)}-a x^{(i)}-b\right)(-1) \\ &=-2\sum_{i=1}^{n}\left(y^{(i)}-a x^{(i)}-b\right) \\ &=-2(\sum_{i=1}^{n} y^{(i)}-a \sum_{i=1}^{n} x^{(i)}-n b) \\ &=0 \end{aligned}

n b=\sum_{i=1}^{n} y^{(i)}-a \sum_{i=1}^{n} x^{(i)}

这里我们用样本均值来代替求和,即用n \bar{x}和n \bar{y}来替换\sum x^{(i)}和\sum y^{(i)}。可得,

b=\bar{y}-a \bar{x}

然后,求解a:

\begin{aligned} \frac{\partial L(a, b)}{\partial a} &=\sum_{i=1}^{n} 2\left(y^{(i)}-a x^{(i)}-b\right)\left(-x^{(i)}\right) \\ &=-2(\sum_{i=1}^{n}\left(y^{(i)}-a x^{(i)}-b\right) x^{(i)})\\ &=0 \end{aligned}

将b=\bar{y}-a \bar{x}代入到上式可得,

\sum_{i=1}^{n}\left(y^{(i)}-a x^{(i)}-\bar{y}+a \bar{x}\right) x^{(i)}=0

打开括号,整理得,

a=\frac{\sum_{i=1}^{n}\left(x^{(i)} y^{(i)}-x^{(i)} \bar{y}\right)}{\sum_{i=1}^{n}\left(\left(x^{(i)}\right)^{2}-\bar{x} x^{(i)}\right)}

用同上的替换方式去除求和符号得,

a=\frac{\bar{xy}-\bar{x}\bar{y}}{\bar{x^2}-\bar{x}^2}

2.6 简单线性回归的实现及应用(以波士顿房价数据为例)

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

boston = datasets.load_boston()
X = boston.data[:, 12]
y = boston.target

X = X[y < 50].reshape(-1, 1)
y = y[y < 50].reshape(-1, 1)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 2020)

fig, axs = plt.subplots(2, 1)

# 手动计算
a = (np.mean(X_train * y_train) - np.mean(X_train) * np.mean(y_train)) / \
    (np.mean(X_train ** 2) - np.mean(X_train) ** 2)
b = np.mean(y_train) - a * np.mean(X_train)
print(a, b)

axs[0].scatter(X_test, y_test, c = 'b')
axs[0].plot(X_test, a * X_test + b, c = 'r')

# 调用sklearn模块
lr = LinearRegression()
lr.fit(X_train, y_train)
predictions = lr.predict(X_test)
print(lr.coef_[0], lr.intercept_)

axs[1].scatter(X_test, y_test, c = 'b')
axs[1].plot(X_test, predictions, c = 'r')

plt.show()

3. 多元线性回归

3.1 定义及损失函数

相对于简单线性回归,多元线性回归则是不再只考虑单一样本特征与样本标签的关系。此时,我们可以把含有m个特征的样本n个样本构成的总体X写成如下的矩阵形式:

X=\left(\begin{array}{ccccc} 1 & x_{1}^{(1)} & x_{2}^{(1)} & \ldots & x_{m}^{(1)} \\ 1 & x_{1}^{(2)} & x_{2}^{(2)} & \ldots & x_{m}^{(2)} \\ \ldots & & & & \ldots \\ 1 & x_{1}^{(n)} & x_{2}^{(n)} & \ldots & x_{m}^{(n)} \end{array}\right)

其中,每一行的数据都是同一个样本的各个特征。另外,还可以发现第一列全部为1,这样做的目的是为了统一格式,将常数项系数纳入到X中可以得到更加简练的结果[3]。

而此时某样本的预测值表达式如下

\hat{y}_{(i)}=\theta_{0}+\theta_{1} x_{1}^{(i)}+\theta_{2} x_{2}^{(i)}+\ldots+\theta_{n} x_{n}^{(i)}

如果将样本总体考虑在内的话,可以写成如下的矩阵形式

\hat{y}=X\cdot\theta

此时,我们仍然使用2.2中的损失函数的概念,则在多元线性回归中,写成矩阵形式的损失函数表达式为

\left(y-X \cdot \theta\right)^{T}\left(y - X \cdot \theta\right)

同理,这里一样可以先打开括号然后再利用导数求最小值。只不过这里涉及到矩阵和向量的求导。相关的求导规则可以参考《the Matrix Cookbook》[5]。

这里略过过程,最后的结果是

\theta=\left(X^{T} X\right)^{-1} X^{T} y

关于该最优参数解的形式的进一步讨论见3.3。

3.2 多元线性回归的实现及应用(以波士顿房价数据为例)

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

boston = datasets.load_boston()
X = boston.data
y = boston.target

X = X[y < 50]
y = y[y < 50]

# 手动计算
# 在数据第一列上添加1
X = np.concatenate((np.array([1] * X.shape[0]).reshape(-1, 1), X), axis = 1)
# 计算参数theta
theta = np.dot(np.linalg.inv(np.dot(X.T, X)), X.T).dot(y)
coef_ = theta[1:]
intercept_ = theta[0]
print(coef_, intercept_)

# 调用sklearn模块
lr = LinearRegression()
lr.fit(X, y)
predictions = lr.predict(X)
print(lr.coef_, lr.intercept_)

3.3 避免最优参数无解而引入的正则化处理

让我们再观察一下多元线性回归的最优参数解的形式:

\theta=\left(X^{T} X\right)^{-1} X^{T} y

学过线性代数的人应该知道,并非所有矩阵都是存在逆矩阵的。因此\left(X^{T} X\right)^{-1}很有可能是不存在的。此时需要怎么办呢?

首先,我们需要知道在多元逻辑回归问题中为什么会出现这样的情况。实际上,\left(X^{T} X\right)^{-1}不存在的原因就是所有的特征并不是相互独立的,即矩阵X并非是一个列满秩矩阵。从而X^{T} X也可能不再是一个满秩矩阵。

因此,解决这个问题的一个方法就是尝试去除所有相关的特征,留下全部相互独立的特征。

不过,还有一个更加通用的方法:那就是在X^{T} X后面在加上一个正则项\lambda I,其中I为单位矩阵。此时最优参数解的形式就变成了

\theta=\left(X^{T} X+\lambda I\right)^{-1} X^{T} y

此时的X^{T} X+\lambda I必然是满秩的,因此参数一定是可求的。

4. 参考文献

1. https://mp.weixin.qq.com/s/ESKQKi_1K_WPXNistizDVw

2. https://mp.weixin.qq.com/s/siFRKWLhGOGJCCMjzB7R7A

3. https://mp.weixin.qq.com/s/gJU4oJufOFNF_I3MO7gYlA

4. 《机器学习》(周志华)第三章

5. http://117.128.6.34/cache/www2.imm.dtu.dk/pubdb/views/edoc_download.php/3274/pdf/imm3274.pdf?ich_args2=464-20154102046439_0b26da0a993385059ef3d90549e99ec6_10001002_9c896c28d1caf1d19e3b518939a83798_efb0b935aca0c3bc1c9af15cf2a1260c

数据挖掘:模型选择——线性回归 线性回归 一元线性回归 最早接触的线性回归是y=ax+b的形式,这是对于一元线性回归来说。我们给入数据,通过最小二乘法,让真实值和预测值的残差平方和(也就是要优化的损失函数)最小。可对系数求一阶导数,让其为0,求得未知的a,b,得到方程。 多元线性回归 而一般情况下,我们遇到的数据不是只有一个维度,而是多维数据,这时要用到多元线性回归。 建立数学模型之前,我们先定义如下变量。 监督学习目标便是... 阅读详情

相关推荐

机器学习之线性回归及梯度下降

备注:本文是整理了很多博客和Ng课程笔记以及自己的理解写的关于线性回归以及梯度下降算法的框架,力求简洁明了。 本文框架: (1)线性回归的定义 (2)单变量线性回归 (3)代价函数cost function:评价线性回归是否拟合训练集的方法 (4)梯度下降:解决线性回归的方法之一 (5)特征缩放feature scaling:加快梯度下降执行速度的方法 (6)多变量线性回归一.线性回归

越努力越幸运越幸福 2242

对数线性模型之一(逻辑回归), 广义线性模型学习总结

经典线性模型自变量的线性预测就是因变量的估计值。 广义线性模型:自变量的线性预测的函数是因变量的估计值。常见的广义线性模型有:probit模型、poisson模型、对数线性模型等等。对数线性模型里有:logistic regression、Maxinum entropy。本篇是对逻辑回归理论和应用的学习总结、以及广义线性模型导出逻辑回归的过程,下一篇将对最大熵模型的学习总结。

玉心sober 5万+

吴恩达机器学习课程第四周编程作业:线性与逻辑回归实战

机器学习是当今信息时代中的一个重要技术,它赋予了计算机智能,让机器能够自主学习和改进。吴恩达教授的机器学习课程是全球最受欢迎的在线课程之一,以其深入浅出的教学方式和丰富实践案例而著称。本章节将为大家简要介绍这门课程的概貌,包括课程结构、学习目标以及对机器学习领域的基本理解。首先,课程将带你逐步了解机器学习的基本概念,例如监督学习、非监督学习、强化学习等,通过学习这些基础理论,你将能够构建出对整个机器学习领域的大局观。接着,课程会深入到各种机器学习算法的学习中,包括线性回归、逻辑回归以及神经网络等。

weixin_35433448的博客 1025

【机器学习-西瓜书】三、线性回归;对数线性回归

墙裂推荐阅读:y的衍生物 关键词:最小二乘法;正则化;对数线性回归; y的衍生物 3.1 基本形式 假设样本x有d个属性,线性模型(linear model)试图学得一个通过属性的线性组合来进行预测的函数,即f(x)=w1x1+w2x2+⋅⋯+wdxd+bf(x)=w1x1+w2x2+⋅⋯+wdxd+bf(x)=w_{1}x_{1} + w_{2}x_{2}+\cdot \cdo...

人工智能技术学习与分享 1万+

记一次wireshark抓取QQ好友IP和火绒抓取微信IP

事情是这样的,,上个周,手机离奇的被盗,但没有关机,为了找回手机,粗学了一手QQ抓ip的手段。 这里我就直接做个演示,解析关键的点。 三种思路i. wireshark 抓取手机在线IPii 火绒抓取 微信在线接听IPiii 火绒抓取 微信在线不接听IP i. wireshark 抓取手机在线IP wireshark抓好友QQ的ip要求和对方打语音的时候要手机在线。 这里说一下,打语音和视频是直接能和对方建立连接,如果发文件,是直接发给腾讯的,抓不到包。 1.打开wireshark,通过电脑Tim给对方打语音

qq_29437513的博客 1万+

大模型驱动时序量化因子自动优化:从WorldQuant回测到实战策略

本文探讨了如何利用大模型驱动时序量化因子的自动优化,构建从创意生成到实战验证的完整流程。通过结合WorldQuant回测平台,搭建自动化流水线,详细拆解了因子生成、回测验证与迭代优化的核心模块。文章分享了从初版实现到进阶优化的实践经验,并指出提示词工程与领域知识注入是关键,旨在实现人机智能协作,提升量化策略研发效率。

wdx012345的博客 802

机器学习术语

## 绪论 machine learning 机器学习 model 模型 learning algorithm 学习算法 data set 数据集 instance 示例/ sample 样本 attribute 属性/ feature 特征 attribute value 属性值 attribute space 属性空间/ sample space 样本空间 f...

qq_35674954的博客 794

Cesium实战:从DEM数据到3D地形可视化的全流程解析

本文详细解析了从DEM数据到3D地形可视化的全流程,重点介绍了Cesium和Cesiumlab在数字高程模型(DEM)处理与地形数据转换中的应用。通过实战案例和工具对比,帮助开发者高效实现地形可视化,并分享性能优化与高级功能开发经验。

weixin_29079743的博客 336

回归分析什么时候取对数_线性回归模型,哪些变量取对数形式?

并不是大的量和小的量放在一起大的就要对数,那我必然要问你,为什么不选择开N次方呢?或者把小的求阶乘(当然这种操作可能也不太“自然”)?事实上选择如何处理特征是要有一定的“具象”理由的,常见的两个原因有:一:在对变量和预测值做线性相关性分析以后发现不是线性关系。你可以简单的理解为,随便挑一个特征x_0,把y=f(x_0)画出图来一看,线是弯的,本来就不是直的。然后我们就可以根据数据来猜测甚至干脆试试...

weixin_39984105的博客 6168

《点云进阶》专栏文章目录

点云进阶》专栏文章目录

点云侠的博客 4903

8位2路选择器设计

8位2路选择器设计

好好学习,天天向上 4286

平方误差之和SSE

下面这张图是一个简单的线性回归模型,图中标注了每个样本点预测值与真实值的残差。计算 SSE 为多少? A. 3.02 B. 0.75 C. 1.01 D. 0.604 答案:A 解析:SSE 是平方误差之和(Sum of Squared Error),SSE = (-0.2)^2 + (0.4)^2 + (-0.8)^2 + (1.3)^2 + (-0.7)^2 = 3.02...

zrh_优快云的博客 2万+

OpenHarmony电源管理驱动架构剖析:HDI框架下的低功耗实现

鸿蒙电源管理驱动模块是OpenHarmony操作系统中负责设备电源状态管理的核心组件。该模块基于HDI(Hardware Device Interface)框架实现,提供了完整的电源管理功能,包括系统休眠/唤醒、运行锁管理、休眠模式控制等核心功能。public:// 主要接口函数// 运行锁管理private:// 内部辅助函数// 成员变量public:// 运行锁控制接口// 回调管理private:// 内部辅助函数。

m0_67505153的博客 208

机器学习第四周——模型之母:线性回归

注:本篇博客内容来源 数据科学家联盟 公众号,以下为个人整理

jrsgdl1993的博客 192

5大绝招破解.NET Core本地IP访问难题——为什么你的调试总卡在localhost?

摘要: 本文详解5种本地IP访问.NET Core应用的方法,涵盖基础IP绑定(0.0.0.0)、防火墙配置、IIS Express优化、远程调试及ngrok内网穿透。关键步骤包括修改launchSettings.json、PowerShell授权端口、SSH远程调试和ngrok外网映射,并提示常见陷阱(如未绑定IP、防火墙拦截)。通过“魔法法则”组合,可实现局域网/外网高效访问,适用于开发测试场景。 (字数:148)

java专栏 954

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

一个月成为机器学习高手计划

接下来3天系统学习机器学习基础理论,厘清监督学习、无监督学习、强化学习的核心区别,理解损失函数、优化器、特征工程、模型评估等基础概念,掌握准确率、精确率、召回率、F1分数等评估指标原理,整理完整理论笔记,搭建知识体系。周一至周三主攻监督学习算法,深入学习线性回归、逻辑回归、决策树、随机森林、K近邻算法,推导算法原理,理解适用场景与优缺点,借助Sklearn库完成各算法的基础建模练习,针对分类、回归两类任务分别实操。周日复盘整个学习周期,总结学习方法与核心知识点,制定后续深度学习拓展计划,巩固学习成果。

wei12366的博客 241

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

线性回归(LinearRegression)实现房价预测

线性回归主要运用于来连续型特征样本的预测,本次预测数据主要以波士顿房价数据为列训练并评估模型。本次使用基本的最小二乘法和sklearn模块分别用于预测房价。 1、首先使用线性回归算法最小二乘法实现预测 导入需要的python库 import numpy as np import pandas as pd import pylab 建立computer_error函数,构造误差函数 ∑_(...

飛鹰 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【机器学习笔记1】一元线性回归模型及预测

一元线性回归、代价函数、梯度下降算法、样例(含数据)及代码

issey的博客 9991

第四周打卡:线性回归算法

前言 线性回归,回归算法 线性回归模型可以说是最重要的数学模型之一,很多模型都是建立在它的基础上,可以说是“模型之母”。 先从简单线性回归模型开始(单输入,单输出)熟悉线性回归算法的数学思想,公式推导,主要是通过公式推导将数学模型转化为可编程的程序语言,方便调用。 引出损失函数,还是通过数学公式的推导,对损失函数求最优解,即对公式推导,求最小损失函数导数为零时,可得损失函数的最值。 简单线性回归 ...

weixin_42749300的博客 296

第四周:线性回归

线性回归1 多元线性回归1.1 基本原理1.2 linear_model.LinearRegression2 多重共线性:岭回归与Lasso2.1 岭回归2.2 linear_model.Ridge2.3 Lasso2.4 linear_model.Lasso3 非线性问题:多项式回归 1 多元线性回归 1.1 基本原理 多元线性回归指的就是一个样本有多个特征的线性回归问题。对于一个有个特征的样本...

铁血阿张 385

第四周:线性回归算法

学习目标: 简单线性回归:简单线性回归及最小二乘法的数据推导 实践:简单线性回归实现及向量化应用 多元线性回归:多元线性回归和正规方程解及实现 线性回归和最小二乘法 《模型之母:简单线性回归&最小二乘法》 线性模型形式简单、易于建模,但却蕴藏着机器学习中一些重要的基本思想。在前文中已经写过,关于回归的定义—即特征是连续值类型。所谓简单线性回归,就是假设输入属性(特征变量)的数目只有一个...

Clearspring_17的博客 284

机器学习-线性回归(Linear Regression)模型

本文将会阐述线性回归相关的概论与知识,涉及方面较多,讲的较细致适合0基础入门

bigstone201的博客 5773

【机器学习】线性回归模型详解

接下来我们将要学习我们的第一个模型——线性回归。比如说我需要根据数据预测某个面积的房子可以卖多少钱m:训练样本数量x:输入值,又称为属性值y:输出值,是我们需要的结果我们会用xy(x,y)xy表示一整个训练样本,使用xiyixiyi来表示第i个样例我们将上图用表格表示出来如下:那么线性回归的预测模型如下:训练集输入到学习算法中,然后学习算法会根据数据训练出函数h。作为一个线性回归模型,其输出的h应该是hxθ0θ1xhxθ0​θ1。

weixin_45434953的博客 3993

机器学习第四周 线性回归算法

机器学习第四周 线性回归算法 一、学习目标: 简单线性回归:简单线性回归及最小二乘法的数据推导 实践:简单线性回归实现及向量化应用 多元线性回归:多选线性回归和正规方程解及实现 二、参考资料: 1.《模型之母:简单线性回归&最小二乘法》https://mp.weixin.qq.com/s/ESKQKi_1K_WPXNistizDVw 2.《模型之母:简单线性回归的代码实现》https:...

long636的专栏 414

机器学习第四周-线性回归算法

学习内容 简单线性回归 最小二乘法数据推导 简单线性回归向量化应用 多元性回归和正规方程实现 一、简单线性回归概念 Label为连续数值型,如房价、股票价格、降雨量,只有一个样本特征,即只有一个自变量,回归是指用方程来模拟变量之间是如何关联的。 我们所谓的建模过程,其实就是找到一个模型,最大程度的拟合我们的数据,要想最大的拟合数据,本质上就是找到没有拟合的部分,也就是损失的部分尽量小,就是损...

maplepiece1999的博客 312
上一篇: 第三周:简单的数据预处理和特征工程
下一篇: 零基础入门数据挖掘-Task1 赛题理解
Zee_Chao
博客等级 码龄11年 168粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值