我刚开始学习机器,学习了一些基本的算法,我脑子里有一个愚蠢的疑问,我找不到答案。在机器学习算法中,根据给出的数据来解决各种问题,我们实际研究了什么?
以线性回归为例:
为什么这个算法中实际上有一个“学习”字?虽然我们是讲述如何执行步骤,我们已经提供了所有的数学在这一算法。
发布于 2019-07-22 10:39:53
让我举个例子来解释一下,
考虑到我们有一个具有X1、X2和Y特性的数据集是目标值。现在,在机器学习中,我们的任务是得到一个方程,它应该计算与目标值一样接近的值。
考虑一个简单的等式,
f(X) = w1X1 + w2X2 +b
在这里,我们的目标是确定权重的最佳值,即w1和w2,使f(X) ~Y。
通常,最初f(X)给出一个非常不同的值(因为权重没有调优),但是随着每次迭代(时代),f(x)变得更好(权值被调优),即称为“参数学习”。
发布于 2019-07-23 13:11:50
我想指出的是,在先前的答覆中,有一点没有充分反映出来。当您从线性回归开始时,您基本上( I)提出了一些模型(如何表示y和X之间的关系),例如一个线性函数,以及( II)指定一个损失函数(平方残差之和)。其目的是找到系数(或权重),它以一种方式将X映射到y,因此没有“更好的方法”来预测y (即。最小化平方残差之和)。
在线性回归的情况下,您有两个选择:通过解析或梯度体面解决问题。最优系数/权重(向量β)由以下方法提供:
因此,在这种情况下,不需要梯度体面。它只是简单的矩阵代数。
来源:https://www.r-bloggers.com/regression-via-gradient-descent-in-r/
# Input some data
x0 <- c(1,1,1,1,1)
x1 <- c(1,2,3,4,5)
x2 <- c(8,4,3,1,8)
x <- as.matrix(cbind(x0,x1,x2))
y <- as.matrix(c(3,7,5,11,14))
# (X'X)^-1 X'y
beta1 = solve(t(x)%*%x) %*% t(x)%*%y
# R's regression command
beta2 = summary(lm(y ~ x[, 2:3]))
# Gradient decent
m <- nrow(y)
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, 0), nrow=1) # Initialize the parameters
alpha = .05 # Learning rate
for (i in 1:maxit) {
theta <- theta - alpha * grad(x, y, theta)
}
return(theta)
}
# Results
print(grad.descent(x,2000))
print(beta1)
print(beta2)> print(grad.descent(x,2000))
x0 x1 x2
[1,] -0.672238 2.6459 0.1530299
> print(beta1)
[,1]
x0 -0.6722955
x1 2.6459103
x2 0.1530343
> print(beta2)
Call:
lm(formula = y ~ x[, 2:3])
Residuals:
1 2 3 4 5
-0.1979 1.7683 -2.7245 0.9356 0.2185
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.6723 3.3565 -0.200 0.8598
x[, 2:3]x1 2.6459 0.7677 3.447 0.0748 .
x[, 2:3]x2 0.1530 0.3897 0.393 0.7325
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.399 on 2 degrees of freedom
Multiple R-squared: 0.8561, Adjusted R-squared: 0.7122
F-statistic: 5.949 on 2 and 2 DF, p-value: 0.1439因此,正如你所看到的,解决这个问题的机器并不多(当然除了做数学之外)。那为什么是机器学习呢?不断增加的计算能力使得使用梯度体面来解决非常复杂的问题成为可能。其思想是您脱离简单的解决方案,寻找更好、更复杂的方法将X映射到y。
您可以考虑更改基本过程,例如使用决策树而不是线性函数。因为一棵树可能只是一个弱学习者,所以你可以将树组合成一个随机森林。或者你更进一步,使用增强,在其中你反复使用信息中包含的残余,以提高你的健康。通常是很小的树用来做这件事。,但您也可以使用线性回归boost。
(出发地:助推算法:正则化、预测和模型拟合)
library(glmnet)
# Simple boosting example from:
# P. Bühlmann, T. Hothorn (2007), "Boosting Algorithms: Regularization, Prediction and Model Fitting", Statistical Science 22(4), p. 477-505.
# L2-Boosting from Section 3.3 (p. 483)
#######################
# Data
x = matrix(c(130,165,150,150,140,198,307,350,318,304,302,429),nrow=6,ncol=2,byrow = TRUE)
y = c(18,15,18,16,17,15)
# Parameter
# This works like a learning rate
nu = 0.1
# Early stopping (SSR value to stop)
es = 7.58765583743327
# Max. iterations (of boosting)
maxiter = 10000
#######################
# OLS benchmark model
olsdata = data.frame(cbind(y,x))
ols = lm(y~.,data=olsdata)
olspreds = predict(ols,newdata=olsdata)
olsssr = sum((y-olspreds)^2)
print(paste0("OLS SSE: ",olsssr))
#######################
# Boosting
# Initialize f0
f0 = mean(y)
f0ssr = sum((y-f0)^2)
# Lists to store results per boosting iteration
ssrlist = list()
bstep = list()
# Boosting (p. 483, Sec. 3.3, L2-Boosting)
for (n in seq(1:maxiter)){
# I) Get residual
if(n==1){f=f0} # initialize in first step
u=y-f # get residual from estimation
# II) Fit residual / predict, I use ridge (alpha=0)
reg = glmnet(x,u,alpha=0, lambda=2)
g = predict(reg, newx=x, type="link")
# III) Update f
f=f+nu*g
# Print feedback
cat(paste0("Step: ", n," SSR: ", sum(u^2), "\n" ))
# Save SSR/iter to list
ssrlist[[n]] <- sum(u^2)
bstep[[n]] <- n
# Early stopping rule
if(sum(u^2)<es){break}
}
#######################
# End statement
cat("\n ~~~ RESULTS ~~~ \n")
cat(paste0("OLS SSR: ", olsssr, "\n"))
cat(paste0("Initialised SSR: ", f0ssr, "\n"))
cat(paste0("Last SSR boosting: ", ssrlist[length(ssrlist)], " [after ",bstep[length(bstep)], " iterations] \n"))这里的问题是,您不仅需要解决一个回归,还需要解决10000 (在这里的示例中)。在现实世界的应用中,必须做的数学数量是巨大的(包括助推和神经网络)。
那么什么是机器学习呢?你想让“机器学习东西”(识别数据中的模式,识别图像,基于此进行预测等),你很可能无法用笔和纸来完成这个学习任务。随着时间的推移,计算能力的提高使我们能够解决非常复杂的问题。由于这种廉价的资源,新的工具和方法正在发展。今天,你可以在笔记本电脑上做一些事情,这在20世纪90年代末似乎是不可能的。
当然,你需要告诉“机器”如何学习。这是大量的统计数据,也是计算机科学。神经网络,例如大部分都是由计算机科学家提出的。最终,这台机器只是一种工具,但却是一种非常有用的工具。
发布于 2019-07-22 09:32:34
机器学习是一个非常广阔的领域,每个人都会对你的问题有不同的答案。这里是我的:在机器学习中,“学习”一词是指通过梯度下降(例如神经网络)或另一种算法(EM算法,K-均值聚类)迭代地改进模型的过程。
例如,假设您想要识别狗/猫的图像。在梯度下降期间,您将调整模型系数,以减少损失,这将导致更好的图像分类。换句话说,你要学会区分狗和猫。
https://datascience.stackexchange.com/questions/56139
复制相似问题