We backtest a simple dollar cost averaging strategy in backtesting.py. Backtesting.py is a super easy to use framework for beginners to python or to backtest...
Learn how to make your own custom indicators in backtesting.py. We show how you can integrate libraries like pandas-ta, ta-lib, etc. as well as write your ow...
In this video we go in-depth on how to use stop-losses in backtesting.py. We cover both static and trailing stop losses and how backtesting.py executes them ...
In this video we go through a method that I've found helpful for validating my backtests before I go live with a strategy. Looking at the distribution of ret...
00:35:00 使用掷骰子和代码演示中心极限定理。演示表明,随着样本量的增加,样本均值将近似高斯分布。数据解释对于统计学中发现意义至关重要。统计假设检验或显着性检验在机器学习中用于提出有关数据分布的声明或比较两个样本。假设 0 或零假设是默认假设,即没有任何变化,统计假设检验可能返回 p 值或临界值。 p 值是用于解释假设检验结果并拒绝或未能拒绝原假设的量,而临界值用于将检验统计量与其抽样分布进行比较,以确定是否有足够的证据拒绝原假设。
00:55:00 讨论了双尾测试的使用,该测试考虑了产品的正面和负面影响。给出的例子是仿制药与名牌产品的对比,其中双尾测试可以确定仿制药是否与名牌产品相当或更差。还通过使用三种常用分布的示例来解释和演示百分点函数或分位数函数的使用:标准高斯分布、标准学生 t 分布和标准卡方分布。最后,讨论了相关性的概念及其在确定两个变量之间的关系中的重要性,以及多重共线性的潜在问题及其如何影响算法性能。
01:00:00 该视频演示了一个快速演示,使用设计的数据集显示两个变量之间的强正相关性,每个变量均取自高斯分布并呈线性相关。该演示计算并打印协方差矩阵,显示两个变量之间的正协方差,表明它们沿相同方向变化。然而,协方差单独作为统计工具的一个问题是它难以解释,从而导致皮尔逊相关系数。视频解释了 Pearson 的 r 相关系数如何通过计算两个变量的协方差除以每个样本的标准差的乘积来概括两个数据样本之间线性关系的强度,并且可以使用相关系数来评估两个以上变量之间的关系。
01:05:00 该视频讨论了参数统计显着性检验的使用,该检验假设数据是从具有相同均值和标准差的高斯分布中提取的。定义测试数据集并用于演示独立样本和配对样本的学生 t 检验以及方差检验分析。该视频展示了如何使用适当的 Scipy 函数在 Python 中实现这些测试。这些示例说明了如何使用这些测试来确定不同的数据样本是否具有相同的分布。
01:15:00 该视频讨论了预测建模中数据采样和数据重采样的重要性,解释了采样涉及选择总体的子集,而重采样涉及从数据样本中多次估计总体参数,以提高准确性并量化不确定性。该视频介绍了常见的抽样方法,分为概率抽样或非概率抽样,并重点介绍了机器学习工程师可能遇到的三种抽样类型:简单随机抽样、系统抽样和分层抽样。此外,该视频还警告了抽样过程中可能引入的潜在错误,并强调在得出总体结论时需要进行统计推断和小心谨慎。该视频接着解释了机器学习中常用的采样方法,即 k 折交叉验证和引导程序,后者虽然提供了对总体的稳健估计,但计算成本较高。
01:20:00 Bootstrap 方法被讨论为一种通过对多个小数据样本的估计进行平均来估计总体数量的工具。这些样本是通过从大型数据集中一次抽取一个观察值并在选取后将它们返回到原始样本来构建的。这种方法称为放回抽样。 SciPy 库中提供的重采样函数可用于创建单个引导样本,尽管它不包含任何轻松收集可用于评估拟合模型的袋外观察结果的机制,但仍然可以使用 Python 列表理解来收集 bag 观察结果。此外,还解释了 k 折交叉验证的过程,因为它是用于在有限数据上评估机器学习模型的重采样过程。 K 折循环学习类可用于此过程,并且提到了 k 折交叉验证的四种常用变体。
01:25:00 演讲者讨论了机器学习中重采样的两种方法:k 折交叉验证和训练测试分割。虽然 k 折交叉验证是黄金标准,但训练测试分割可能更容易理解和实施。演讲者演示了如何在 Python 中使用训练-测试分割方法,还提到了估计统计的使用,其目的是量化结果的大小和不确定性,并且在研究文献中越来越流行。估计统计的三大类包括效应大小、区间估计和荟萃分析。正在发生向估计统计的转变,因为它们更容易在研究问题的背景下进行分析和解释。
01:00:00 我们学习正交矩阵和张量。正交矩阵是一种方阵,其列和行都是正交单位向量。这些矩阵的计算成本低且计算逆矩阵稳定,可用于深度学习模型。在 Tensorflow 中,张量是一种基石数据结构,也是向量和矩阵的泛化,表示为多维数组。在 Python 中,可以使用类似于矩阵的 n 维数组来操作张量,并使用按元素张量运算(例如加法和减法)。此外,可以对张量、矩阵和向量执行张量积运算,从而获得更高维度的直觉。
01:05:00 该视频介绍了矩阵分解,这是一种将矩阵简化为其组成部分并简化可在分解矩阵上执行的更复杂矩阵运算的方法。后续课程中将介绍两种广泛使用的矩阵分解技术:方阵的 LU 矩阵分解和矩形矩阵的 QR 矩阵分解。 LU 分解可用于简化线性回归问题中的线性方程并计算矩阵的行列式和逆矩阵,而 QR 分解可用于求解线性方程组。这两种分解都可以使用 Python 中 NumPy 包中的内置函数来实现。
该视频详细解释了梯度提升的概念,概述了其三步过程。第一步涉及迭代添加弱学习器(例如决策树)以最小化损失。第二步是顺序添加树,最后一步重点是通过进一步迭代减少模型误差。为了演示该过程,该视频展示了如何使用 k 折交叉验证来分割数据。通过XGBoost,获得每次折叠的分数。教师选择决策树作为弱学习器,确保深度较浅以避免过度拟合。最后,损失函数被定义为机器学习模型对数据的拟合程度的度量。
该视频介绍了如何通过指定评估指标并传递 x 和 y 对数组来监控 XGBoost 模型在训练期间的性能。模型在每个评估集上的表现都会被存储并在训练后可供使用。该视频介绍了学习曲线,它提供了对模型行为的深入了解,并有助于通过尽早停止学习来防止过度拟合。提前停止是一种在验证分数没有改善的情况下在固定数量的 epoch 后停止训练的技术。
00:50:00 该视频讨论了如何通过指定评估指标并传入 x 和 y 对数组来监控 XGBoost 模型在训练期间的性能。模型在每个评估集上的表现都会被存储并在训练后可供使用。使用这些性能指标,可以创建学习曲线,以进一步了解模型的行为,并可能提前停止学习以防止过度拟合。该视频还介绍了提前停止,这是一种如果在验证分数中没有观察到任何改进,则在固定数量的时期后停止训练的技术。
00:25:00 讲师讨论了一种识别可能对目标变量有用的预测因子的特征的方法。该方法包括按目标变量进行分组,分析幸存者与幸存者的每个特征的分布,以及运行 t 检验以确定统计显着性。讲师强调了两个特征:公平和阶级,它们是潜在的良好生存指标,但警告相关性对解释的影响。讲师还讨论了年龄特征的缺失值,并使用 group by 来确定它是否随机缺失。此外,讲师还解释了如何绘制连续特征以可视化它们的分布以及与目标变量的关系。
Another free course to help you become a machine learning engineer in the real-world.LogikBot - Affordable, Real-World and Comprehensive - https://www.logikb...
01:15:00 该视频讨论了机器学习在泰坦尼克号数据集上的使用,以及在现实场景中大多数模型如何源自关系数据库。引入 SQL Server Management Studio 界面是因为它通常用于管理 SQL Server 数据库。提出了一个假设场景,其中的任务是创建可用于预测未来销售的数据集。该视频演示了如何创建查询和连接表以创建名人的订单历史记录,以及如何将此信息保存为视图,以便可以轻松查询并导出为 CSV 文件以便与其他人共享。团队。
01:55:00 演示者演示了如何将数据从 BigQuery 库导入到 Google 云平台上的 Jupyter 笔记本中。导入虹膜数据集并将其分为训练集和测试集,并使用随机森林分类器进行训练。输出模型的预测值。演示者还展示了如何通过在 Google 主页上访问云数据实验室实例并单击“编辑”来升级云数据实验室实例上的资源。
A complete look at BigQuery for machine learning.LogikBot - Affordable, Real-World and Comprehensive - https://www.logikbot.comThere are two core paths on Lo...
使用 Python 轻松回测您的平均成本策略
使用 Python 轻松回测您的平均成本策略
在接下来的 20 分钟左右,我们将在 Python 中实施美元成本平均策略。该策略将允许您评估特定资产或指数在一定时期内平均成本的表现。我们将使用一个名为 backtesting.py 的工具来实施此策略。 Backtesting.py 是一个用户友好的 Python 框架,与 Vectorbt 或 Backtrader 等其他库相比,它没有那么令人生畏。如果您是 Python 新手,这对您来说将是一个不错的选择。
我们将实施的美元成本平均策略相对简单,但我还将向您展示如何扩展它。我们的策略包括每周一或周二购买固定金额的特定资产,并重复此过程,直到我们用完数据。首先,打开一个终端并设置一个新的虚拟环境,以确保我们的实施有一个干净的环境。设置虚拟环境后,使用 pip 安装回测包:
pip安装回测
安装包后,我们可以继续使用 Python 文件。我们需要导入一些必要的模块和数据。从回测中导入回测和策略模块。此外,从 backtesting.test 导入一些虚拟数据,特别是 google 数据。我们还需要 pandas 模块来进行数据操作。
现在,让我们定义我们的策略类。创建一个名为 DCA(美元成本平均)的类,该类继承自策略类。在这个类中,我们将设置一个名为 amount_to_invest 的类变量,它代表我们想要投资的固定美元金额。最初,将其设置为 10。
接下来,我们需要在此类中定义两个函数:__init__ 和 next。 __init__ 函数在初始化期间被调用,用于预先计算我们以后可能需要的任何值。在我们的例子中,我们将创建一个指示我们星期几的指示器。为此,我们将使用 backtesting.py 提供的 self.indicator 方法。我们可以将指标定义为 self.day_of_week = self.indicator(lambda x: x, self.data.close.s.dt.dayofweek)。该指标将为我们的数据返回一个星期几值的数组(0-6,其中星期一为 0,星期日为 6)。
现在,让我们继续下一个函数,这是我们实现交易逻辑的地方。针对每个数据条调用此函数,并允许我们根据当前数据做出决策。在我们的例子中,我们将使用 if self.day_of_week == 1: 检查星期几是否等于 1(星期二)。如果是星期二,我们将触发买入信号。为了执行买入订单,我们将使用 backtesting.py 提供的 self.buy 函数。我们可以通过将 amount_to_invest 除以资产的当前收盘价来计算买入订单的大小。为了确保我们购买整数股,我们可以使用 math.floor 对结果进行舍入。
为了处理分数份额,我们可以通过将资产乘以一个小数字(例如 10 ** -6)来分割份额。这会将股票分割成微股,随后可以通过除以相同的小数将其转换回实际购买的股票数量。
最后,我们需要运行回测并提取统计数据。为此,我们可以使用 bt.run() 并将结果分配给名为 stats 的变量。我们还可以使用 bt.plot() 绘制结果。
由于我们尚未实现销售逻辑,因此该图显示为一条连续线,没有任何卖点。我们很快就会解决这个问题。但在此之前,让我们从回测结果中提取一些统计数据。
为此,我们将使用之前定义的 stats 变量。我们可以打印各种统计数据,如总回报、年化回报、最大回撤等等。
如果您有兴趣探索其他性能指标,请随意添加更多统计信息。
现在让我们继续实现销售逻辑。由于我们使用美元成本平均策略,因此我们每周都会销售相同的固定美元金额。就我们而言,我们将在周五出售。
在这里,我们使用之前创建的 day_of_week 指标来检查星期几是否为 4(星期五)。如果是星期五,我们将 amount_to_invest 除以当前收盘价,卖出与之前购买的金额相同的美元。这确保我们出售适当数量的股票以匹配我们的投资金额。
现在,当我们进行回测时,我们应该在图表上看到卖点,表明我们卖出头寸的星期五。
请随意尝试该策略的不同变体,例如调整买入/卖出天数或根据价格变动实施附加条件。该框架允许您根据您的要求轻松扩展和自定义您的策略。
请记住调整 amount_to_invest 变量并探索不同的资产数据以了解策略的执行情况。
我希望这可以帮助您使用 Python 中的 backtesting.py 库实现和探索美元成本平均策略。如果您还有任何疑问,请告诉我!
Backtesting.py 中的自定义指标 - Python 深入探究
Backtesting.py 中的自定义指标 - Python 深入探究
在本视频中,我们将探索在 backtesting.py 库中创建自定义指标的过程。此功能将使我们能够通过创建指标并将 Python 函数转换为与 backtesting.py 生态系统兼容的格式来轻松回测任何交易策略。
在我们深入研究指标创建的细节之前,建议您查看 YouTube 上的免费课程,其中涵盖了 backtesting.py 的大部分方面。本课程将提供对库的高级理解,这对于探索本视频中的指标创建时将很有帮助。
在本视频中,我们将重点关注三个不同的示例来涵盖各种指标的想法。第一个示例涉及使用外部 Python 程序中生成的信号并将其集成到 backtesting.py 中。当您已经从外部源获得买卖信号并希望将它们合并到回测过程中时,此方法非常有用。
第二个示例将演示如何使用 pandas-ta 库为每个指标返回多个值。具体来说,我们将使用布林带指标并展示如何返回包含下轨和上轨的数据框,而不仅仅是一个简单的 numpy 数组。此示例将强调创建具有多个值的指标的多功能性。
最后,我们将手动编写动量策略来演示如何使用纯 Python 创建自定义指标。此示例将展示使用 Python 编程创建指标的灵活性,从而为指标设计提供无限的可能性。
要按照示例进行操作,请确保安装了必要的库,包括回测、pandas 和 pandas-ta。安装这些库后,为代码示例创建一个 Python 文件。
代码的初始部分设置了使用 backtesting.py 时所需的样板。它导入所需的类“backtest”和“strategy”,并从 backtesting.py 导入 Google 股票的样本数据。导入的数据是一个 pandas 数据框,其中包含每日价格数据,包括开盘价、最高价、最低价、收盘价和成交量,以及日期时间索引。
对于第一个示例,我们假设您已经在外部程序中生成了一些信号并希望将它们传输到 backtesting.py。为了证明这一点,我们使用 numpy 创建随机信号并将它们添加到 Google 数据框中。这些信号可以代表您在 Python 中编写的任何指标,其中 -1 表示卖出信号,0 表示不采取行动,1 表示买入信号。
接下来,我们定义一个名为“SignalStrategy”的策略类,它继承自之前导入的“Strategy”类。该类将负责根据信号实现买卖逻辑。该类包括初始化函数“ init ”和“next”函数。
在“ init ”函数中,在这个特定示例中我们不需要做太多事情,但包含它是一个很好的做法。 “下一个”功能是根据信号执行买卖逻辑的地方。
为了执行回测,我们创建回测类的实例,传递 Google 数据框和“SignalStrategy”类。我们还将缓存值设置为 10,000。然后,我们运行回测并将结果存储在“stats”变量中。最后,我们打印出统计数据来查看策略的性能。
此时运行代码不会产生任何交易,因为我们还没有实现买卖逻辑。但是,我们可以通过在“next”函数中使用“self.data.signal”来访问信号值,这将为我们提供最新的信号值。
为了实现买卖逻辑,我们检查当前信号值和当前仓位。如果信号为 1(买入信号)并且没有现有头寸,我们使用“self.buy”执行买入订单。如果信号为-1(卖出信号)并且存在多头头寸,我们使用“self.sell”执行卖出订单。
外部信号策略:
使用 pandas-ta 进行自定义指标:
请记住将 GOOG 等占位符替换为您的实际数据,并根据您的具体要求定制策略。
Backtesting.py 中的止损
Backtesting.py 中的止损
在本视频中,我们将探讨“backtesting.py”库中止损的概念。该视频将涵盖三个不断增加复杂性和深度的示例,提供对“backtesting.py”中止损的全面理解。演示者假设您事先了解了“backtesting.py”的一些知识,并建议在深入研究这个高级主题之前先观看 YouTube 上针对初学者的免费课程。
首先,打开终端并确保通过运行命令“pip install backtesting”安装“backtesting.py”。这将安装所有必需的软件包。然后,创建一个新的 Python 文件,我们将其命名为“example.py”,并导入所需的模块:“backtesting”中的“backtest”和“strategy”,以及“backtesting.test”中的“googledale”。 “googledale”是“backtesting.py”附带的测试数据集。
接下来,通过创建一个继承自“strategy”类的名为“Strats”的类来定义策略类。实现两个必需的函数:“ init ”和“next”。此时,我们已准备好运行回测。使用“backtest”函数初始化一个新的回测对象“bt”。传入“googledale”数据和我们刚刚定义的策略类。将初始现金价值设置为 10,000 美元。最后,使用“bt.run”方法运行回测,并使用“bt.plot”绘制结果。
最初,策略类不执行任何交易操作。为了演示一个简单的止损示例,我们将添加一些基本的买卖逻辑。如果我们已有立场,我们不会采取任何行动。但是,如果我们没有仓位,我们将使用“self.to_buy”方法下达买入订单,并指定仓位大小(例如 1 股)。此外,我们将添加止损和止盈。止损将设置为当前收盘价以下 10 个单位,止盈设置为当前收盘价以上 20 个单位。
运行回测将产生大量交易。一旦交易结束,除非触发止损或止盈,否则将在下一个柱上打开新交易。了解“backtesting.py”如何处理止损和获利非常重要。如果在同一柱中同时触发止损和止盈,则库假定首先触发止损。这种行为可能会导致意想不到的结果,特别是在处理可能存在重大差距的日常数据时。
为了更有效地管理止损,我们可以扩展策略类并使用“backtesting.py”提供的“追踪策略”。从“backtesting.lib”导入必要的模块,包括“交叉”和“跟踪策略”。在新的策略类中,继承自“跟踪策略”而不是基“策略”类。覆盖“ init ”函数以使用“ super”调用父类的“ init ”函数。然后,使用父类中的“set_trailing_stop_loss”函数设置追踪止损值。
在视频的下一部分中,演示者更详细地解释了“跟踪策略”的工作原理以及如何根据特定要求对其进行自定义。然而,在本节中,重点是在我们的代码中利用“跟踪策略”。通过调用父类的“ init ”函数并使用“set_trailing_stop_loss”函数,我们可以在回测中利用追踪止损功能。
总的来说,该视频提供了在“backtesting.py”中实施止损的分步说明。它涵盖了简单的示例以及更高级的概念,例如跟踪值 10,这意味着我们的止损将跟踪价格 10 个单位。
现在我们已经设置了初始化函数,让我们继续下一个函数。这是我们大部分交易逻辑将被实现的地方。在 next 函数中,我们首先使用 super().next() 调用父类的 next 函数。这确保了追踪止损功能与其他交易逻辑一起执行。
接下来,我们将添加一些代码来调整追踪止损。我们将使用条件语句来检查我们是否有未平仓头寸(self.position 不是 None)。如果我们有仓位,我们将使用 Trailing_strategy 类提供的 update_trailing_sl 方法更新追踪止损。该方法将当前价格作为参数并相应地更新止损。
Python 中的回测验证(被随机性愚弄)
Python 中的回测验证(被随机性愚弄)
我们都曾遇到过这样的情况:我们创建了一个交易策略,对其进行回测,但当我们最终实施它时,它却未能按预期执行。造成这种失望的主要原因之一是该策略与回测中使用的一组特定历史数据过度拟合。在本视频中,我将演示一种对抗过度拟合的策略,并确保您不会依赖缺乏坚实基础或被随机性愚弄的策略。
让我们深入研究一个具体的例子。我使用比特币作为资产,对基于 RSI 的简单策略进行了回测。该策略包括在 RSI 较高时卖出,在 RSI 较低时买入。回测结果显示,尽管比特币在测试期间下跌了 15%,但回报率约为 3%。乍一看,这似乎是熊市的一个有前途的策略。
然而,至关重要的是检查该策略在不同时间范围内的表现,以确定它是否始终如一地识别盈利机会,或者是否只是在回测期间幸运地选择了参数值。为了实现这一目标,我进行了多次为期 30 天的回测,涵盖全年的不同时期。
通过绘制这些回测的回报分布,我们可以深入了解该策略的有效性。该图将每个 30 天窗口显示为一个点,代表该期间获得的回报。随附的箱线图显示了回报中位数、四分位数、最大值和最小值。分析该图,很明显 30 天内的平均回报率为 -8.5%。此外,回报的分布似乎是随机的,类似于人们期望从 -35 到 15 之间的随机数生成器集得到的结果。这些发现强烈表明,除了在特定的历史数据中使用的策略之外,该策略并不唯一或有效。回测。
为了验证策略并减轻过度拟合的影响,我们需要对更广泛的数据进行回测。为此,我下载了涵盖从 2022 年初到 2022 年底的全年的多个数据文件。我将这些文件合并到一个主 CSV 中,其中包含整个期间的一分钟蜡烛数据。
在验证代码中,我做了一些细微的调整以适应扩展数据集。核心策略保持不变,专注于基于 RSI 的交易逻辑。不过,我引入了一个循环来对整个数据的 30 天窗口进行回溯测试。每次回测都会计算回报,然后将其添加到列表中以供进一步分析。
通过使用收集的回报生成箱线图,我们可以可视化策略绩效在各个 30 天窗口中的分布。该图揭示了回报的可变性,并更清晰地展示了该策略在不同时间间隔内的表现。在这个具体示例中,该图显示几乎每个月的回报率主要为负,表明该策略缺乏一致的盈利能力。
这些用于验证和验证交易策略的技术可以应用于您选择的任何回测框架。提供的代码使用 backtesting.py 库,但您可以将其改编为其他库,例如 vectorbt 或 backtrader。关键思想是确保您的策略在不同时间范围内表现出稳健性,而不仅仅是过度拟合一组特定历史数据的产物。
通过遵循这些验证步骤,您可以降低依赖不基于现实的策略或成为随机结果受害者的风险。在实施交易策略时,必须超越回测表现并考虑策略在不同市场条件下的有效性,以便做出明智的决策。
在分析回测结果和不同时间范围内的回报分布后,我们发现该策略的表现本质上是随机的。在用于回测的特定时间段之外,它没有提供一致的盈利能力。这表明该策略存在过度拟合且缺乏鲁棒性。
为了避免陷入过度拟合陷阱并增加开发可靠交易策略的机会,以下是一些建议:
使用充足且多样化的数据:确保您的回测包含大量历史数据以涵盖各种市场条件。这有助于捕捉更广泛的场景,并降低过度适应特定市场条件的可能性。
跨多个时间范围进行验证:不要仅依赖单个时间段进行回溯测试,而是跨不同时间范围测试您的策略。这可以洞察其在各种市场条件下的表现,并有助于确定该策略是否具有一致的盈利能力,或者观察到的结果是否是由于随机性造成的。
实施样本外测试:保留一部分历史数据用于样本外测试。对初始数据集进行主要回测后,在模型之前未见过的保留数据上验证策略。这有助于评估该策略适应未知市场条件的能力,并为其绩效提供更现实的评估。
注意曲线拟合:避免过度优化或参数调整以使策略与历史数据过于接近。过于针对特定数据模式的策略在现实交易中更有可能失败。追求稳健性,而不是仅仅追求历史数据的卓越性能。
考虑前向分析:考虑使用前向分析,而不是仅仅依赖静态回测。这涉及在新数据可用时定期重新优化和重新测试您的策略。它使您能够不断调整和调整您的策略,从而在不断变化的市场条件下提高其绩效。
使用统计显着性测试:应用统计测试来评估策略绩效的显着性。这有助于确定观察到的结果是否具有统计意义或仅仅是偶然的。回溯测试中使用的常见统计测试包括 t 测试、引导测试和蒙特卡洛模拟。
通过遵循这些准则,您可以降低开发过度适合历史数据的策略的风险,并增加创建稳健可靠的交易方法的可能性。
请记住,我们的目标是开发能够在不同市场条件下表现出一致盈利能力的交易策略,而不是仅仅根据历史数据表现良好的策略。
面向机器学习工程师的 Python 快速入门
面向机器学习工程师的 Python 快速入门
课程讲师首先介绍预测建模的概念及其在行业中的意义。预测建模侧重于开发可以做出准确预测的模型,即使它们可能无法解释为什么做出这些预测。讲师强调,该课程将特别关注表格数据,例如电子表格或数据库。目标是引导学生从对 Python 机器学习感兴趣的开发人员转变为熟练使用新数据集、开发端到端预测模型以及利用 Python 和 SCIPy 库执行机器学习任务。
首先,讲师提供了 Python 语法速成课程。它们涵盖了变量和赋值等基本概念,阐明了用于赋值的“等号”和用于相等比较的“双等号”之间的区别。讲师演示如何使用 Jupyter Notebook 进行 Python 编码,并提供导航提示,例如创建新笔记本、使用库别名、执行单元以及复制或移动单元。他们还解释了笔记本的自动保存功能和手动保存。最后,视频简要介绍了停止内核的执行。
接下来,讲师将解释如何使用 Jupyter Notebook 中的工具栏进行 Python 引擎导航,以及如何使用 Markdown 对笔记本进行注释。该视频涵盖了基本的流程控制语句,包括 if-then-else 条件、for 循环和 while 循环。这些语句允许在 Python 代码中进行决策和重复。然后,讲师介绍了机器学习的三种关键数据结构:元组、列表和字典。这些数据结构提供了存储和操作数据的有效方法。此外,该视频还包括 NumPy 速成课程,NumPy 是一个支持 Python 中数值运算的库。它涵盖了创建数组、访问数据以及使用数组执行算术运算。
该视频继续讨论两个重要的库:Matplotlib 和 Pandas,它们常用于机器学习中的数据分析和可视化。 Matplotlib 允许用户创建各种绘图和图表,促进数据可视化。另一方面,Pandas 提供用于数据操作和分析的数据结构和函数,特别是通过系列和数据框架结构。该视频重点介绍了 Pandas 的 read_csv 函数对于加载 CSV 文件(机器学习应用程序中最常见的格式)的重要性。它还强调了 Pandas 函数在总结和绘制数据以获取见解并为机器学习任务准备数据方面的有用性。 Python 中的描述性统计被认为是理解数据特征和性质的重要工具。
该视频深入探讨了特定的数据可视化技术,这些技术可以在应用机器学习技术之前帮助进行数据分析。引入直方图、密度图和箱线图作为观察属性分布和识别潜在异常值的方法。相关矩阵和散点图矩阵是识别属性对之间关系的方法。该视频强调了重新缩放、标准化、标准化和二值化数据的重要性,这是为机器学习算法准备数据的必要预处理步骤。拟合和变换方法被解释为数据预处理的常用方法。
下一个讨论的主题是机器学习中的数据预处理技术。该视频涵盖了标准化和标准化这两种重要技术。归一化涉及重新调整属性以具有相同的比例,而标准化涉及将属性转换为均值为零和标准差为一。还解释了二值化,即对数据进行阈值以创建二元属性或清晰值。强调特征选择的重要性,因为不相关或部分不相关的特征会对模型性能产生负面影响。该视频介绍了单变量选择作为特征选择的一种统计方法,并重点介绍了递归特征消除和特征重要性方法的使用,这些方法利用随机森林或额外树等决策树集成。主成分分析 (PCA) 也被讨论为一种数据缩减技术,可以使用线性代数将数据集压缩为更少的维度。
该视频强调了重采样方法对于评估机器学习算法在未见过的数据上的性能的重要性。它警告不要在用于训练的同一数据集上评估算法,因为它可能导致过度拟合和对新数据的泛化不良。训练测试分割集、k 折交叉验证、留一交叉验证和重复随机测试分割等技术被解释为获得算法性能可靠估计的方法。该视频最后讨论了机器学习算法的各种性能指标,例如分类精度、对数损失、曲线下面积、混淆矩阵和分类报告。
该视频深入探讨了用于评估机器学习模型预测的性能指标。它涵盖分类精度、对数损失(用于评估概率)、接收者操作特征 (ROC) 曲线下面积(用于二元分类问题)、混淆矩阵(用于评估多个类别的模型精度)和分类报告(提供精度) 、回忆、F1 分数和每个类别的支持)。此外,该视频还解释了三种常见的回归指标:平均绝对误差、均方误差和 R 平方。演示了实际示例来说明如何使用 Python 计算这些指标。
演讲者介绍了抽查的概念,以确定哪些机器学习算法对于特定问题表现良好。抽查涉及评估多种算法并比较它们的性能。该视频演示了使用 Python 和 scikit-learn 库对六种不同的机器学习模型(包括线性和非线性算法)进行抽查。演讲者强调,由于模型的随机性,结果可能会有所不同。本节最后介绍了回归机器学习模型,让观众为即将到来的抽查这些模型的部分做好准备。
接下来,演讲者以波士顿房价数据集为例介绍线性和非线性机器学习模型。采用具有 10 倍交叉验证的测试工具来演示如何抽查每个模型,并使用均方误差作为性能指标(由于跨文件评分函数中的怪异而倒置)。讨论了假设输入变量呈高斯分布及其与输出变量的相关性的线性回归模型。还解释了岭回归,它是线性回归的一种修改,可以最大限度地减少模型的复杂性。演讲者强调了理解管道或流程的重要性,而不是在此阶段陷入具体的代码实现中。
该视频探讨了理解和可视化机器学习问题的输入变量的过程。它建议使用单变量图(例如箱形图、须状图和直方图)来了解输入变量的分布。对于多变量分析,散点图可以帮助识别输入变量之间的结构关系,并揭示特定属性对之间的高度相关性。该视频还讨论了评估过程,使用具有 10 倍交叉验证的测试工具来评估模型性能。强调了创建验证数据集以独立评估最佳模型的准确性的重要性。评估了六种不同的机器学习模型,并选择最准确的一种进行预测。分类报告、混淆矩阵和准确性估计用于评估预测。最后,视频涉及正则化回归,重点介绍了 Lasso 和 Elastic Net 模型的构建,以降低回归模型的复杂性。
该视频介绍了机器学习中的二元分类问题,旨在使用声纳矿山与岩石数据集预测岩石中的金属。该数据集包含 208 个实例,具有 61 个属性,包括类属性。描述性统计分析表明,尽管数据处于同一范围内,但不同的方法表明标准化数据可能是有益的。探索单模态和多模态数据可视化,例如直方图、密度图和相关性可视化,以深入了解数据。创建验证数据集,并通过测试各种模型来建立模型性能的基线,包括线性回归、逻辑回归、线性判别分析、分类回归树、支持向量机 (SVM)、朴素贝叶斯和 k 最近邻 ( KNN)。使用10倍交叉验证计算并比较每种算法的准确性。
在接下来的部分中,视频讨论了如何使用标准化数据和调整来评估不同的机器学习算法。标准化涉及到对数据进行变换,因此每个属性的均值为0,标准差为1,这可以提高某些模型的性能。为了防止转换过程中的数据泄漏,建议使用标准化数据并为交叉验证测试工具中的每个折叠构建模型的管道。该视频演示了使用网格搜索对训练数据集的标准化副本进行 10 倍交叉验证的 k 最近邻 (KNN) 和支持向量机 (SVM) 的调整技术。确定了 KNN 和 SVM 的最佳配置,并评估了模型的准确性。最后,视频简要讨论了 KNN、决策树回归和 SVM 作为非线性机器学习模型。
机器学习工程师的应用统计学
机器学习工程师的应用统计学
视频中的讲师介绍了统计学领域,并强调了其在处理机器学习中的预测建模问题中的重要性。他们解释说,统计学提供了一系列技术,从简单的汇总统计到假设检验和估计统计。本课程旨在通过 Python 中的实际示例提供统计方法的分步基础。它涵盖了机器学习统计的六个核心方面,并专注于现实世界的应用,使其适合机器学习工程师。
讲师强调机器学习和统计之间的密切关系,并建议程序员可以通过本课程提高统计技能,从而受益。他们将统计学领域分为两类:描述性统计学和推论性统计学。描述性统计涉及使用平均值和图形表示等测量来总结和描述数据。另一方面,推论统计用于根据样本数据对更大的总体进行推论。
还强调了正确数据处理的重要性,包括解决数据丢失、损坏和错误的问题。然后,该视频深入探讨了机器学习模型的数据准备所涉及的各个步骤。这包括使用标准化和归一化等统计方法进行数据清理、数据选择、数据采样和数据转换。视频还强调了数据评估,讨论了实验设计、数据重采样和模型选择,以评估模型的技能。为了预测新数据,视频建议使用估计统计数据。
该视频解释了统计学中使用的不同测量尺度,即名义尺度、序数尺度、区间尺度和比率尺度。它讨论了适用于每个规模的统计技术以及如何在机器学习中实施它们。强调了理解和报告建模中不确定性的重要性,特别是在处理样本集时。然后,视频重点介绍了在各种数据集中常见的正态分布。它演示了如何生成样本数据并使用直方图直观地评估其对高斯分布的拟合。虽然大多数数据集不具有完美的高斯分布,但它们通常表现出类似高斯的属性。
强调了选择细粒度的数据分割方式以揭示底层高斯分布的重要性。探索了集中趋势的度量,例如均值和中位数,以及作为分布扩展度量的方差和标准差。随机性被认为是机器学习中的重要工具,可以帮助算法变得更加稳健和准确。解释了各种随机性来源,包括数据错误和噪声。
该视频解释了机器学习算法通常利用随机性来实现更好的性能并生成更优化的模型。随机性使算法能够探索不同的可能性并找到更好的数据映射。讨论了可控和不可控的随机源,并解释了如何使用种子函数使模型内的随机性保持一致。该视频提供了一个使用 Python random 模块生成随机数的示例,并重点介绍了 numpy 库的伪随机数生成器和标准库的伪随机数生成器之间的区别。还讨论了何时为随机数生成器提供种子的两种情况,即在数据准备期间和数据分割期间。
强调在评估算法时一致地分割数据并使用伪随机数生成器。该视频建议以结合测量的不确定性和算法性能的方式评估模型。通过对数据的多个分割来评估算法,可以深入了解其性能如何随着不同的训练和测试数据而变化。在相同的数据分割上多次评估算法有助于了解其性能如何变化。视频还介绍了大数定律和中心极限定理,强调拥有更多数据可以提高模型的性能,并且随着样本量的增加,均值分布接近高斯分布。
该视频使用掷骰子和代码演示了中心极限定理,展示了随着样本量的增加,样本均值如何近似高斯分布。
该视频强调了评估机器学习模型和理解其预测中涉及的不确定性的重要性。它引入了准确率、精确率、召回率和F1分数等评估指标,这些指标通常用于评估分类模型的性能。视频解释了准确度衡量预测的整体正确性,精确度衡量真阳性预测在所有阳性预测中的比例,召回率衡量真阳性预测在所有实际阳性实例中的比例,F1 分数将精度和召回率结合起来一个单一的指标。它还讨论了混淆矩阵的概念,它通过显示真阳性、真阴性、假阳性和假阴性预测的数量,提供分类模型性能的更详细视图。
演讲者演示了如何使用 Python 的 scikit-learn 库计算这些评估指标。它展示了如何导入必要的模块、将数据拆分为训练集和测试集、训练分类模型、对测试集进行预测,以及使用准确度、精确度、召回率和 F1 分数评估模型的性能。该视频强调了在未见过的数据上评估模型以确保其泛化能力的重要性。
此外,视频还介绍了受试者工作特征 (ROC) 曲线和曲线下面积 (AUC) 的概念,作为二元分类模型的评估指标。 ROC 曲线绘制了各种分类阈值下的真阳性率与假阳性率,提供了模型在不同阈值下的性能的直观表示。 AUC 表示 ROC 曲线下的面积,并提供单一指标来比较不同模型的性能。该视频介绍了如何使用 Python 的 scikit-learn 库绘制 ROC 曲线并计算 AUC。
过度拟合的概念被视为机器学习中的一个常见问题,其中模型在训练数据上表现良好,但无法推广到新的、未见过的数据。该视频解释了当模型变得过于复杂并且学习到特定于训练数据的模式而在一般人群中不存在时,就会发生过度拟合。该视频演示了如何通过比较模型的训练和测试性能来可视化过度拟合。它解释了过度拟合模型的训练误差较低,但测试误差较高,表明泛化能力较差。该视频建议使用岭回归和套索回归等正则化技术,通过向模型的目标函数添加惩罚项来减轻过度拟合。
引入交叉验证的概念作为评估机器学习模型的性能和泛化的技术。该视频解释了交叉验证涉及将数据分成多个子集,在一部分数据上训练模型,并评估其在剩余部分上的性能。这个过程会重复多次,使用不同的子集进行训练和测试,并对结果进行平均以提供模型性能的估计。该视频演示了如何使用 Python 的 scikit-learn 库执行交叉验证,特别是 K 折交叉验证方法。
接下来,视频讨论了特征选择的概念和机器学习中的重要性。它解释了特征选择涉及识别有助于模型性能的最相关特征或变量。该视频强调了选择信息丰富的特征以提高模型的准确性、减少过度拟合并增强可解释性的重要性。它引入了不同的特征选择技术,例如单变量选择、递归特征消除和特征重要性评分。该视频演示了如何使用 Python 的 scikit-learn 库实现特征选择。
降维的概念也被讨论为一种解决机器学习中维数灾难的技术。该视频解释了降维涉及减少数据集中的特征或变量的数量,同时保留大部分相关信息。它引入了主成分分析(PCA)作为常用的降维技术。 PCA旨在通过识别数据中最大方差的方向将数据变换到低维空间。视频解释了 PCA 创建了新的特征,称为主成分,它们是原始特征的线性组合。这些主要成分捕获数据中最重要的信息,可以用作机器学习模型的输入。
该视频演示了如何使用 Python 的 scikit-learn 库执行 PCA。它展示了如何导入必要的模块、标准化数据、初始化 PCA 对象、将 PCA 模型拟合到数据以及将数据转换到低维空间。该视频还解释了如何根据解释的方差比确定要保留的最佳主成分数量。
集成学习的概念是作为一种通过组合多个单独模型来提高机器学习模型性能的技术而引入的。该视频解释说,集成学习利用了群体的智慧,每个单独的模型都贡献自己的预测,最终的预测是根据投票或平均机制确定的。该视频讨论了两种流行的集成学习方法:bagging 和 boosting。 Bagging 涉及在数据的不同子集上训练多个模型并聚合它们的预测,而 boosting 则侧重于按顺序训练模型,每个模型更加重视先前模型错误分类的实例。
该视频演示了如何使用 Python 的 scikit-learn 库实现集成学习。它展示了如何导入 bagging 和 boosting 所需的模块、初始化集成模型、将它们拟合到数据以及使用集成模型进行预测。该视频强调,集成学习通常可以提高机器学习模型的整体性能和鲁棒性。
最后,视频简要介绍了机器学习的高级主题,例如深度学习和自然语言处理 (NLP)。它提到深度学习涉及训练多层深度神经网络来学习数据中的复杂模式。 NLP 专注于开发模型和技术来理解和处理人类语言,从而实现文本分类、情感分析和机器翻译等应用。该视频最后强调,机器学习是一个广阔且快速发展的领域,拥有众多应用以及进一步探索和学习的机会。
该视频全面概述了机器学习中的基本概念和技术,包括模型评估、过度拟合、正则化、交叉验证、特征选择、降维、集成学习以及深度学习和 NLP 的介绍。它演示了使用 Python 和 scikit-learn 库的实际实现,使其成为初学者和希望增强对机器学习理解的人的宝贵资源。
机器学习工程师的应用线性代数
机器学习工程师的应用线性代数
该视频强调了学习线性代数对于机器学习工程师的重要性,因为它是理解微积分和统计学的基本构建块,而微积分和统计学对于机器学习至关重要。对线性代数的深入了解可以让从业者对机器学习方法的工作原理有更好的直觉,使他们能够定制算法并开发新算法。
本课程采用自上而下的方法教授线性代数的基础知识,使用具体示例和数据结构来演示矩阵和向量的运算。线性代数被描述为矩阵和向量的数学,提供了一种数据操作语言,并允许通过对这些数据结构的操作来创建新的列或数字数组。线性代数最初于 1800 年代末发展起来,用于求解线性方程组,现已成为理解机器学习的关键先决条件。
讲者介绍数值线性代数的概念,涉及线性代数在计算机中的应用。这包括实现线性代数运算以及解决在数字计算机中使用有限的浮点精度时出现的挑战。数值线性代数在机器学习中发挥着至关重要的作用,特别是在严重依赖图形处理单元 (GPU) 来高效执行线性代数计算的深度学习算法中。各种开源数值线性代数库以基于 Fortran 的库为基础,通常与 Python 等编程语言结合使用来计算线性代数运算。
线性代数在统计学中的重要性得到凸显,特别是在多元统计分析、主成分分析和解决线性回归问题中。该视频还提到了线性代数在信号处理、计算机图形学甚至物理学等领域的广泛应用,例如阿尔伯特·爱因斯坦的相对论利用张量和张量微积分(一种线性代数)。
该视频进一步探讨了线性代数在机器学习任务中的实际应用。它介绍了使用线性代数运算(例如裁剪、缩放和剪切)来处理图像的概念,演示了如何在这种情况下使用线性代数的符号和运算。此外,该视频还解释了一种流行的编码技术,称为分类变量的单热编码。介绍了机器学习中使用的主要数据结构,即 N 维数组或 ND 数组,并讨论了 Python 中的 NumPy 库作为创建和操作这些数组的强大工具。该视频涵盖了重要的功能,例如 v-stack 和水平堆叠,这些功能可以从现有数组创建新数组。
解释了操作和访问 NumPy 数组中的数据(通常用于表示机器学习数据)。该视频演示了如何使用 array 函数将一维列表转换为数组,以及如何使用列表列表创建二维数据数组。它还涵盖了 NumPy 数组中的索引和切片操作,包括使用冒号运算符进行切片和负索引。强调了切片在机器学习中指定输入和输出变量的重要性。
视频中讨论了在机器学习中处理多维数据集的技术。它从一维切片开始,逐渐发展到二维切片,并将数据分离为输入和输出值以进行训练和测试。涵盖了数组重塑,解释了如何将一维数组重塑为具有一列的二维数组,以及如何将二维数据转换为三维数组,以用于需要一个或多个时间步长和特征的多个样本的算法。引入了数组广播的概念,允许使用不同大小的数组进行算术运算,使得不同大小的数据集能够得到有效的处理。
该视频还谈到了 NumPy 中数组算术的局限性,特别是算术运算只能在相同维度和相同大小的维度上执行。然而,NumPy 的内置广播功能克服了这一限制,该功能沿着最后一个不匹配的维度复制较小的数组,从而可以在不同形状和大小的数组之间进行算术。视频提供了三个广播示例,包括标量和一维数组、二维数组中的标量以及二维数组中的一维数组。需要注意的是,广播遵循严格的规则,即只有当数组中每个维度的形状相等或者其中一个维度的大小为一时才能执行算术。
接下来,演讲者介绍了向量的概念,向量是一个或多个称为标量的值的元组。向量通常使用小写字符(例如“v”)表示,并且可以视为 n 维空间中的点或坐标,其中“n”表示维数。解释了在 Python 中将向量创建为 NumPy 数组。该视频还介绍了向量算术运算,例如向量加法和减法,这些运算对相等长度的向量按元素执行,从而产生相同长度的新向量。此外,演讲者还解释了如何将向量乘以标量来缩放其大小,并演示了如何使用 Python 中的 NumPy 数组执行这些运算。还讨论了两个向量的点积,它产生一个标量并可用于计算向量的加权和。
然后焦点转向向量范数及其在机器学习中的重要性。向量范数是指向量的大小或长度,并使用总结向量与向量空间原点的距离的度量来计算。需要强调的是,除了全零值的向量之外,向量范数始终为正。该视频介绍了机器学习中使用的四种常见向量范数计算。它从向量 L1 范数开始,然后是 L2 范数(欧几里德范数)和最大范数。本节还定义了矩阵并解释了如何在 Python 中操作它们。讨论了矩阵算术,包括矩阵-矩阵乘法(点积)、矩阵-向量乘法和标量乘法。矩阵被描述为具有一列或多列和一行或多行的二维标量数组,通常用大写字母(例如“A”)表示。
接下来,介绍机器学习的矩阵运算的概念。这包括矩阵乘法、矩阵除法和矩阵标量乘法。矩阵乘法,也称为矩阵点积,要求第一个矩阵的列数等于第二个矩阵的行数。视频中提到可以使用NumPy中的dot函数来实现这个操作。还解释了矩阵转置的概念,即通过翻转原始矩阵的行数和列数来创建新矩阵。最后,讨论矩阵求逆的过程,该过程涉及找到另一个矩阵,该矩阵与原始矩阵相乘,得到单位矩阵。
视频继续讨论矩阵求逆,进一步探讨了这个概念。矩阵求逆由矩阵旁边的负 1 上标表示。该视频解释了矩阵求逆涉及寻找有效的数值方法。介绍方阵的trace操作,计算对角线元素之和,可以使用NumPy中的trace函数来计算。方阵的行列式定义为矩阵体积的标量表示,也可以使用 NumPy 中的 det 函数计算。简要提及矩阵的秩,它估计矩阵中线性独立的行或列的数量,通常使用奇异值分解来计算。最后,解释了稀疏矩阵的概念,强调它们主要包含零值,并且表示和使用的计算成本可能很高。
然后,视频深入研究了稀疏矩阵,稀疏矩阵主要由零值组成,与大多数具有非零值的密集矩阵不同。稀疏性是通过计算稀疏性得分来量化的,稀疏性得分是零值的数量除以矩阵中元素的总数。该视频强调了与稀疏性相关的两个主要问题:空间复杂度和时间复杂度。值得注意的是,表示和使用稀疏矩阵的计算成本可能很高。
为了应对这些挑战,视频提到 Scipy 提供了用于创建和操作稀疏矩阵的工具。此外,它还强调了 NumPy 和 Scipy 中的许多线性代数函数可以对稀疏矩阵进行运算,从而能够对稀疏数据进行高效的计算和运算。
稀疏矩阵通常用于应用机器学习中的数据观察和数据准备。它们的稀疏性允许更有效地存储和处理具有大量零值的大型数据集。通过利用稀疏结构,机器学习算法可以受益于减少的内存使用和更快的计算。
接下来,该视频讨论了线性代数中常用的不同类型的矩阵,特别是与机器学习相关的矩阵。引入方阵,其中行数等于列数。还提到了具有不同行数和列数的矩形矩阵。该视频解释了方阵的主对角线,方阵由具有相同行和列索引的元素组成。方阵的阶数(定义为行数或列数)也包括在内。
此外,视频还介绍了对称矩阵,即等于其转置的方阵。解释了三角矩阵,包括上三角矩阵和下三角矩阵。还讨论了所有非对角元素均为零的对角矩阵。单位矩阵是一种方阵,主对角线上有 1,其他位置有 0,在其作为乘法单位的作用的背景下进行解释。还引入了当两个向量的点积为零时形成的正交矩阵。
该视频接下来讨论正交矩阵和张量。正交矩阵是一种特定类型的方阵,其中列和行是正交单位向量。这些矩阵在计算其逆时计算效率高且稳定,使其可用于各种应用,包括深度学习模型。视频进一步提到,在 TensorFlow 中,张量是一种基本数据结构,是向量和矩阵的泛化。张量表示为多维数组,可以在 Python 中使用 n 维数组进行操作,类似于矩阵。该视频强调了可以对张量、矩阵和向量执行逐元素张量运算,例如加法和减法,从而提供更高维度的直觉。
接下来,视频介绍了矩阵分解,这是一种将矩阵分解为其组成部分的方法。矩阵分解简化了复杂的矩阵运算并实现高效计算。涵盖两种广泛使用的矩阵分解技术:方阵的 LU(下-上)分解和矩形矩阵的 QR(QR 分解)分解。
LU 分解可以简化线性回归问题中的线性方程,并促进矩阵行列式和逆矩阵等计算。 QR 分解可应用于求解线性方程组。这两种分解方法都可以使用Python中NumPy包中的内置函数来实现,为各种线性代数问题提供高效可靠的解决方案。
此外,视频还讨论了专门用于对称和正定矩阵的 Cholesky 分解。 Cholesky 分解由下三角矩阵表示,它被认为是分解对称矩阵的 LU 分解效率的近两倍。
视频简要提到了矩阵分解方法,包括特征分解,用于简化复杂的运算。特征分解将矩阵分解为其特征向量和特征值。特征向量是表示方向的系数,而特征值是标量。特征向量和特征值都有实际应用,例如降维和执行复杂的矩阵运算。
最后,该视频涉及奇异值分解(SVD)的概念及其在机器学习中的应用。 SVD 用于机器学习中的各种矩阵运算和数据缩减方法。它在最小二乘线性回归、图像压缩、数据去噪等计算中发挥着至关重要的作用。
视频解释了 SVD 允许将矩阵分解为三个单独的矩阵:U、Σ 和 V。U 矩阵包含左奇异向量,Σ 是包含奇异值的对角矩阵,V 包含右奇异向量。通过从这些分量重建原始矩阵,可以获得原始数据的近似值,同时降低其维数。
SVD 的主要应用之一是降维。通过选择最重要的奇异值及其相应的奇异向量的子集,可以在较低维空间中表示数据而不会丢失关键信息。该技术在数据具有高维度的情况下特别有用,因为它允许更有效的存储和计算。
该视频强调,SVD 已通过一种称为潜在语义分析 (LSA) 或潜在语义索引 (LSI) 的技术成功应用于自然语言处理。通过将文本文档表示为矩阵并执行 SVD,LSA 可以捕获文档的底层语义结构,从而实现文档相似性和主题建模等任务。
此外,视频还介绍了截断的SVD类,它直接实现了矩阵降维的功能。通过截断的 SVD,可以将原始矩阵转换为低维表示,同时保留最重要的信息。该技术在处理大型数据集时特别有用,因为它可以更有效地进行处理和分析。
总之,该视频涵盖了与机器学习线性代数相关的各种主题。它强调了学习线性代数作为理解机器学习背景下的微积分和统计学的基本构件的重要性。该视频讨论了线性代数在机器学习中的应用,例如算法的定制和开发、数值线性代数、统计分析以及信号处理和计算机图形学等各种其他领域。
此外,该视频还探讨了线性代数中的关键概念,包括向量、矩阵、矩阵运算、向量范数、矩阵分解技术和稀疏矩阵。它解释了这些概念如何在机器学习中使用,并提供了对其实际应用的见解。
通过理解线性代数,机器学习从业者可以更深入地了解机器学习算法的数学基础,并将其有效地应用于现实世界的问题。线性代数是数据操作、降维和优化的强大工具,可实现高效且有效的机器学习解决方案。
面向机器学习工程师的 XGBoost 完整介绍
面向机器学习工程师的 XGBoost 完整介绍
在视频中,讲师为机器学习工程师全面介绍了 XGBoost。他们解释说,XGBoost 是一个开源机器学习库,以其快速构建高度准确的分类和回归模型的能力而闻名。它作为构建现实世界模型的首选而广受欢迎,特别是在处理高度结构化的数据集时。 XGBoost 由 Taiki Chen 创作,基于梯度提升决策树技术,可实现快速高效的模型构建。
讲师强调 XGBoost 支持多种接口,包括 Python 和 scikit-learn 实现。他们继续演示 XGBoost,展示用于加载数据和构建模型的各种模块。
然后,该视频重点介绍了准备用于训练 XGBoost 模型的数据集。讲师强调将数据分为训练集和测试集的重要性。他们将目标变量识别为二元分类问题,并解释了为 XGBoost 模型设置必要的超参数的过程。一旦模型在训练数据上进行了训练,他们就会使用准确性分数作为指标来评估其在测试数据上的准确性。
为了更好地理解 XGBoost,讲师深入研究了梯度提升的概念及其在更广泛的传统机器学习模型中的作用。他们解释说,梯度增强是一种将弱模型与相同类型的其他模型相结合以创建更准确模型的技术。在此过程中,每个后续树都是针对前一树的预测残差而构建的。讲师强调决策树用于梯度提升,因为它们提供了基于给定条件的可能决策解决方案的图形表示。他们还提到,设计决策树需要有详细记录的思维过程才能有效地识别潜在的解决方案。
该视频进一步探讨了使用递归二元分割创建二元决策树。此过程涉及以贪婪方式评估所有输入变量和分割点,以最小化衡量预测值与实际值的接近程度的成本函数。讲师解释说,选择成本最低的分割,并且可以进一步递归地进一步细分所得组。他们强调所使用的算法是贪婪的,因为它专注于在每一步做出最佳决策。但是,最好使用分割次数较少的决策树,以确保更好的可理解性并降低过度拟合数据的风险。讲师强调,XGBoost 提供了防止过度拟合的机制,例如限制每棵树的最大深度和修剪不相关的分支。此外,它们还涵盖了标签编码并演示了如何使用 scikit-learn 加载 iris 数据集。
接下来,视频介绍了使用标签编码器方法将目标标签编码为数值变量的过程。将数据拆分为训练和测试数据集后,讲师在训练数据上定义并训练 XGBoost 分类器。然后,他们使用经过训练的模型对测试数据集进行预测,准确率达到 90%。引入集成学习的概念作为一种组合多个模型来提高预测精度的方法,最终提高学习算法的效率。讲师强调为分类或回归问题选择正确模型以获得最佳结果的重要性。
该视频深入探讨了机器学习模型中偏差和方差的概念,并强调了两者之间平衡的必要性。集成学习是一种通过组合弱学习器组来创建更复杂的模型来解决这种平衡的技术。介绍了两种集成技术:bagging 和 boosting。 Bagging 旨在通过创建数据子集来训练决策树并创建具有高方差和低偏差的模型集合来减少方差。另一方面,Boosting 涉及使用决策树顺序学习模型,从而可以纠正先前模型所犯的错误。讲师强调,梯度提升是一种特定类型的提升,它使用回归树形式的弱学习器来优化可微损失函数。
该视频详细解释了梯度提升的概念,概述了其三步过程。第一步涉及迭代添加弱学习器(例如决策树)以最小化损失。第二步是顺序添加树,最后一步重点是通过进一步迭代减少模型误差。为了演示该过程,该视频展示了如何使用 k 折交叉验证来分割数据。通过XGBoost,获得每次折叠的分数。教师选择决策树作为弱学习器,确保深度较浅以避免过度拟合。最后,损失函数被定义为机器学习模型对数据的拟合程度的度量。
解释了梯度提升的核心步骤,包括优化损失函数、利用弱学习器(通常是决策树)以及通过集成学习以加法方式组合多个弱学习器。该视频还涵盖了使用 XGBoost 的实际方面,例如处理缺失值、将模型保存到磁盘以及采用早期停止。提供了使用 Python 代码的演示来说明 XGBoost 的各种用例。此外,该视频还强调了数据清理的重要性,包括处理缺失值的技术,例如平均值插补。
演讲者讨论了正确清理数据而不是仅仅依靠算法来完成工作的重要性。他们演示了如何删除空值可以提高模型准确性并警告处理空值的算法。 pickling 的概念涉及将训练好的模型保存到磁盘以供以后使用,它是使用 Python 中的 pickle 库引入的。演讲者演示了如何保存和加载模型。他们还展示了如何使用 XGBoost 和 matplotlib 库中的绘图重要性函数来绘制数据集中每个属性的重要性。
演讲者讨论了在构建机器学习模型时分析和测试不同场景的重要性,强调 XGBoost 的特征重要性分数可能并不总是反映特征对模型准确性的实际影响。他们使用泰坦尼克号数据集的示例来演示添加“性别”属性如何提高模型准确性,尽管在特征重要性得分中排名较低。演讲者强调测试各种场景的重要性,而不仅仅是依赖功能重要性分数。他们还提到 XGBoost 可以在训练期间评估和报告测试集的性能。
该视频介绍了如何通过指定评估指标并传递 x 和 y 对数组来监控 XGBoost 模型在训练期间的性能。模型在每个评估集上的表现都会被存储并在训练后可供使用。该视频介绍了学习曲线,它提供了对模型行为的深入了解,并有助于通过尽早停止学习来防止过度拟合。提前停止是一种在验证分数没有改善的情况下在固定数量的 epoch 后停止训练的技术。
该视频介绍了 XGBoost 中早期停止轮次的使用,并演示了如何构建回归模型来评估波士顿的房价。讨论了梯度提升中并行性的好处,重点是单个树的构建和输入数据的有效准备。该视频演示了多线程支持,它利用系统的所有核心同时执行计算,从而提高程序执行速度。尽管 XGBoost 主要针对分类问题,但该视频也强调了其在构建回归模型方面的出色能力。
演讲者创建一个列表来保存示例的迭代次数,并使用 for 循环根据线程数测试模型的执行速度。他们打印每次迭代的构建速度并绘制结果,显示模型的速度如何随着线程数量的增加而降低。然后,演讲者讨论了超参数调整,其中涉及调整模型中的参数以增强其性能。他们探索了 XGBoost 和 scikit-learn 的默认参数,并提到调整超参数对于优化 XGBoost 模型的性能至关重要。该视频解释说,超参数是不是从数据中学习的设置,而是由用户手动设置的。调整超参数涉及系统地搜索可实现最高模型性能的参数值的最佳组合。
为了执行超参数调整,视频介绍了两种常见的方法:网格搜索和随机搜索。网格搜索涉及定义超参数值网格并详尽地评估每个组合。另一方面,随机搜索从预定义的搜索空间中随机采样超参数组合。该视频建议当搜索空间较大或超参数数量较多时使用随机搜索。
该视频演示了使用 scikit-learn 中的 RandomizedSearchCV 类进行超参数调整。他们定义了一个参数网格,其中包含不同的超参数值,例如学习率、最大深度和子样本比率。 RandomizedSearchCV 类通过交叉验证执行随机搜索,评估每个参数组合的性能。调整后,选择最佳超参数,并使用这些最佳值训练模型。
演讲者解释说,超参数调整有助于找到欠拟合和过拟合之间的最佳权衡。根据特定数据集和当前问题仔细选择超参数,以达到平衡并避免过度拟合,这一点非常重要。
除了超参数调整之外,该视频还讨论了 XGBoost 模型中特征的重要性。特征重要性可以深入了解哪些特征对模型的预测影响最显着。演讲者解释说,特征重要性由平均增益决定,平均增益衡量特征在决策树中使用时所带来的损失函数的改善程度。平均增益越高表明重要性越高。
该视频演示了如何使用 XGBoost 库提取和可视化特征重要性。他们绘制了一个条形图,显示最重要的特征及其相应的重要性得分。演讲者指出,特征重要性有助于特征选择、降维以及深入了解根本问题。
在视频的最后,演讲者简要提到了与 XGBoost 相关的其他高级主题。他们通过调整scale_pos_weight超参数来处理不平衡数据集,使用XGBoost的内置功能处理缺失值,以及通过one-hot编码或使用XGBoost中对分类特征的内置支持来处理分类变量。
该视频全面概述了 XGBoost,涵盖其关键概念、实现、超参数调整和特征重要性分析。演示和代码示例有助于说明在 Python 中使用 XGBoost 的实际情况。对于希望利用 XGBoost 执行分类和回归任务的机器学习工程师来说,它是宝贵的资源。
面向机器学习工程师的 Python 特征工程案例研究
面向机器学习工程师的 Python 特征工程案例研究
讲师首先介绍特征工程的概念及其在从每天生成的大量数据中提取价值方面的关键作用。他们强调特征工程在最大化从杂乱数据中提取的价值方面的重要性。假设学习者具有入门级 Python 知识,以及使用 NumPy、Pandas 和 Scikit-Learn 的经验。
讲师强调了探索性数据分析和数据清理在构建机器学习模型过程中的重要性。他们解释说,这些阶段将是课程的主要重点。虽然学习者将在最后一章中完成整个流程,但主要重点将是特征工程。
讲师强调特征工程对于提高模型性能至关重要。他们解释说,特征工程涉及将原始数据转换为能更好地代表机器学习模型的底层信号的特征。特征的质量直接影响模型的性能,因为好的特征甚至可以使简单的模型变得强大。讲师建议在选择特征、删除不相关的特征以及包括与所分析问题相关的因素时使用常识。
视频中介绍了各种清洁技术和工程功能。去除异常值,对数据进行标准化和转换以解决偏斜问题,组合特征以创建更有用的特征,并根据连续变量创建分类变量。这些技术旨在获得能够准确捕获数据中重要趋势的特征,同时丢弃不相关的信息。以泰坦尼克号数据集为例,包含船上乘客的信息。
讲师讨论机器学习中的类别不平衡问题,其中正面案例明显少于负面案例。他们建议调整模型以更好地检测这两种情况下的信号,例如通过对负类进行下采样。然而,由于示例中使用的数据集并不严重不平衡,因此讲师继续探索数据特征。对连续特征进行基本的探索性数据分析,丢弃姓名、机票、性别、舱位、登机等非数字特征。显示清理后的数据集,并检查特征的分布和相关性。研究发现,“p-class”和“fare”特征与生存列表现出最强的相关性,表明它们在预测中的潜在用途。
对连续特征进行进一步的探索性数据分析。姓名和票证等非数字特征将被删除,并打印数据集的前五行。使用 pandas 函数描述数据,揭示缺失值和名为“Survived”的二进制目标变量。分析相关矩阵以确定特征之间的相关性及其与“幸存”的关系。强调了查看数据完整分布的重要性,因为仅依赖平均值或中值可能会导致不准确的结论。使用绘图和可视化来探索分类特征与生存率之间的关系,揭示诸如头等舱乘客和家庭成员较少的乘客的生存率较高等趋势。
讲师强调了特征工程的重要性,并建议不要在没有适当测试的情况下过度压缩特征。他们讨论了探索和设计分类特征的过程,包括识别缺失值和每个特征中唯一值的数量。建议对特征进行分组并分析每组中目标变量的平均值,作为更好地理解数据集的有用方法。探索了缺失的客舱特征与生存率之间的关系,从而发现了尽管该特征看似价值较低的生存率的强有力指标。
特征探索表明,头衔、舱位指标和性别与生存有很强的相关性,而登船特征是多余的。船舱与生存率之间的关系是通过观察来解释的,即在瑟堡登机的人越多,拥有船舱的人就越多,从而导致生存率越高。机上直系亲属的人数合并为一项功能,并根据其相关性建议乘客舱位或票价。
讲师解释说,下一步是根据从探索性数据分析中获得的见解来设计功能。他们首先从“名称”功能创建一个名为“标题”的新功能。 “头衔”功能从每位乘客的姓名中提取头衔(例如,先生、夫人、小姐),因为它可以提供与社会地位和生存率相关的附加信息。为了简单起见,“标题”特征随后被映射到数值。
接下来,讲师重点关注“客舱”功能,该功能最初有许多缺失值。然而,通过分析有和没有舱位信息的乘客的生存率,发现记录了舱位号的乘客的生存率更高。基于这一见解,创建了一个名为“HasCabin”的新二进制特征来指示乘客是否有记录的机舱。
接下来,讲师将讨论“性”功能。由于机器学习模型通常更适合数字数据,因此“性别”特征被映射为二进制值,其中 0 代表男性,1 代表女性。
在设计“性别”功能后,讲师将介绍“登船”功能,该功能指示登船港口(C = 瑟堡,Q = 皇后镇,S = 南安普敦)。然而,之前确定“Embarked”特征是多余的,对生存预测没有显着贡献。因此,它被从数据集中删除。
然后,讲师重点关注“Pclass”和“Fare”特征,这些特征在探索性数据分析过程中与生存率表现出很强的相关性。这些特征保持原样,因为它们已经采用适合机器学习模型的格式。
在这个阶段,讲师强调数据预处理和为模型准备特征的重要性。数据集分为训练集和测试集,以准确评估模型的性能。 “年龄”特征中的缺失值是使用乘客的中位年龄来估算的,并且使用 Scikit-Learn 的预处理函数将所有特征标准化为具有零均值和单位方差。
最后,讲师简要讨论了分类特征的 one-hot 编码的概念,并提到将在下一个视频中更详细地介绍它。 One-hot 编码是一种常用技术,用于将分类变量表示为二进制向量,使模型能够正确解释它们。
总而言之,在这部分课程中,讲师介绍了特征工程的概念,并解释了其在机器学习中的意义。他们进行了探索性数据分析,清理了数据集,并根据获得的见解设计了功能。讲师演示了如何创建新特征、将分类特征映射到数值以及删除冗余特征。接下来的步骤涉及数据预处理和为机器学习模型准备特征。
请注意,上述摘要是基于特征工程课程中通常涵盖的一般主题的假设延续。实际内容和示例可能会因具体课程和讲师而异。
Google 云平台上的 BigQuery 机器学习
Google 云平台上的 BigQuery 机器学习
该视频讨论了重点介绍使用 BigQuery 进行机器学习的课程内容。 BigQuery 是一个企业数据仓库,最初在 Google 内部使用,后来成为云服务。它具有高度可扩展性和无服务器性,能够容纳 PB 级数据并提供快速查询结果。课程教学基于真实案例研究,指导学习者完成从数据源到模型创建的机器学习模型构建过程。在整个课程中,学习者利用 BigQuery 构建模型,要求他们设置特定于 BigQuery 的 Google Cloud Platform (GCP) 帐户。
该视频解释了 Google 扩展硬件资源的指导原则,强调了横向扩展而不是向上扩展的决定。谷歌认识到硬件随时可能发生故障,因此设计应考虑到潜在的故障。此外,Google 使用价格实惠且允许供应商灵活性的商品硬件。由于硬件成本较高,横向扩展优于纵向扩展。 Google 开发了 GFS、MapReduce 和 Bigtable 等技术,这些技术带来了横向扩展的硬件架构。 Colossus 已经取代了 GFS,并作为 Google 技术(包括 BigQuery)的底层分布式子系统。
讲师概述了 Google 的数据库解决方案 Spanner,该解决方案分布在全球范围内,并依赖 Colossus 来管理分布式事务。该视频还演示了在 Google Cloud Platform 中注册和管理计费帐户的过程。用户可以通过访问平台网站、同意条款并提供必要信息来创建GCP帐户。新用户将获得 300 美元的信用额度,可以在 GCP 上使用,可以通过结算部分进行监控。讲师建议设置预算警报,以便在达到某些计费目标时收到通知。
详细讨论了 BigQuery 的创建和目的。 Google 的指数级数据增长需要开发 BigQuery,它允许对大型数据集进行交互式查询。 BigQuery 可以处理查询,无论查询涉及 50 行还是 500 亿行。其非标准 SQL 方言有助于缩短学习曲线,并且可以在数千台机器上并行执行 SQL。虽然 BigQuery 存储结构化数据,但它与关系数据库不同,它支持表内的嵌套记录类型,从而可以存储嵌套结构。
解释了 BigQuery 的架构,重点介绍了其并行化方法。与大多数每个核心执行一个查询的关系数据库系统不同,BigQuery 旨在跨数千个核心运行单个查询,与传统方法相比,显着提高了性能。 Dremel 引擎支持查询流水线,允许其他查询在某些查询等待 I/O 时利用可用的核心。 BigQuery 采用多租户方法,使多个客户能够在同一硬件上同时运行查询,而不会影响其他位置。 BigQuery 界面由三个核心窗格组成,包括查询历史记录、保存的查询、作业历史记录以及用于组织对表和视图的访问的资源部分。
该视频详细介绍了 Google Cloud Console 中特定于 BigQuery 的屏幕和面板。导航菜单显示 BigQuery 资源,例如数据集和表,而 SQL 工作区部分允许用户创建查询、使用表以及查看其作业历史记录。 “资源管理器”面板列出了当前项目及其资源,而“详细信息”面板提供有关所选资源的信息,并允许修改表架构、数据导出和其他功能。需要澄清的是,BigQuery 不适合 OLTP 应用程序,因为它缺乏对频繁的小行级更新的支持。虽然 BigQuery 不是 NoSQL 数据库,但它使用 SQL 方言,更接近 OLAP 数据库,为许多 OLAP 使用案例提供类似的优势和适用性。
进一步讨论了 Google BigQuery 的定义,强调其完全托管、高度可扩展、经济高效且快速的云。
以下是视频中讨论的其他要点:
BigQuery 的存储格式:BigQuery 使用列式存储格式,该格式针对查询性能进行了优化。它以压缩和列式方式存储数据,允许高效处理查询中的特定列,而无需访问不必要的数据。这种格式对于涉及聚合和过滤的分析工作负载特别有用。
数据提取:BigQuery 支持各种数据提取方法。它可以直接从 Google Cloud Storage、Google Sheets 和 Google Cloud Bigtable 等来源加载数据。它还提供与其他数据处理工具(例如 Dataflow 和 Dataprep)的集成,用于 ETL(提取、转换、加载)操作。
数据分区和集群:为了优化查询性能,BigQuery 提供了分区和集群等功能。分区涉及根据所选列(例如日期)将大型数据集划分为较小的、可管理的部分。集群根据一列或多列进一步组织每个分区内的数据,通过减少扫描的数据量来提高查询性能。
数据访问控制和安全性:BigQuery 提供强大的访问控制来管理数据安全。它与 Google Cloud Identity and Access Management (IAM) 集成,允许用户在项目、数据集和表级别定义细粒度的访问权限。 BigQuery 还支持静态和传输中加密,确保敏感数据的保护。
数据定价和成本优化:该视频简要介绍了 BigQuery 的定价模型。它以按需付费的方式运行,根据查询处理的数据量向用户收费。 BigQuery 提供查询缓存等功能,可以通过避免冗余数据处理来降低成本。优化查询并避免不必要的数据扫描以最大限度地降低成本非常重要。
使用 BigQuery 进行机器学习:本课程涵盖使用 BigQuery 执行机器学习任务。 BigQuery 与 AutoML 和 TensorFlow 等 Google Cloud 机器学习服务集成,允许用户在训练机器学习模型之前利用 BigQuery 的强大功能进行数据准备和特征工程。
使用案例和示例:讲师提到了 BigQuery 擅长的各种实际使用案例,例如分析大量日志数据、进行市场研究、执行客户细分以及对海量数据集运行复杂的分析查询。
总体而言,该视频概述了 BigQuery 的功能、架构和关键功能,强调了其对大规模数据分析和机器学习任务的适用性。它强调了使用 BigQuery 等完全托管且高度可扩展的基于云的解决方案有效处理大量数据的好处。