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

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

有监督学习的概念


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


相关文章
|
20天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
46 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
21天前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
24 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
1天前
|
机器学习/深度学习 算法 数据可视化
【机器学习】ID3、C4.5、CART 算法
【机器学习】ID3、C4.5、CART 算法
|
1天前
|
机器学习/深度学习 人工智能 算法
【机器学习】决策树算法
【机器学习】决策树算法
|
1月前
|
机器学习/深度学习 数据采集 算法
数据挖掘和机器学习算法
数据挖掘和机器学习算法
|
1月前
|
机器学习/深度学习 数据采集 存储
一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
蒙特卡洛方法起源于1945年科学家斯坦尼斯劳·乌拉姆对纸牌游戏中概率问题的思考,与约翰·冯·诺依曼共同奠定了该方法的理论基础。该方法通过模拟大量随机场景来近似复杂问题的解,因命名灵感源自蒙特卡洛赌场。如今,蒙特卡洛方法广泛应用于机器学习领域,尤其在超参数调优、贝叶斯滤波等方面表现出色。通过随机采样超参数空间,蒙特卡洛方法能够高效地找到优质组合,适用于处理高维度、非线性问题。本文通过实例展示了蒙特卡洛方法在估算圆周率π和优化机器学习模型中的应用,并对比了其与网格搜索方法的性能。
183 1
|
2天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
该算法结合了遗传算法(GA)与分组卷积神经网络(GroupCNN),利用GA优化GroupCNN的网络结构和超参数,提升时间序列预测精度与效率。遗传算法通过模拟自然选择过程中的选择、交叉和变异操作寻找最优解;分组卷积则有效减少了计算成本和参数数量。本项目使用MATLAB2022A实现,并提供完整代码及视频教程。注意:展示图含水印,完整程序运行无水印。
|
1天前
|
算法 决策智能
基于禁忌搜索算法的VRP问题求解matlab仿真,带GUI界面,可设置参数
该程序基于禁忌搜索算法求解车辆路径问题(VRP),使用MATLAB2022a版本实现,并带有GUI界面。用户可通过界面设置参数并查看结果。禁忌搜索算法通过迭代改进当前解,并利用记忆机制避免陷入局部最优。程序包含初始化、定义邻域结构、设置禁忌列表等步骤,最终输出最优路径和相关数据图表。
|
2天前
|
编解码 算法 数据挖掘
基于MUSIC算法的六阵元圆阵DOA估计matlab仿真
该程序使用MATLAB 2022a版本实现基于MUSIC算法的六阵元圆阵DOA估计仿真。MUSIC算法通过区分信号和噪声子空间,利用协方差矩阵的特征向量估计信号到达方向。程序计算了不同角度下的MUSIC谱,并绘制了三维谱图及对数谱图,展示了高分辨率的DOA估计结果。适用于各种形状的麦克风阵列,尤其在声源定位中表现出色。
|
8天前
|
传感器 算法 C语言
基于无线传感器网络的节点分簇算法matlab仿真
该程序对传感器网络进行分簇,考虑节点能量状态、拓扑位置及孤立节点等因素。相较于LEACH算法,本程序评估网络持续时间、节点死亡趋势及能量消耗。使用MATLAB 2022a版本运行,展示了节点能量管理优化及网络生命周期延长的效果。通过簇头管理和数据融合,实现了能量高效和网络可扩展性。