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

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

有监督学习的概念


569ee932ac3d449ae32d98ad42b5a7c4_0db61dcaf1524e1f83a69773ea04a1af.png


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


特征组(特征)


定义特征组在有监督的学习任务中,每个数据对象的n个特征构成的向量x=(x1,x2,...,xn)image.png,称该对象的特征组,也就是特征向量。设X ⊆ image.png 是特征组的所有可能取值构成的集合,称X为样本空间。


标签


定义:在回归问题中,训练数据含有一个数值标签y ∈ R;在k元分类问题中,训练数据含有一个向量标签image.png。设Y为全体可能的标签取值,称Y为标签空间。

分类问题

image.png


模型


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


有监督学习任务


定义:给定样本空间X,标签空间Y,未知的特征分布D与标签分布image.png有监督的学习任务是训练一个模型h,即计算从X到Y的一个映射,记作:

image.png

对任意的样本的特征向量x xx,由h ( x ) h(x)h(x)作为对x xx的标签的预测。

image.png


损失函数


定义:设X是样本空间,Y是标签空间,损失函数是一个从Y × Y到正实数R+的函数

image.png

:并要其满足如以下性质,对任意y ∈ Y,有

image.png

例如:0-1损失函数

image.png

image.png


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


image.png


作为模型h的效果的度量

当测试数据规模足够大时,经验损失能够良好近似期望损失。

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


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


给定损失函数 l,以及给定一组数据

image.png

image.png

作为模型h经验损失

无约束经验损失最小化算法架构

image.png

特点:image.png在训练数据S SS上的经验损失image.png,无约束经验损失最小化算法,容易带来过度拟合问题


ps:无约束指的是空间(ϕ)无约束(所有符合要求的模型组成的模型空间)


过度拟合示例:

  假定样本空间X=[-1,1],特征分布D是X上的均匀分布,标签空间Y=ℝ,标签分布Dx=N(x, 0.3)是期望为x且标准差是0.3的正态分布,损失函数是平方损失函数。

2c1b6c31fb1313604cea6bf603f0345d_bc98541b3a8e452ba234525c21caaad5.png

e36091513567ebaaa982f0b7f8aa0c8d_896df73494584938bce5cd4d474811e5.png

b0233e5265379786e4bad4e105d29aab_b13f4d766e1f4be9aeef14d498b421b7.png


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

image.png


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

·欠拟合:训练误差比较大

·泛化能力:训练误差小,测试误差小


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


1.引入模型假设(对标签分布或者模型结构做出恰当的假设,比如上面的例子,可以假设为线性模型)

2.正则化image.png

3.dropout(用于深度神经网络)

4.扩大训练样本


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


2b77bfb3fbe54a2f6a5e0c634d6d207d_4a8a44ea7c8343d09f73c518e3e3adca.png

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()

b39063eefe0b8d763682aae7260f4302_d58480c4a1ea49fbb456c8c04172a952.png

结论:

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


正则化算法


前言:

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


正则化常用策略:

image.png

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


例如:每个n元线性函数

image.png

都可以用n+1个参数表示:

image.png

image.pngps:我们追求的是image.png复杂度低,所以就是image.png向量维数少且值小


image.png

d80824921b392c5fc734671bd06743e6_3e75fe27eb4e4b71bb2e59659298f649.png

image.png


image.png

cc337cd5055fd6fb19a3b9124da4e00e_e3ef0a054e9049fbbb20b0823aa2c9ab.png

image.png


相关文章
|
27天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
85 4
|
5天前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
22 2
|
23天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
39 1
|
1月前
|
机器学习/深度学习 自然语言处理 算法
深入理解机器学习算法:从线性回归到神经网络
深入理解机器学习算法:从线性回归到神经网络
|
1月前
|
机器学习/深度学习 算法
深入探索机器学习中的决策树算法
深入探索机器学习中的决策树算法
37 0
|
1月前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
36 0
|
18天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
24天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
4天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。
|
12天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。