在当前的技术环境中,开发人员应具备许多不同的技能。许多人都这样做。
开发人员也可以使用许多不同的职业道路,这些职业道路略微改变了他们当前的技能。
数据库管理员,开发人员拥护者和机器学习工程师与所有开发人员都有一件事:他们都知道如何编码。不管使用哪种语言,它们都了解编写好的代码背后的核心概念。
这就是许多软件开发人员考虑成为机器学习工程师的原因之一。使用所有可用的工具和软件包,您无需具有深入的数学背景即可获得准确的结果。
如果您愿意学习如何使用某些库并对基础数学有一个高级的了解,那么您可以成为一名机器学习工程师。
在本文中,我将向您介绍机器学习中的一些主要概念,这些概念需要您从软件开发人员的背景中了解。
我们将以一个完整的机器学习项目为例,从获取数据到使用模型预测值。最后,您应该具有足够的知识,可以从头开始完成自己的小型机器学习项目。
什么是机器学习?
那里有很多定义。但是机器学习基本上涉及使用数学来查找大量数据中的模式,以便根据新数据进行预测。
一旦找到了这些模式,就可以说您拥有机器学习模型。
从那里,您可以使用模型对模型从未见过的新数据进行预测。
目标是使计算机使用所提供的算法根据经验自动改进。
算法只是一个数学方程式或一组方程式,它们根据输入数据为您提供结果。机器学习使用算法来找到我们正在寻找的模式。
随着算法暴露给越来越多的数据,它们开始做出更准确的预测。最终,由算法构建的模型将能够找出正确的结果,而无需对其进行显式编程。
这意味着计算机应该能够在没有任何人工帮助的情况下接收数据并做出决策(预测)。
机器学习与数据科学与人工智能
许多人互换使用机器学习,数据科学和人工智能这两个术语。但是它们不是同一回事。
机器学习是用在科学数据作出预测,并在您的数据发现规律。
数据科学更多地侧重于统计和算法以及结果的解释。机器学习更多地集中在事物的软件和自动化上。
人工智能是指计算机理解和学习数据的能力,同时基于人类几乎不可能发现的隐藏模式做出决策。
机器学习就像人工智能的一个分支。我们将使用机器学习来实现人工智能。
人工智能是一个广泛的话题,它涵盖了诸如计算机视觉,人机交互以及自主性之类的东西,其中在每个应用程序中都将使用机器学习。
不同类型的机器学习
您将听到和阅读三种机器学习类型:监督学习,半监督学习和无监督学习。
监督学习
这是大多数机器学习问题都属于的类别。这是当您具有输入和输出变量,并且试图在它们之间进行映射时。
之所以称为监督学习,是因为我们可以使用数据来教给模型正确的答案。
该算法将根据数据进行预测,并将慢慢进行校正,直到这些预测与期望的输出匹配为止。
监督学习的大部分问题都可以通过分类或回归来解决。只要标记了数据,就可以在有监督的机器学习中进行工作。
半监督学习
由于我们的数据集,大多数现实世界中的问题都属于这一领域。
在许多情况下,您将拥有一个较大的数据集,其中一些数据被标记了,但大多数却没有。有时让专家审阅并标记所有这些数据可能会太昂贵,因此您需要混合使用监督学习和无监督学习。
一种策略是使用标记的数据对未标记的数据进行猜测,然后将这些预测用作标记。然后,您可以在某种监督学习模型中使用所有数据。
由于也可以在这些数据集上进行无监督学习,因此请考虑这是否是一种更有效的方法。
无监督学习
当您只有输入数据而没有关联的输出数据,并且想要模型来创建所需的模式时,那就是您进入无监督学习。
您的算法将根据您提供的参数来做出有意义的事情。
当您有很多看似随机的数据并且想要查看其中是否有任何有趣的模式时,这很有用。这些问题通常对于聚类算法非常有用,并且会给您带来一些意想不到的结果。
开发人员对机器学习的实际使用
分类
当您要为一些输入数据预测标签时,这是一个分类问题。
机器学习通过建立一个模型来处理分类,该模型采用已经被标记的数据,并使用它对新数据进行预测。基本上,您给它一个新的输入,并给它提供它认为正确的标签。
预测客户流失,面部分类和医疗诊断测试均使用不同种类的分类。
尽管所有这些都属于不同的分类领域,但它们都基于其模型用于训练的数据分配值。所有的预测值都是准确的。因此,您将预测诸如名称或布尔值之类的值。
回归
回归很有趣,因为它跨越了机器学习和统计数据。它与分类相似,因为它用于预测值,但它可以预测连续值而不是离散值。
因此,如果您想根据多年的经验和已知的语言来预测薪水范围,或者想根据位置和平方英尺来预测房价,那么您将要处理回归问题。
有不同的回归技术可以处理各种数据集,甚至非线性数据。
有支持向量回归,简单线性回归,并在许多其他多项式回归。有足够的回归技术可以适应您拥有的几乎所有数据集。
聚类
这进入了另一种类型的机器学习。群集处理无人监督的学习任务。就像分类,但是没有数据被标记。查找和标记数据点取决于算法。
当您拥有庞大的数据集并且不知道它们之间的任何模式,或者正在寻找不常见的连接时,这非常好。
当您要查找数据中的异常和异常值而无需花费数百小时手动标记数据点时,聚类会提供帮助。
在这种情况下,通常没有最佳算法,而找到适合您的数据的最佳方法是测试不同的算法。
一些聚类算法包括:K均值,DBSCAN,聚类聚类和亲和传播。一些反复试验将帮助您快速找到最适合您的算法。
深度学习
这是机器学习领域,它使用受大脑工作方式启发的算法。它涉及使用大型未分类数据集的神经网络。
通常,性能会随着您向深度学习算法提供的数据量而提高。这些类型的问题涉及未标记的数据,这些数据涵盖了大多数可用数据。
此技术可以使用许多算法,例如卷积神经网络,长期短期记忆网络或深度Q网络。
这些中的每一个都用于诸如计算机视觉,自动驾驶汽车或分析EEG信号之类的项目中。
您可能使用的工具
对于您遇到的任何机器学习问题,都有许多可用的工具。
以下是在许多机器学习应用程序中可以找到的一些常见软件包的简短列表。
Pandas:这是Python中的常规数据分析工具。当您需要使用原始数据时,它会有所帮助。它处理文本数据,表格数据,时间序列数据等。
在许多情况下,该软件包用于在训练机器学习模型之前格式化数据。
Tensorflow:您可以使用此库构建任何数量的机器学习应用程序。您可以在GPU上运行它,将其用于解决IoT问题,这对于深度学习非常有用。
这是可以处理几乎所有内容的库,但是要花一些时间来加快速度。
SciKit:在可用于机器学习应用程序的范围内,这类似于TensorFlow。最大的区别是此程序包的简单性。
如果您熟悉NumPy,matplotlib和SciPy,那么开始使用它会没有问题。您可以创建模型来处理车辆传感器数据,物流数据,银行数据和其他上下文。
Keras:当您想进行深度学习项目(例如复杂的机器人项目)时,这是一个特定的库,将为您提供帮助。
它基于TensorFlow构建,使人们可以轻松创建深度学习模型并将其交付生产。ÿ
您会看到它在自然语言处理应用程序和计算机视觉应用程序中使用了很多。
NLTK:自然语言处理是机器学习的一个巨大领域,本软件包着重于此。
这是您可以用来简化NLP项目的软件包之一。它仍在积极开发中,并且周围有一个良好的社区。
BERT:BERT是于2018年在Google创建的一个开源库。这是NLP的一项新技术,与其他任何技术相比,它采用完全不同的方法来训练模型。乙
ERT是来自变压器的双向编码器表示的首字母缩写。这意味着与大多数从左到右或从右到左分析句子的技术不同,BERT使用Transformer编码器向两个方向移动。其目标是生成语言模型。
Brain.js:这是更好的JavaScript机器学习库之一。您可以将模型转换为JSON或直接在浏览器中将其用作功能,并且仍然可以灵活地处理大多数常见的机器学习项目。
它入门非常快,并且提供了一些出色的文档和教程。
完整的机器学习示例
如此一来,您便了解了机器学习项目的外观,下面是整个过程的示例。
获取数据
可以说,机器学习项目中最难的部分是获取数据。您可以使用许多在线资源来获取用于机器学习的数据集,以下是其中的一些列表。
- 重症监护数据集
- 人的身高和体重
- 信用卡诈骗
- IMDB评论
- Twitter的航空人气
- 乐曲数据集
- 葡萄酒质量数据集
- 波士顿住房数据集
- MNIST手写数字
- 笑话等级
- 亚马逊评论
- 短信垃圾邮件收集
- 安然电子邮件
- 推荐系统数据集
- COVID数据集
在此示例中,我们将使用白葡萄酒质量数据集并尝试预测葡萄酒的密度。
在大多数情况下,数据在收到时并不是那么干净,您必须使用它才能以所需的格式获取数据。
但是即使有了这样的数据,我们仍然必须进行一些清理。
选择功能
我们将挑选一些功能来预测葡萄酒的密度。我们将使用的功能包括:质量,pH,酒精,固定酸度和总二氧化硫。
这可能是可用功能的任意组合,我任意选择了这些功能。随意使用其他任何功能代替这些功能,或者随意使用所有这些功能!
选择算法
既然您已经知道要解决的问题以及必须使用的数据,就可以开始研究算法了。
由于我们试图基于多个功能预测连续值,因此这很可能是回归问题。如果我们试图预测一个离散值,例如葡萄酒的类型,那可能是分类问题。
这就是为什么在跳入机器学习工具之前必须了解数据的原因。
它可以帮助您缩小可为问题选择的算法的数量。多元回归算法是我们的起点。当您处理将影响最终结果的多个参数时,通常使用此方法。
多元回归算法类似于常规回归算法,但可以有多个输入。其背后的等式是:
y = theta_0 + sum(theta_n * X_n)
我们将theta_0
(偏差项)和theta_n
项都初始化为某个值,通常为1或0,除非您有其他信息可作为这些值的基础。
设置初始值后,我们尝试优化它们以适应问题。我们通过求解梯度下降方程来做到这一点:
theta_0 = theta_0 - alpha * (1 / m) * sum(y_n - y_i)
theta_n = theta_n - alpha * (1 / m) * sum(y_n - y_i) * X_n
其中,y_n
是根据算法计算得出的预测值,y_i
是我们从数据中获得的值或期望值。
我们希望预测值和实际值之间的误差范围尽可能小。这就是我们试图优化theta值的原因。这样我们就可以最小化用于预测输出值的成本函数。
这是成本函数方程式:
J(theta_n) = (1 / 2m) * sum(y_n - y_i)^2
这就是我们构建和训练模型所需的所有数学知识,因此让我们开始吧。
预处理数据
您要做的第一件事是查看并查看我们的数据。我已经对该葡萄酒质量数据集进行了一些修改,以便可以与我们的算法一起使用。
您可以在这里下载:https : //github.com/flippedcoder/probable-waddle/blob/master/wine-quality-data.csv。
我要做的就是获取原始文件,删除不需要的功能,将密度移动到最后,并清理格式。
现在我们可以进入真正的预处理部分!制作一个名为multivariate-wine.py的新文件。该文件应与数据集位于同一文件夹中。
我们在此文件中要做的第一件事是导入一些程序包,然后查看数据集的外观。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv('./wine-quality-data.csv', header=None)
print(df.head())
您应该在终端中看到类似这样的内容。
数据看起来很适合多元回归算法,因此我们可以开始构建模型。我鼓励您尝试从原始的白葡萄酒数据集开始,看看是否可以找到将其设置为正确格式的方法。
建立模型
我们需要为数据添加一个偏差项,因为正如您在算法说明中所看到的那样,我们需要它,因为它是theta_0
项。
df = pd.concat([pd.Series(1, index=df.index, name='00'), df], axis=1)
由于数据已经准备好,我们可以为算法定义独立变量和因变量。
X = df.drop(columns=5)
y = df.iloc[:, 6]
现在,通过将每一列除以该列中的最大值来标准化数据。
您实际上不必执行此步骤,但这将有助于加快算法的训练时间。它还有助于防止一个功能比其他功能更占优势。
for i in range(1, len(X.columns)):
X[i-1] = X[i-1]/np.max(X[i-1])
让我们看一下归一化以来的数据。
print(X.head())
您应该在终端中看到类似的内容。
现在数据已准备就绪,我们可以初始化theta参数。那只是意味着我们将要创建一个数组,数组的列数与输入变量X相同。
theta = np.array([1]*len(X.columns))
如果您在终端中打印它,则它应该看起来像这样,尽管如果您不想打印,则不需要打印。
[1 1 1 1 1 1]
然后,我们将设置将从数据中获取的训练点数。我们将留下500个数据点,以便我们稍后将其用于测试。这将是我们之前讨论的梯度下降方程式中m的值。
m = len(df) - 500
现在,我们开始编写构建模型后需要训练的功能。我们将从假设函数开始,该函数只是输入变量乘以theta_n
参数。
def hypothesis(theta, X):
return theta * X
接下来,我们将定义成本模型,该模型将为我们提供实际值和预测值之间的误差范围。
def calculateCost(X, y, theta):
y1 = hypothesis(theta, X)
y1 = np.sum(y1, axis=1)
return (1 / 2 * m) * sum(np.sqrt((y1 - y) ** 2))
准备好运行模型之前,我们需要的最后一个函数是计算梯度下降值的函数。
def gradientDescent(X, y, theta, alpha, i):
J = [] # cost function for each iteration
k = 0
while k < i:
y1 = hypothesis(theta, X)
y1 = np.sum(y1, axis=1)
for c in range(1, len(X.columns)):
theta[c] = theta[c] - alpha * (1 / m) * (sum((y1 - y) * X.iloc[:, c]))
j = calculateCost(X, y, theta)
J.append(j)
k += 1
return J, j, theta
有了这三个功能并清理了我们的数据,我们终于可以训练模型了。
训练模型
培训部分是有趣的部分,也是最简单的部分。如果您正确设置了算法,那么您所要做的就是采用它为您提供的优化参数并做出预测。
我们将返回每次迭代的成本,最终成本以及梯度下降函数的优化theta值的列表。因此,我们将获得优化的theta值并将其用于测试。
J, j, theta = gradientDescent(X, y, theta, 0.1, 10000)
完成正确设置功能和数据的所有工作后,此单行代码训练了模型,并为我们提供了开始预测值和测试模型准确性所需的theta值。
测试模型
现在,我们可以通过使用数据进行预测来测试模型。
y_hat = hypothesis(theta, X)
y_hat = np.sum(y_hat, axis=1)
在检查了几个值之后,您将知道模型是否足够准确,或者是否需要对theta值进行更多调整。
如果您对测试结果感到满意,则可以继续并在项目中开始使用此模型。
使用模型
优化的theta值实际上是开始使用模型所需的全部。即使在生产中,您也将继续使用相同的方程式,但是theta值最佳,可以为您提供最准确的预测。
您甚至可以继续训练模型,并尝试找到更好的theta值。
最后的想法
机器学习有很多层次,但是它们都不是太复杂。它们只是开始堆积,这似乎比实际困难得多。
如果您愿意花一些时间阅读有关机器学习库和工具的信息,那么上手起来确实很容易。您无需了解任何高级数学和统计信息即可学习这些概念甚至解决实际问题。
这些工具比以前更先进,因此您可以成为一名机器学习工程师,而无需了解其背后的大部分数学知识。
您需要了解的主要内容是如何处理数据。这是没人喜欢谈论的部分。这些算法既有趣又令人兴奋,但是有时甚至需要编写SQL过程来获取所需的原始数据,然后再开始处理它。
机器学习的应用领域非常广泛,从视频游戏到医学再到制造自动化。
如果您对机器学习感兴趣,只需花一些时间并制作一个小模型。随着您开始变得更加舒适,请添加该模型并继续学习