- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试在 R 中从头开始执行线性回归,而不使用任何包或库。我使用的数据是:
UCI Machine Learning Repository, Bike-Sharing-Dataset
我必须对这个回归应用批量更新梯度下降算法。
我编写了以下代码:
> # Load the data
> data <- read.csv("Bike-Sharing-Dataset/hour.csv")
>
> # Select the useable features
> data1 <- data[, c("season", "mnth", "hr", "holiday", "weekday", "workingday", "weathersit", "temp", "atemp", "hum", "windspeed", "cnt")]
>
> # Examine the data structure
> str(data1)
'data.frame': 17379 obs. of 12 variables:
$ season : int 1 1 1 1 1 1 1 1 1 1 ...
$ mnth : int 1 1 1 1 1 1 1 1 1 1 ...
$ hr : int 0 1 2 3 4 5 6 7 8 9 ...
$ holiday : int 0 0 0 0 0 0 0 0 0 0 ...
$ weekday : int 6 6 6 6 6 6 6 6 6 6 ...
$ workingday: int 0 0 0 0 0 0 0 0 0 0 ...
$ weathersit: int 1 1 1 1 1 2 1 1 1 1 ...
$ temp : num 0.24 0.22 0.22 0.24 0.24 0.24 0.22 0.2 0.24 0.32 ...
$ atemp : num 0.288 0.273 0.273 0.288 0.288 ...
$ hum : num 0.81 0.8 0.8 0.75 0.75 0.75 0.8 0.86 0.75 0.76 ...
$ windspeed : num 0 0 0 0 0 0.0896 0 0 0 0 ...
$ cnt : int 16 40 32 13 1 1 2 3 8 14 ...
>
> summary(data1)
season mnth hr holiday weekday workingday weathersit
Min. :1.000 Min. : 1.000 Min. : 0.00 Min. :0.00000 Min. :0.000 Min. :0.0000 Min. :1.000
1st Qu.:2.000 1st Qu.: 4.000 1st Qu.: 6.00 1st Qu.:0.00000 1st Qu.:1.000 1st Qu.:0.0000 1st Qu.:1.000
Median :3.000 Median : 7.000 Median :12.00 Median :0.00000 Median :3.000 Median :1.0000 Median :1.000
Mean :2.502 Mean : 6.538 Mean :11.55 Mean :0.02877 Mean :3.004 Mean :0.6827 Mean :1.425
3rd Qu.:3.000 3rd Qu.:10.000 3rd Qu.:18.00 3rd Qu.:0.00000 3rd Qu.:5.000 3rd Qu.:1.0000 3rd Qu.:2.000
Max. :4.000 Max. :12.000 Max. :23.00 Max. :1.00000 Max. :6.000 Max. :1.0000 Max. :4.000
temp atemp hum windspeed cnt
Min. :0.020 Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. : 1.0
1st Qu.:0.340 1st Qu.:0.3333 1st Qu.:0.4800 1st Qu.:0.1045 1st Qu.: 40.0
Median :0.500 Median :0.4848 Median :0.6300 Median :0.1940 Median :142.0
Mean :0.497 Mean :0.4758 Mean :0.6272 Mean :0.1901 Mean :189.5
3rd Qu.:0.660 3rd Qu.:0.6212 3rd Qu.:0.7800 3rd Qu.:0.2537 3rd Qu.:281.0
Max. :1.000 Max. :1.0000 Max. :1.0000 Max. :0.8507 Max. :977.0
>
> x0 <- rep(1, nrow(data1)) # column of 1's
> x1 <- data1[, c("season", "mnth", "hr", "holiday", "weekday", "workingday", "weathersit", "temp", "atemp", "hum", "windspeed")]
> # create the x- matrix of explanatory variables
> x <- as.matrix(cbind(x0,x1))
>
> # create the y-matrix of dependent variables
>
> y <- as.matrix(data1$cnt)
> m <- nrow(y)
>
> solve(t(x)%*%x)%*%t(x)%*%y
[,1]
x0 29.1810525
season 18.9876496
mnth 0.1589082
hr 7.4613187
holiday -20.5845740
weekday 1.7134883
workingday 3.6982194
weathersit -1.3296468
temp 93.0022705
atemp 227.1855491
hum -222.1211201
windspeed 28.4864449
>
> # define the gradient function dJ/dtheata: 1/m * (h(x)-y))*x where h(x) = x*theta
> # in matrix form this is as follows:
> grad <- function(x, y, theta) {
+ gradient <- (1/m)* (t(x) %*% ((x %*% t(theta)) - y))
+ return(t(gradient))
+ }
> # define gradient descent update algorithm
> grad.descent <- function(x, maxit){
+ theta <- matrix(c(0, 0), nrow=1) # Initialize the parameters
+
+ alpha = .05 # set learning rate
+ for (i in 1:maxit) {
+ theta <- theta - alpha * grad(x, y, theta)
+ }
+ return(theta)
+ }
当我尝试调用该函数并打印梯度下降的结果时,出现以下错误:
> print(grad.descent(x,1000))
Show Traceback
Rerun with Debug
Error in x %*% t(theta) : non-conformable arguments
> beta <- grad.descent(x,1000)
Error in x %*% t(theta) : non-conformable arguments
这是什么意思,我该如何解决?
最佳答案
尝试以下操作:
grad.descent <- function(x, maxit){
theta <- matrix(rep(0, length=ncol(x)), nrow = 1)
alpha = .05 # set learning rate
for (i in 1:maxit) {
theta <- theta - alpha * grad(x, y, theta)
}
return(theta)
}
grad.descent(x,10)
x0 season mnth hr
[1,] -14980121331 -39045685399 -103624114379 -217515123951
holiday weekday workingday weathersit temp
[1,] -428141889 -45772773208 -10250464667 -21311163894 -7687568533
atemp hum windspeed
[1,] -7340863806 -9108715961 -2927915227
错误 non-conformable arguments
几乎总是表示您的矩阵的某些维度不匹配。在本例中,您将 theta
初始化为维度为 (1,2) 的矩阵,但您有十二个变量。
在相关说明中,您的步长相当大,这就是为什么您最终可能会得到奇怪的结果。要看到这一点,让我们使用以下内容:
grad <- function(x, y, theta) { # note that for readability, I redefined theta as a column vector
gradient <- 1/m* t(x) %*% (x %*% theta - y)
return(gradient)
}
grad.descent <- function(x, maxit, alpha){
theta <- matrix(rep(0, length=ncol(x)), ncol = 1)
for (i in 1:maxit) {
theta <- theta - alpha * grad(x, y, theta)
}
return(theta)
}
让我们用 0.05 和 0.005 的 alpha 来做:
data.frame(alpha_0.05 = grad.descent(x, maxit = 1000, alpha = 0.05),
alpha_0.005 = grad.descent(x, maxit = 1000, alpha = 0.005))
alpha_0.05 alpha_0.005
x0 NaN 6.253737
season NaN 31.968743
mnth NaN -2.317199
hr NaN 9.904181
holiday NaN -2.986200
weekday NaN 2.982280
workingday NaN 8.961909
weathersit NaN -26.145486
temp NaN 46.509991
atemp NaN 41.258458
hum NaN -29.508986
windspeed NaN 7.632146
关于r - 梯度下降算法错误 non-comformable arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46160343/
我正在尝试调整 tf DeepDream 教程代码以使用另一个模型。现在当我调用 tf.gradients() 时: t_grad = tf.gradients(t_score, t_input)[0
考虑到 tensorflow 中 mnist 上的一个简单的小批量梯度下降问题(就像在这个 tutorial 中),我如何单独检索批次中每个示例的梯度。 tf.gradients()似乎返回批次中所有
当我在 numpy 中计算屏蔽数组的梯度时 import numpy as np import numpy.ma as ma x = np.array([100, 2, 3, 5, 5, 5, 10,
除了数值计算之外,是否有一种快速方法来获取协方差矩阵(我的网络激活)的导数? 我试图将其用作深度神经网络中成本函数中的惩罚项,但为了通过我的层反向传播误差,我需要获得导数。 在Matlab中,如果“a
我有一个计算 3D 空间标量场值的函数,所以我为它提供 x、y 和 z 坐标(由 numpy.meshgrid 获得)的 3D 张量,并在各处使用元素运算。这按预期工作。 现在我需要计算标量场的梯度。
我正在使用内核密度估计 (KDE) ( http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.gaussian_kde.htm
我对 tensorflow gradient documentation 中的示例感到困惑用于计算梯度。 a = tf.constant(0.) b = 2 * a g = tf.gradients(
我有一个 softmax 层(只有激活本身,没有将输入乘以权重的线性部分),我想对其进行向后传递。 我找到了很多关于 SO 的教程/答案来处理它,但它们似乎都使用 X 作为 (1, n_inputs)
仅供引用,我正在尝试使用 Tensorflow 实现梯度下降算法。 我有一个矩阵X [ x1 x2 x3 x4 ] [ x5 x6 x7 x8 ] 我乘以一些特征向量 Y 得到 Z [ y
我目前有一个由几百万个不均匀分布的粒子组成的体积,每个粒子都有一个属性(对于那些好奇的人来说是潜在的),我想为其计算局部力(加速度)。 np.gradient 仅适用于均匀间隔的数据,我在这里查看:S
我正在寻找有关如何实现 Gradient (steepest) Descent 的建议在 C 中。我正在寻找 f(x)=||Ax-y||^2 的最小值,其中给出了 A(n,n) 和 y(n)。 这在
我正在查看 SVM 损失和导数的代码,我确实理解了损失,但我无法理解如何以矢量化方式计算梯度 def svm_loss_vectorized(W, X, y, reg): loss = 0.0 dW
我正在寻找一种有效的方法来计算 Julia 中多维数组的导数。准确地说,我想要一个等效的 numpy.gradient在 Julia 。但是,Julia 函数 diff : 仅适用于二维数组 沿微分维
我在cathesian 2D 系统中有两个点,它们都给了我向量的起点和终点。现在我需要新向量和 x 轴之间的角度。 我知道梯度 = (y2-y1)/(x2-x1) 并且我知道角度 = arctan(g
我有一个 2D 数组正弦模式,想要绘制该函数的 x 和 y 梯度。我有一个二维数组 image_data : def get_image(params): # do some maths on
假设我有一个针对 MNIST 数据的简单 TensorFlow 模型,如下所示 import tensorflow as tf from tensorflow.examples.tutorials.m
我想查看我的 Tensorflow LSTM 随时间变化的梯度,例如,绘制从 t=N 到 t=0 的梯度范数。问题是,如何从 Tensorflow 中获取每个时间步长的梯度? 最佳答案 在图中定义:
我有一个简单的神经网络,我试图通过使用如下回调使用张量板绘制梯度: class GradientCallback(tf.keras.callbacks.Callback): console =
在CIFAR-10教程中,我注意到变量被放置在CPU内存中,但它在cifar10-train.py中有说明。它是使用单个 GPU 进行训练的。 我很困惑..图层/激活是否存储在 GPU 中?或者,梯度
我有一个 tensorflow 模型,其中层的输出是二维张量,例如 t = [[1,2], [3,4]] . 下一层需要一个由该张量的每一行组合组成的输入。也就是说,我需要把它变成t_new = [[
我是一名优秀的程序员,十分优秀!