【机器学习】有监督算法基础

有监督学习的概念

  • 有监督的学习的主要任务是根据数据对象的特征,预测其标签,相应的学习算法需要对经验学习
  • 经验来自带标签的训练数据,训练数据是从数据对象集合中随机采样的数据,也称样本

特征组(特征)


定义特征组在有监督的学习任务中,每个数据对象的n个特征构成的向量 x = ( x 1 , x 2 , . . . , x n ) ∈ R n x=(x_{1},x_{2},...,x_{n})\in R^n x=(x1,x2,...,xn)Rn,称该对象的特征组,也就是特征向量。设 X ⊆ R n X\subseteq R^n XRn是特征组的所有可能取值构成的集合,称 X X X样本空间

标签


定义:在回归问题中,训练数据含有一个数值标签 y ∈ R y \in R yR;在 k k k元分类问题中,训练数据含有一个向量标签 y ∈ [ 0 , 1 ] k y\in[0,1]^k y[0,1]k。设 Y Y Y为全体可能的标签取值,称 Y Y Y为标签空间。
分类问题
例如:手写数字识别问题: y ∈ [ 0 , 1 ] 10 y\in [0,1]^{10} y[0,1]10

  1. 数字3的向量标签: y = ( 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) y=(0,0,0,1,0,0,0,0,0,0,0) y=(0,0,0,1,0,0,0,0,0,0,0)
  2. 数字3的标量标签: y = 3 , y ∈ Y , Y = { 0 , 1 , 2 , 3 , . . . , 9 } y=3,y\in Y,Y=\{0,1,2,3,...,9\} y=3,yY,Y={0,1,2,3,...,9}

模型


定义:设 X X X为样本空间, Y Y Y为标签空间, ϕ \phi ϕ X − > Y X->Y X>Y映射集合,称 ϕ \phi ϕ模型空间,任意的模型空间中的映射 h ∈ ϕ h\in \phi hϕ,称为一个模型

有监督学习任务


定义:给定样本空间 X X X,标签空间 Y Y Y,未知的特征分布 D D D与标签分布 { D x : x ∈ X } \{D_{x}:x\in X\} {Dx:xX}有监督的学习任务是训练一个模型 h h h,即计算从 X X X Y Y Y的一个映射,记作: h : X − > Y h:X->Y h:X>Y对任意的样本的特征向量 x x x,由 h ( x ) h(x) h(x)作为对 x x x的标签的预测。 y ^ = h ( x ) \hat{y}=h(x) y^=h(x)

损失函数


定义:设 X X X是样本空间, Y Y Y是标签空间,损失函数是一个从 Y × Y Y\times Y Y×Y到正实数 R + R+ R+的函数 l : Y × Y − > R + l:Y\times Y->R^+ l:Y×Y>R+:并要其满足如以下性质,对任意 y ∈ Y y\in Y yY,有 l ( y , y ) = 0 l(y,y)=0 l(y,y)=0例如:0-1损失函数 l ( y , y ^ ) = { 0 , i f   y = y ^ 1 , o t h e r w i s e l(y,\hat{y})= \left\{\begin{aligned}0, if\ y=\hat{y}\\1,otherwise\end{aligned}\right. l(y,y^)={0,if y=y^1,otherwise
其中: y ^ = h ( x ) , x ∈ X , y ^ ∈ Y \hat{y}=h(x),x\in X,\hat{y}\in Y y^=h(x),xX,y^Y( y y y是样本的标签真实值, y ^ \hat{y} y^是对样本x的标签预测值)

例如:平方损失函数 l ( y , y ^ ) = ( y − y ^ ) 2 , y , y ^ ∈ R l(y,\hat{y})=(y-\hat{y})^2,y,\hat{y}\in R l(y,y^)=(yy^)2,y,y^R

测试数据与模型度量(测试误差)


在有监督学习中,给定样本空间 X X X,标签空间 Y Y Y未知的特征分布 D D D与标签分布 { D x : x ∈ X } , \{D_x:x\in X\}, {Dx:xX}假设有监督学习算法输出的模型型为 h h h。给定一组数据 T = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( t ) , y ( t ) ) } T=\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(t)},y^{(t)})\} T={(x(1),y(1)),(x(2),y(2)),...,(x(t),y(t))}其中, x ( 1 ) , x ( 2 ) , . . . , x ( t ) ∼ D , x^{(1)},x^{(2)},...,x^{(t)}\thicksim D, x(1),x(2),...,x(t)D, X X X中依据特征分布 D D D的独立采样,并且对任意 1 ≤ i ≤ t , 1\leq i\leq t, 1it, y ( i ) ∼ D x ( i ) , y^{(i)}\thicksim D_{x^{(i)}}, y(i)Dx(i), T T T测试数据集,用模型 h h h在测试数据集 T T T上的平均损失 L T ( h ) = 1 t ∑ i = 1 t l ( h ( x ( i ) , y ( i ) ) ) L_T(h)=\frac{1}{t}\sum_{i=1}^{t}l(h(x^{(i)},y^{(i)})) LT(h)=t1i=1tl(h(x(i),y(i)))作为模型 h h h效果的度量
当测试数据规模足够大时,经验损失能够良好近似期望损失。

一般来说 给定数据集(不清楚其分布 D D D),首先将其以一定的比例随机分成测试集合和训练集合,这样两个集合都会满足其原集合的分布 D D D,在训练集合上训练得出模型 h h h,在测试集合上计算损失,作为模型 h h h的效果度量

经验损失最小化算法架构(训练误差)

给定损失函数 l , l, l以及给定一组数据 S = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( t ) , y ( t ) ) } S=\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(t)},y^{(t)})\} S={(x(1),y(1)),(x(2),y(2)),...,(x(t),y(t))}其中, x ( 1 ) , x ( 2 ) , . . . , x ( t ) ∼ D , x^{(1)},x^{(2)},...,x^{(t)}\thicksim D, x(1),x(2),...,x(t)D, X X X中依据特征分布 D D D的独立采样,并且对任意 1 ≤ i ≤ t , 1\leq i\leq t, 1it, y ( i ) ∼ D x ( i ) , y^{(i)}\thicksim D_{x^{(i)}}, y(i)Dx(i), S S S训练数据集,在训练数据集上训练得到的模型 h h h训练数据 S S S上的平均损失 L S ( h ) = 1 t ∑ i = 1 t l ( h ( x ( i ) , y ( i ) ) ) L_S(h)=\frac{1}{t}\sum_{i=1}^{t}l(h(x^{(i)},y^{(i)})) LS(h)=t1i=1tl(h(x(i),y(i)))作为模型 h h h经验损失
无约束经验损失最小化算法架构
  给定样本空间 X X X,标签空间 Y Y Y,模型空间 Φ \varPhi Φ
  损失函数: l : Y × Y − > R + l:Y\times Y->R^+ l:Y×Y>R+
  输入: m m m个训练数据 S = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) } S=\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)})\} S={(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}
  输出模型: h s = arg min ⁡ h ∈ ϕ L s ( h ) h_{s}=\argmin_{h\in\phi}L_s(h) hs=argminhϕLs(h)
特点 h s ( x ) h_s(x) hs(x)在训练数据 S S S上的经验损失 L s ( h ) = 0 L_s(h)=0 Ls(h)=0,无约束经验损失最小化算法,容易带来过度拟合问题
ps:无约束指的是空间( ϕ \phi ϕ)无约束(所有符合要求的模型组成的模型空间)
过度拟合示例
  假定样本空间X=[-1,1],特征分布D是X上的均匀分布,标签空间Y=ℝ,标签分布Dx=N(x, 0.3)是期望为x且标准差是0.3的正态分布,损失函数是平方损失函数。

过度拟合:训练误差小,测试误差大!

  1. h s ( x ) h_s(x) hs(x)训练数据 S S S上的经验损失 L S ( h ) L_S(h) LS(h)----训练误差
  2. h s ( x ) h_s(x) hs(x)测试数据 S S S上的经验损失 L T ( h ) L_T(h) LT(h)----测试误差
    ·过拟合:训练误差小,测试误差大
    ·欠拟合:训练误差比较大
    ·泛化能力:训练误差小,测试误差小

我们致力于模型的泛化能力,防止拟合的方法:

  1. 引入模型假设(对标签分布或者模型结构做出恰当的假设,比如上面的例子,可以假设为线性模型)
  2. 正则化( L 1 、 L 2 L_1、L_2 L1L2正则化)
  3. d r o p o u t dropout dropout(用于深度神经网络)
  4. 扩大训练样本

经验损失最小化实例:墨渍分类


在这里插入图片描述

from sklearn.datasets._samples_generator import make_blobs
import pandas as pd
import matplotlib.pylab as plt
import numpy as np
from sklearn.model_selection import train_test_split


# 感知器算法
class Perception:
    def __init__(self):
        self.b = None
        self.w = None

    def fit(self, X, y):
        m, n = X.shape
        w = np.zeros((n, 1))
        b = 0
        done = False
        while not done:
            done = True
            for i in range(m):
                x = X[i].reshape(1, -1)
                if y[i] * (x.dot(w) + b) <= 0:
                    w = w + y[i] * x.T
                    b = b + y[i]
                    done = False
        self.w = w
        self.b = b

    def predict(self, x):
        return np.sign(x.dot(self.w) + self.b)


# 构建数据集合
X, y = make_blobs(n_samples=100, centers=2, n_features=2, cluster_std=0.6, random_state=0)
y[y == 0] = -1
data = pd.DataFrame(X, columns=['x1', 'x2'])
data['y'] = y
# 根据题意:划分不同的test_size
fig, axes = plt.subplots(nrows=2, ncols=3, figsize=(12, 8))
axes = axes.ravel()
ax1 =fig.add_subplot(131)
ax1.plot(data['x1'][data['y'] == 1], data['x2'][data['y'] == 1], "bs", ms=3)
ax1.plot(data['x1'][data['y'] == -1], data['x2'][data['y'] == -1], "rs", ms=3)
ax1.set_title('Original Data')


for i, test_size in enumerate([0.5, 0.4, 0.3, 0.2], start=1):
    print(i,test_size)
    # 划分数据集(训练集,测试集)
    X_train, X_test, y_train, y_test = train_test_split(data[['x1', 'x2']], data['y'], test_size=test_size)
    # 训练模型
    model = Perception()
    model.fit(np.array(X_train), np.array(y_train))
    w = model.w
    b = model.b

    # 作图
    if i == 3:
        i = i+2
    ax = axes[i]
    ax.plot(data['x1'][data['y'] == 1], data['x2'][data['y'] == 1], "bs", ms=3)
    ax.plot(data['x1'][data['y'] == -1], data['x2'][data['y'] == -1], "rs", ms=3)
    ax.set_title('Test Size: {:.1f}'.format(test_size))
    x_0 = np.linspace(-1, 3.5, 200)
    line = -w[0] / w[1] * x_0 - b / w[1]
    ax.plot(x_0, line)

plt.subplots_adjust(hspace=0.3)
plt.show()



在这里插入图片描述
结论:

  1. 在所有的测试集比例下,感知机模型都表现出了较好的分类效果,成功将数据集分为了两个簇。
  2. 在测试集比例为0.2的情况下,模型的表现最好,分类效果最接近真实分界线。

正则化算法


前言:

  • 经验损失最小化的过程中,合理的选择模型假设,是避免过度拟合的有效方法
  • 尽管选取了模型假设,还是有可能发生过拟合,如何处理?正则化算法

正则化常用策略:

  • L 1 L_1 L1正则化
  • L 2 L_2 L2正则化

奥卡姆剃刀法则:如无必要,勿增实体

例如:每个 n n n元线性函数 h ( x ) = < w , x > + b , x ∈ R n h(x)=<w,x>+b,x\in R^n h(x)=<w,x>+b,xRn都可以用 n + 1 n+1 n+1个参数表示: w = ( w 1 , w 2 , . . . , w n ) 和 b w=(w_1,w_2,...,w_n)和b w=(w1,w2,...,wn)b h w h_w hw表示由 w = ( w 1 , w 2 , . . . , w n ) w=(w_1,w_2,...,w_n) w=(w1,w2,...,wn)这组参数表示的模型。
机器学习中,用参数 w w w的范数来量化模型 h w h_w hw的复杂度 L 1 范数: ∣ w ∣ = ∣ w 1 ∣ + ∣ w 2 ∣ + . . . + ∣ w n ∣ L_1范数: |w|=|w_1|+|w_2|+...+|w_n| L1范数:w=w1+w2+...+wn L 2 范数: ∣ ∣ w ∣ ∣ = w 1 2 + w 2 2 + . . . + w n 2 L_2范数:||w||=\sqrt{w_1^2+w_2^2+...+w_n^2} L2范数:∣∣w∣∣=w12+w22+...+wn2

ps:我们追求的是 h w h_w hw复杂度低,所以就是 w w w向量维数且值


L 1 范数: ∣ w ∣ = ∣ w 1 ∣ + ∣ w 2 ∣ + . . . + ∣ w n ∣ L_1范数: |w|=|w_1|+|w_2|+...+|w_n| L1范数:w=w1+w2+...+wn

  • 每一个非零参数 w j w_j wj都带来大小 λ ∣ w j ∣ \lambda |w_j| λwj的惩罚
  • 算法的 L s L_s Ls的值接近时,选 L 1 L_1 L1范数较小的模型

L 2 范数: ∣ ∣ w ∣ ∣ = w 1 2 + w 2 2 + . . . + w n 2 L_2范数:||w||=\sqrt{w_1^2+w_2^2+...+w_n^2} L2范数:∣∣w∣∣=w12+w22+...+wn2

  • 每一个非零参数 w j w_j wj都带来大小 λ w j 2 \lambda w_j^2 λwj2的惩罚
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烂尾主教

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值