机器学习笔记

一.机器学习过程:

建立模型:设计计算机可以自动“学习”的算法

训练:用数据训练算法模型(算法从数据中分析规律)

预测:利用训练后的算法完成任务(根据学习的规律为未知数据进行分类和预测)

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限

1.1监督学习和无监督学习

在监督学习中 数据同时带有输入x和输入标签y 而在无监督学习中 数据仅带有输入x而没有输出标签y。监督学习中的训练集包括输入特征和输出目标。

1.2线性回归 成本函数(代价函数)

线性回归是一种用于建立变量之间线性关系的统计模型

成本函数(cost function)提供了 一种选择更好参数的方法 。损失函数和成本函数是同一个东西,损失函数是定义在单个训练样本上的,也就是就算一个样本的误差,成本函数是定义在整个训练集上面的,也就是所有样本的误差的总和的平均,也就是损失函数的总和的平均

线性回归的目标是找到参数w或w和b,使成本函数J的值最小。观测数据是( x i , y i ) 。成本函数采用预测y hat减去目标y进行比较

机器学习算法中 有一类算法就是产生一条曲线来拟合现有的数据,这样子就可以实现预测未来的数据,这个专业术语叫做回归(见到回归就替换成拟合就好了。能用直线表示的就是线性模型

模型参数的训练实际上就是一个不断迭代,寻找到一个方程来拟合数据集。

0

0

0

1.3梯度下降算法和学习率

梯度就是目标函数的导数 梯度下降就是用来求某个函数最小值时自变量对应取值。曲线最低点对应x的值这个函数名字叫做损失函数,直白点就是误差函数。一个算法不同参数会产生不同拟合曲线,也意味着有不同的误差。 损失函数就是一个自变量为算法的参数,函数值是该参数下所产生拟合曲线与真实值之间的误差值的函数。梯度下降就是找让误差值最小时候算法取的参数,梯度下降是一种迭代优化算法。如何在程序中求代价函数的最小值呢?可以使用经典的梯度下降算法

alpha是学习率控制你下坡的步幅 。后面一个是成本函数J的导数项(你想朝哪个方向迈出你的小步)

对于梯度下降算您将重复这两个更新步骤,使得算法收敛

0

学习率常设置很小,然后看每次迭代的成本降低,先0.001 然后倍增 参数和超参数

1.4线性回归和逻辑回归的向量化实现:

0

在线性回归当中每个参数w乘他的相关特征。代码的矢量化版本是:f=np.dot(w,x)+b ,用向量化来使梯度下降在线性回归中运行得更快,通过硬件来换时间的 in parallel

1.5特征缩放

使梯度下降的更快(重新缩放不同的特征,使它们都具有可比较的值范围) 对于每个特征 Xj aim about 范围 [-1,1]

1.6均值归一化

一种数据预处理技术,数据的归一化可以使损失函数的等高线更加接近圆形,从而加快算法的收敛速度。如果数据没有归一化,可能导致梯度下降的过程非常缓慢,甚至可能出现不收敛的情况

0

1.7 特征工程

利用直觉设计新特征,通过改造或组合原始特征。诵过使用特征工程和多项式函数可以获得一个更好的模型为您的数据

1.特征构建 从原始数据中创造新的特征

2.特征提取对原始特征进行变换,提取出更有代表性的特征

3.特征选择从众多的特征中挑选出对模型最有用的特征

4.特征缩放 对特征进行归一化或标准化处理。不同的特征可能具有不同的取值范围,例如一个特征的取值范围是 0 - 1,而另一个特征的取值范围是 0 - 1000。

多项式回归的例子如下,因为你选择了你的可选特征,并将它提到两到三成或更多

1.8逻辑回归:

sigmoid function有时也称为logistic function 逻辑回归算法的拟合函数,叫做sigmond函数 逻辑回归=分类,以下是sigmoid函数

在逻辑回归当中决策边界分为:线性决策边界,非线性决策边界

逻辑回归当中有一种稍微简单的方法来写出损失函数和成本函数,这样当我们使用梯度下降来拟合逻辑回归模型的参数时,实现起来会更简单一些。 构造不同的成本函数只是为了变凸从而满足梯度下降算法的要求

z是一个高阶多项式,它像这样被传递到 sigmoid 函数以计算 f。 您最终可能会得到一个过于复杂且过度适合作为训练集的决策边界。

1.9过拟合

解决办法 1. 获取更多训练数据 2. 使用更少的特征3.正则化

1.10正则化

正则化是一种更温和地减少某些特征影响的方法,而不用像彻底消除它那样严厉。通常只是正则化W1-Wn,b参数不变。正则化的典型实现方式是惩罚所有的特征。

机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,称作 L1正则化 和 L2正则化,或者 L1范数 和 L2范数,是为了限制模型的参数,防止模型过拟合而加在损失函数后面的一项。L1正则化可能导致稀疏权重,有助于特征选择,L2正则化可以防止过拟合/平滑函数曲线

新的成本函数会权衡了你可能拥有的两个目标,尝试最小化第一项会鼓励算法通过最小化预测值和实际值的平方差来很好地拟合训

练数据;该算法还试图使参数 wj 保持较小,这将倾向于减少过度拟合,

1.10.1 用于线性回归的正则方法

1.10.2 用于逻辑回归的正则方法

二.神经网络(深度学习算法)

2.1起源

试图构建模拟大脑的算法。语音识别-图像识别-NLP。人类所有的思想都来自大脑中的神经元,它们发送电脉冲,有时还会与其他神经元形成新的连接。 traditional AI =线性回归和逻辑回归。深度学习经典算法:决策树,支持向量机,神经网络。

2.2demand prediction 和face recognition

层是一组神经元,它们将相同或相似的特征作为输入,然后一起输出这些数字。这些关于可负担性、意识和感知质量的数字是该层中这三个神经元的激活,而且这个输出概率是右侧显示的这个神经元的激活。您的数据集并没有告诉您什么是可负担性,意识和感知质量的正确值,所以是隐藏层。神经网络真正好的特性之一是从数据中训练它时无需明确决定要做什么,例如可负担性等,神经网络应该计算或自行计算出它想在这个隐藏层中使用的特征是什么。

池化是一种下采样操作,其目的是对输入的数据进行降维处理,同时保留数据中的重要特征信息减少数据量:例如在图像数据中,如果原始图像尺寸较大,包含大量的像素点,经过池化操作后,可以显著减少数据量。这有助于减少后续计算的复杂度,提高计算效率,特别是在神经网络的训练和推理过程中,降低计算资源的消耗(如减少内存需求和计算时间)。特征提取:池化能够提取数据中的主要特征。

2.3神经网络中的网络层

按照惯例,当我们说一个神经网络有四层时,它包括输出层和所有隐藏层,但不包括输入层。

第3层第一个神经元的激活用 “a”三二表示。上标表示第几层。激活函数就是输出这些激活值的函数(上图公式即可计算任何层的激活值)

2.4神经网络前向传播

把学到的东西组合成一个算法,让你的神经网络进行推理或预测,被称为前向传播算法,有了这个你就可以下载别人训练过并发布在互联网上的的神经网络参数,你将能够使用他们的神经网络对你的新数据进行推理,

2.5TensorFlow实现

深度学习框架(如TensorFlow、PyTorch),Tensor意思张量。

英特尔为其 GPU 开发了相关的软件工具和库,以支持深度学习。例如,英特尔推出了 Intel Extension for TensorFlow,这是一种在英特尔 AI 硬件上运行 TensorFlow 应用的开源解决方案。numpy是线性代数合和python标准库,后来的TensorFlow也是。

2.6TensorFlow中数据形式

tensor是TensorFlow团队创建的一种数据类型用于存储和执行矩阵运算。矩阵是二维张量,向量是一维张量,标量是零维张量。float32是一种数据类型,单精度浮点数,占32位(4字节)内存空间。 把a2张量转换为数组。下面这种方式是你手动获取数据并将其传递到第一层,然后从第一层获取激活并将其传到第二层

2.7搭建一个神经网络

我们可以告诉张量流,我们希望它采用第一层和第二层并将它们串在一起形成一个神经网络。model.fit() 拟合模型

2.8单个网络的前向传播

大多数人并没有在python 中实现前向传播,通常只使用像 tensorflow 和pytorch 这样的库,但我想让你自己了解这些算法是如何工作的,这样如果出现问题,可以自己想清楚,什么您需要改变,哪些可能有效,哪些不太可能有效。

这是前向传播,参数值是随机初始化的,后面还有反向传播可以调整参数。

shape会输出一个形状的列表 [row,columns] ,然后对列表索引[0]就是行数,[1]就是列数

dense密集函数的作用是输入上一层的激活,并给定当前层的参数,返回下一层的激活

神经网络前向传播的矢量化实现代码如下:

2.9TensorFlow实现神经网络

第一步:指定模型告诉 TeńsorFlow 如何计算推理

第二步:第二步要求 Tensotflow 编译模型,其关键步骤是指定要使用的损失函数

第三步:训练模型。用fit函数,它告诉 TensorFlow 使用你在步骤2中指定的成本函数的损失来拟合你在步骤1 中指定的模型到数据集 X,Y。

当我们谈到梯度下降时,我们必须决定运行梯度下降的步骤或时间

2.10模型训练细节

如果您正在使用梯度下降来训练神经网络的参数,那么您将重复,对于每一层L和每一个单元 j,根据 Wjl 减去学习率 alpha 乘以关于该参数的偏导数来更新 Wjl,参数 b也类似。TensorFlow 所做的,实际上也是神经网络训练的标准,是使用一种称为反向传播的算法来计算这些偏导数项。TensorFlow在这个称为 fit 的函数中实现了反向传播,您所要做的就是调用 model.fit ,xy作为您的训练集,并告诉它这样做 100 次迭代

2.10如何选择激活函数

输出层激活函数:

如果您正在处理二元分类问题,请在输出层使用 sigmoid。

回归问题可以选择不同的激活函数,有正有负用线性激活函数,非负值用ReLu激活函数

梯度下降:

如果你使用梯度下降来训练神经网络,那么当你有一个函数在很多地方都很平坦时,梯度下降会很慢,sigmoid两个地方平坦,而relu只有一个地方flat。一个好的激活函数会使成本函数j更容易进行梯度下降。

2.11为什么模型需要激活函数+多分类问题

为什么?

没有激活函数,不管加多少层,最终的输出都是输入的线性组合。

如果你全程都用线性回归激活函数 最后得出来得结果和中间的隐藏层没有关系 只和输入的X有关系 相当于这个模型什么都没有做,逻辑回归也是同理。激活函数是线性的话意味着网络只能拟合线性的关系,无论堆叠多少层也拟合不了更加复杂的映射关系

多分类

MNIST全称是Mixed National Institute of Standards and Technology database。一个非常庞大的手写数字数据库。

p(y=1|x) p(y=2|x) p(y=3|x) p(y=4|x) x是向量

2.12softmax

softmax回归算法是逻辑回归的泛化

2.13神经网络的Softmax输出

1.

采用 softmax 回归模型,并将其拟合到一个新网络中,为多分类训练一个新网络。

print(f"{x1:.18f}

2.

相当于把softmax的计算交给代价函数一起处理了以实现误差小

`model = Sequential([...])`:使用 Keras 的`Sequential`模型来构建神经网络。 这个模型包含三个全连接层(`Dense`层)。 - `Dense(units=25, activation='sigmoid')`:第一个隐藏层有 25 个神经元,激活函数为`sigmoid`。 - `Dense(units=15, activation='sigmoid')`:第二个隐藏层有 15 个神经元,激活函数也为`sigmoid`。 - `Dense(units=1, activation='linear')`:输出层有 1 个神经元,激活函数为`linear`。 3. `from tensorflow.keras.losses import BinaryCrossentropy`:导入 Keras 中的二分类交叉熵损失函数。 4. `loss = model.compile(..., BinaryCrossentropy(from_logits=True))`:编译模型,指定损失函数为 二分类交叉熵(`BinaryCrossentropy`),并且设置`from_logits=True`表示输入给损失函数的是 未经过激活函数处理的原始预测值(logits)。 5. `model.fit(X, Y, epochs=100)`:使用输入数据`X`和对应的标签`Y`来训练模型,训练的轮数为 100 轮。 6. `logit = model1(x)`:使用训练好的模型对新的输入数据`x`进行预测,得到未经过激活函数处理的 原始预测值(logits)。 7. `f_x = tf.nn.sigmoid(logit)`:对原始预测值(logits)应用`sigmoid`激活函数,得到最终的预测概率值。 这段代码构建了一个三层的神经网络模型,用于二分类问题,通过训练和预测来实现逻辑回归的功能

2.14多个输出的分类(多标签)

对输出层中的这3个节点都使用sigmoid激活函数,

2.15高级优化方法(Adam)

2.16其它的网络层类型(卷积层)

一个卷积层,该层中的这些单元只查看有限的输入窗口。A2 将输入到一个sigmoid 单元,第一个和第二个隐藏层都是卷积层,输出层是一个sigmoid层。该单元会查看 A2 的所有这三个值,以便对是否存在心脏病进行二元分类。

您已经看到如何在 TensorFlow 中指定一个神经网络架构来计算输出y作为输入的函数,并指定一个成本函数,然后 TensorFlow 将自动使用反向传播来计算导数并使用梯度下降或 Adam 训练神经网络的参数。反向传播算法计算成本函数相对于参数的导数,是神经网络学习中的关键算法。成本函数是w和b的函数

三决定下一步做什么(machine learning diagnostic)

3.1模型评估

测试误差里面没有正则化项。计算测试误差和训练误差可以看出模型表现

3.2交叉验证集的训练

Cross Validation(交叉验证)是一种在机器学习和统计学中用于评估模型性能、选择模型参数以及比较不同模型的重采样技术。交叉验证通过将数据集分成多个不同的子集,使得每一部分数据都可以在训练和测试阶段使用,确保模型评估更加稳定和可靠。为了选择一个模型,你会看哪个模型的交叉验证误差最低。这里cv用来选择模型参数,test相当于再采数据来做模型评估,应为你如果用tset来做参数选择,再有test来做模型评估,评估分数肯定是最高的,没有意义,就是别在测试集上调参,那等于自己骗自己

大家可以把训练集,验证集合,测试集合想成平时作业,月考,期末考,当你做了作业之后,通过月考成绩去调整平时作业的参数,最后通过期末考测试你这个学习成绩 怎么样

简而言之 Training set 用来 选 w&b, cross validation用来选超参数(此处的d,或是后面决策树的树深都是超参数) , Test set 用来评估 模型 最终的 泛化误差 - 就是这个模型好不好

为了帮助您确定神经网络有多少层以及每层应该有多少个隐藏单元,您可以训练所有模型并最终得到第一个模型的参数 w1、b1,第二个模型的 w2、b2 第三个模型的 w3、b3 ,然后,您可以使用交叉验证集使用 Jcv 评估神经网络性能。由于这是一个分类问题,最常见的选择是将其计算为算法错误分类的交叉验证示例的分数。

选择几个模型进行训练,然后用交叉验证集对几个模型进行损失值评估,以此选出最好的模型,再通过测试集新数据评估该模型泛化误差

3.3通过偏差和方差进行诊断

即使您不能绘制函数 f,这也能让您了解您的算法是否具有高偏差或高方差。一种更系统的诊断或找出您的算法是否具有高偏差或高方差的方法是查看您的算法在训练集和交叉验证集上的性能。

对于线性回归下面第三种情况不会发生太多,但如果训练神经网络,可能会存在高偏差和高方差。bias学习能力,variance拟合能力

3.4正则化参数λ如何影响学习算法的偏差和方差

1. 如果 Lambda 非常大,那么算法就会非常积极地保持这些参数 w 非常小,所以你最终会得到 w 1w 2,实际上所有这些参数都将非常接近于零

0

2. 最小化成本函数为您提供了第二组参数 w2、b2,您还可以看到它在交验证集上的表现如何

0

0

3.4制定一个用于性能评估的基准

0

3.5学习曲线

高偏差需增加多项式次数,高方差需增加训练样本数据量。高偏差是欠拟合,高方差是过拟合

0

3.6训练了模型以后偏差和方差如何帮助你决定下一步需要做什么

如果您的算法具有高偏差,则说明在训练集上也表现不佳

0

3.7偏差,方差,和神经网络

0

神经网络的正则化项是w平方和的两倍以上,是神经网络中所有权重w的总和

0

3.8机器学习开发的迭代

0

3.9错误分析

0

3.9data augmentation 数据增强(合成数据)

1. by introducing distortion

2. data Synthesis: using artificial data inputs to create a new training example

有时专注于数据可能是帮助您的学习算法提高其性能的有效方法,

3.10迁移学习-使用其他任务中的数据(transfer)

图像分类、目标检测、图像分割等任务中,常常利用在大规模图像数据集上预训练的模型,如在 ImageNet 上预训练的卷积神经网络,然后在特定的任务上进行微调。

  • 图像分割:通常是基于一些较为简单的特征,如颜色、纹理、亮度等进行划分,分割结果相对较为粗糙。例如,可能只是将图像大致划分为几个不同颜色或纹理的区域,并不明确每个区域具体代表什么物体或概念。
  • 语义分割:是逐像素地进行分类,能够精确地识别出图像中的不同物体,并为每个像素分配一个明确的类别标签。它对图像的理解更加深入和细致。

在迁移学习中,你可以做的是使用前四层的参数,实际上是除最终输出层之外的所有层作为参数的起点,然后运行优化算法,例如梯度下降或 Adam 优化算法。读书人的事,不叫抄,叫迁移学习

只需下载其他人花费数周训练的神经网络,然后将输出层替换为自己的输出层并执行选项"1或选项,2即可(只调输出层和全调),调整一个别人经进行过监督预训练的神经网络,只需做一点微调就可以快速得到!个在你的任务上表现良好的神经网络。使任何人都可以采用经过预训练的模型来微调可能小得多的数据集。

0

3.11机器学习项目的完整周期

0

通过 API和推理服务器调用应用程序如下图:

0

3.12倾斜数据集的误差指标

召回率:在所有正类中有多少是没被遗漏的。 精确率:在预测结果中有多少是正类

0

召回一词源于这样的观察:如果您有一组患者或患者群体,那么在所有患有该病的患者中进行召回测量:您会准确诊断出有多少人患有该病

3.13准确率和召回率的权衡

0

没病看成有病影响不大,但有病看成没病那麻烦就大了

低精准 高recall 就是宁可错杀不可放过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值