回归与分类

回归与分类

机器学习的主要任务便是聚焦于两个问题:回归与分类

回归与分类

回归的定义

  • 机器学习的过程就是寻找函数的过程,通过训练获得一个函数映射,给定函数的输入,函数会给出相应的一个输出,若输出结果是一个数值scalar时,即称这一类机器学习问题为回归问题
  • 就如李宏毅老师所说:Regression就是找到一个函数function,通过输入特征x,输出一个数值scalar
  • 例如:房价数据,根据位置、周边、配套等等这些维度,给出一个房价的预测

分类与回归的区别

  • 分类是基于数据集,作出分类选择
  • 分类与回归区别在一输出变量的类型
  • 输出是离散的就可以做分类问题,即通常多个输出,输出i是预测为第i类的置信度
  • 输出是连续的就可以做回归问题 ,即单连续值输出,跟真实值区别作为损失

模型步骤

  • step1:模型假设,选择模型框架(线性模型)
  • step2:模型评估,如何判断众多模型的好坏(损失函数)
  • step3:模型优化,如何筛选最优的模型(梯度下降)

一、线性模型

step1 模型假设

  • 给定n维输入 x = [x1,x2,....,xn]^T
  • 线性模型有一个n维权重和一个标量偏差 即w与b
  • 输出是输入的加权和 y = w1x1 + w2x2 + ... +wnxn +b
  • 向量版本 y = <w,x> + b

假设1:影响房价的关键因素是卧室个数,卫生间个数,和居住面积,记为x1,x2,x3

假设2:成交价是关键因素的加权和 则 y = w1x1 + w2x2 +w3x3 + b,

权重和偏置的实际值在后面决定

step2 模型评估(衡量预估质量)

  • 收集和训练数据
  • 如何判断众多模型的好坏(根据损失函数判断)

1.平方损失 y为真实值,y1为估计值(预测值)
$$
p(y,y1) = 1/2(y-y1)^2
$$
2.训练损失
$$
p(X,y,w,b) = ∑(y[i] - (b + <w,x[i]>))^2
$$

step3 选取最优模型(梯度下降)

  • 为了获得最优模型故要使L(w,b)损失函数值最小化,而对于L(w,b)实质上就是w,b的函数,因此可以通过求偏微分来寻找其最小化损失点

最小化损失学习参数
$$
w* , b* = arg min(X,y,w,b)
$$

  • 而对于梯度下降来讲

  • 1.首先要挑选一个初始值 w0,同时引入学习率(步长的超参数) η

  • 2.重复迭代参数 t =1,2,3

  • 3.沿梯度方向将增加损失函数值
    $$
    w[t] = w[t-1] -η*(∂L/∂w[t-1])
    $$

注:上式中减号意思为沿着梯度反方向

import numpy as np
import matplotlib.pyplot as plt

def my_func(x): #定义原函数
    return x**4 + 2*x**3 - 3*x**2 -2*x
def grad_func(x): #定义导数
    return 4*x**3 + 6*x**2 -6*x -2

eta = 0.09 #学习系数
x = -1.5 #定义自变量x起始值
record_x = [] #记录x值
record_y = [] #记录y值

for i in range(20): #将x循环20次
    y = my_func(x)
    record_x.append(x) #将记录添加
    record_y.append(y)
    x -= eta*grad_func(x) #梯度下降法公式 学习系数*导数值

x_f = np.linspace(-2.8,1.6)
y_f = my_func(x_f)

plt.plot(x_f,y_f)
plt.scatter(record_x,record_y)
plt.xlabel("x", size=14)
plt.ylabel("y", size=14)
plt.grid()
plt.show()

二、广义线性模型(generalized linear model)

$$
y=g^-1 (w^Tx+b)
$$

上面式子即为广义线性模型的一种表达,其中g(.)被称为联系函数,同时要求单调可微。使用广义线性模型可以实现强大的非线性函数映射功能(比如对数线性回归,令g(.) = ln(.),此时模型预测值对应的是真实值标记在指数尺度上的变化)

那么线性模型的输出是一个实值,而分类任务的标记是离散值,怎么把二者联系起来呢?

  • 广义线性模型已经给了我们答案,我们要做的是找到一个单调可微的联系函数,把二者联系起来
  • 对于一个二分类任务,比较理想的函数是阶跃函数(激活函数)
对数线性回归(log-linear regression)

由于单位阶跃函数不连续,所以不能直接用作联系函数。故思路转换为如何在一定程度上近似单位阶跃函数呢? 对数几率函数正是我们所需常用的替代函数:sigmoid函数

  • 对于分类任务,由于是离散的数据,可以通过广义线性模型的非线性函数映射进行,简单来说将其离散数据映射在相似函数之上,也就是激活函数

总结

那么对于一整个回归过程来说 首要要假设模型去进行预选,接着要进行模型的评估计算损失函数,最后一步则是对损失函数进行优化即梯度下降算法

将一整个回归过程放在神经网络中时 在正向传播中,首先进行将数据值x进行输入,其次通过权值和的计算以及激活函数得到输出值,传输至第二层,层层往下,最后输出值 根据输出值与真实值之间的distance即为loss函数

posted @ 2022-08-17 23:05  Sanoy  阅读(529)  评论(0编辑  收藏  举报