不要害怕为简单任务使用机器学习

原文:towardsdatascience.com/dont-be-afraid-to-use-machine-learning-for-simple-tasks-8488fc175253

管理者的机器学习课程

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/58ba81d6844a93e158c29642b924b9fa.png

照片由Rocco DipoppaUnsplash提供

嗨,欢迎来到一个新的系列,在这里我将分享大多数企业在机器学习中常见的错误。我的目标是提供简单但原创的课程,这些课程基于那些已经存在多年且似乎永远不会消失的误解。

这是第 1 个课程。

哦,别忘了查看我的其他机器学习课程!👇

管理者和工程师的机器学习课程


许多专业人士认为机器学习是一种高级技术,当其他方法失败时才部署。 在他们心中,这是一件复杂到无法用传统方法解决的问题的复杂工具。

因此,当我与企业交谈时,我经常听到这样的评论:“我们不需要为那个使用机器学习”或“在机器学习成为事物之前,我们几年前就解决了那个问题”。

有时,这些评论是有效的,使得机器学习成为错误的技术。然而,更常见的是,它们源于一种错误的信念,即他们的传统方法是一个简单直接的替代方案,这种误解导致企业坚持并维护过时的解决方案。

实际上,机器学习是创建简单问题稳健且易于维护解决方案的绝佳工具。 你通常可以用一行代码替换数千行代码,执行任务更准确、更可靠。我曾与几家公司在用机器学习算法替换他们的手动规则后,惊讶于他们的解决方案变得多么简单。

让我们一起探讨这个话题,并学习一些你可以通过真实案例应用到工作中的宝贵课程。


简单任务的示例

我们公司开发的是深度学习算法,用于检测视觉数据中的损坏和关键组件。目前,我们主要关注铁路行业,因此,我的许多例子都是围绕来自铁路行业的计算机视觉数据展开的。

然而,这些例子直接适用于其他数据集、行业和用例。 对于机器学习工程师来说,只要数据类型保持相似并且你能接触到有领域专业知识的人,切换到另一个用例或行业几乎没有区别。

在轨道图像中检测轨头

我想通过展示一个例子来解释这个课程,在这个例子中,我使用机器学习而不是传统的计算机视觉,在一小时内创建了一个可靠的解决方案。让我们先看看这些从不同日期的测量列车上拍摄的三个 2D 铁路枕木图像。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5580d039cf9f5d5f3a6f26a7bdc2e0c7.png

作者收集的图像

每张图像中的睡眠者都是相同的,我们希望开发一种指纹算法,为每个睡眠者创建一个 ID,以便随着时间的推移跟踪它。然而,为了使这项任务更容易管理,我首先想对图像进行对齐,以确保轨道每次都在相同的位置。

传统方法

检测和对齐轨道是一个简单的任务,大多数人会尝试使用传统方法来解决。这些方法涉及利用 y 轴上像素值的变异性或边缘检测的规则。规则容易定义,你可以快速制作出大多数情况下都能工作的东西。

**问题开始于你必须更新你的规则来处理失败的例子。**随着你添加新的巧妙方法来检测轨道,你的代码复杂性增加,你开始花费大量时间处理边缘情况。

如果你有很多质量各异的数据,这些边缘情况会迅速累积起来,如果发生这种情况,手动创建规则可能会变成一个无底洞。你制定的规则越多,它们就越难维护和更改。

使用机器学习的一个简单解决方案

为了用机器学习解决问题,我使用 PyTorch 创建了一个具有 80,000 个参数的小型 CNN。该算法接受一个图像作为输入,并为每一列返回一个概率,告诉我它是否是轨道的中心。

我取了原始图像,提取了两个足够大的区域,以确定它们包含轨道,将每个区域下采样到 128×64 像素,并标记了轨道的中心。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/57573c1b9ec1c6ef7014f9fd5ef49412.png

作者收集的图像

**为了创建一个几乎完美的解决方案,我只需要标注 20 张图像,这花了我 5 分钟。**我还制作了一个包含 50 张图像的验证集,以确保我的算法可以处理以前未见过的数据。在商业界,人们普遍认为在训练机器学习算法之前需要大量数据,这是一种最常见的误解。

由于我的算法很小,我不需要 GPU,可以直接在我的 Macbook 上训练算法。训练大约需要 10 分钟,我的电脑风扇几乎不响。

**整个解决方案只花了我一个小时来创建。**它几乎完美无缺,只是中心偏离了 2-3 像素,这对于我的预期用途来说已经足够好了。以下是我验证数据中的一些示例,其中红色线是真实情况,蓝色线是我算法的输出。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/247e467d65330acaeae90778bb9514d8.png

作者收集的图片

改进解决方案

我可以用传统方法在类似的时间内解决这个问题,但我的机器学习解决方案最好的部分是它很容易改进。

我要得到更好的解决方案,只需创建更多的训练数据。这太棒了,因为只需 5 分钟的标注就能得到一个可行的解决方案。如果我添加算法难以处理的示例,只需再增加 10 个数据点,我就能得到显著的改进。


应吸取的教训

主要的教训是将机器学习视为一种多才多艺的技术,你可以用它来解决简单和复杂的问题。训练和部署算法(如果不是更容易的话)与其他方法一样简单。以下是一些每个人都应该理解的关键要点。

简单问题的机器学习解决方案是…

开发速度快

一位熟练的机器学习工程师应该能够在一天之内解决一个简单问题。你只需标记几个数据点,构建一个小型神经网络(或其他算法),并专注于以有助于算法学习正确内容的方式表达任务。

更能应对边缘情况

当你训练一个机器学习算法时,你不断地对数据进行微调,比如改变亮度。这被称为数据增强,如果我们能很好地利用它,算法就可以学会处理几乎任何边缘情况。

更容易维护

许多传统方法很快就会变得复杂。维护一个简单的机器学习解决方案只需涉及标记当前算法难以处理的新的示例。如果你保持训练和测试数据的一致性,并且性能有所提高,你就可以部署新的算法,无需担心错误或性能下降。

代码复杂性更低

简单的机器学习解决方案可以用一行代码取代数千行代码。我们将复杂性移到算法内部,并信任我们的测试数据。消除复杂的规则通常是机器学习新手的意外好处。


摘要和结论

我认为机器学习不是一把锤子,每个问题不是一颗钉子,但对我来说,很明显,很少有人理解这个技术可以和应该被多么频繁地使用。对我来说,它是软件开发中我经常使用的工具。

而不是问自己是否可以用“没有机器学习”的方法解决问题,你应该将其作为与其他任何方法相同的替代方案来考虑。

对于许多简单问题,机器学习不需要任何高级硬件,你通常可以在比传统方法更短的时间内开发出更好、更可靠的解决方案。


感谢您阅读这个故事。如果您想了解更多机器学习课程,请订阅我的通讯!😄

管理者的机器学习课程 | 奥斯卡·李奥 | Substack

### 机器学习入门指南 机器学习是一种让计算机通过学习数据来对未知数据进行预测的技术。它广泛应用于图像识别、语音识别、自然语言处理、推荐系统等领域。对于初学者来说,从零开始学习机器学习可能需要一定的时间和精力,但只要掌握正确的方法和步骤,就一定能够取得成功[^3]。 #### 1. 学习基础知识 机器学习涉及三个主要方向:监督学习、无监督学习和强化学习。在开始学习之前,需要掌握一些基础概念,例如数据预处理、模型训练与评估等。scikit-learn提供了丰富的工具和方法,可以方便地进行机器学习任务。可以通过相关教程了解这些工具的具体使用方法[^5]。 #### 2. 选择合适的编程语言 虽然Python在机器学习领域占据主导地位,但Java凭借其稳定性、跨平台性和丰富的生态系统,依然是许多企业级应用的首选语言。Java拥有丰富的机器学习库和框架,如 Weka、Deeplearning4j、Apache Spark 等。这些库和框架可以帮助开发者快速实现机器学习模型[^4]。 #### 3. 实践项目 机器学习是一个需要持续学习和实践的过程。在学习过程中,可能会遇到各种困难和挑战,但这些都是成长和进步的阶梯。不要害怕失败,要勇于尝试和探索,通过不断地实践和总结,逐渐掌握机器学习的精髓,并在实际应用中取得优异的成绩[^2]。 以下是一些适合初学者的实践项目: - **手写数字识别**:使用MNIST数据集,训练一个分类模型来识别手写数字。 - **房价预测**:使用线性回归模型,根据房屋特征预测房价。 - **情感分析**:使用文本数据,训练一个分类模型来判断文本的情感倾向。 #### 4. 持续学习 在未来的学习过程中,希望不断探索和实践,掌握更多的机器学习知识和技能,为解决实际问题贡献力量。可以通过在线课程、书籍、社区论坛等途径,持续学习最新的机器学习技术和方法[^1]。 ### 示例代码 以下是一个简单的线性回归示例,使用Python的scikit-learn库进行房价预测: ```python import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error # 生成示例数据 X = np.random.rand(100, 1) * 100 y = 2 * X.squeeze() + 3 + np.random.randn(100) * 10 # 分割训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建线性回归模型 model = LinearRegression() # 训练模型 model.fit(X_train, y_train) # 预测测试集 y_pred = model.predict(X_test) # 评估模型 mse = mean_squared_error(y_test, y_pred) print(f"Mean Squared Error: {mse}") ``` 通过这段代码,可以了解如何使用scikit-learn进行数据分割、模型训练和评估。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值