关于机器学习:机器学习一5分钟理解机器学习并上手实践

4次阅读

共计 4115 个字符,预计需要花费 11 分钟才能阅读完成。

引言

当初市面上的机器学习教程大多先学习数学根底,而后学机器学习的数学算法,再建设机器学习的数学模型,再学习深度学习,再学习工程化,再思考落地。这其中每个环节都在疾速倒退,唯独落地特地艰难。咱们破费大量工夫老本去学习以上内容,老本无疑是特地低廉的。所以咱们不如先“盲人摸象”、“不求甚解”地摸索下机器学习,浅尝辄止。如果想到本人的利用场景,再学以致用,深刻摸索。这无疑是使沉没老本最低的决策。
本教程适宜趣味宽泛的人士减少本人常识的广度,从利用的角度谨“应用”机器学习这款工具,是典型的黑盒思维。这十分符合笔者的思维形式,当然也是我集体的格局局限。
本教程会浅显易懂,让你走的很快。但如果你想走的更远还请学习数学。当然咱们也只是临时放下数学,先构建本人的常识体系。

先低头看路,找准适宜本人的方向,再埋头赶路,或深耕上来……

把视角拉高

从手工到工业化再到人工智能,这是把人类从生产流动中逐步解放的过程。用机器来帮忙人们工作,始终是人类的美好愿望。让机器智能化,以此来代替人力做更智能问题,这能够作为人工智能的简略解释。
很多教程或者书籍把人工智能、机器学习、深度学习的关系解释为从属关系,人工智能 > 机器学习 > 深度学习。这种解释不错,但却无奈示意他们之间的更深层次的关系。
机器学习是通过数学方法在数据中寻找解释,以此来实现人工智能的一种伎俩。而深度学习是参照神经系统在机器学习根底上倒退出的一种高级技巧。 它们之间是存在肯定的依靠关系、进化趋势的。
广义地讲,传统的机器学习是通过数学模型一直求导来找出数据法则的过程。这其中数学模型的抉择尤为重要。随着 GPU、TPU 等算力的倒退,算法技术的提高,甚至呈现了主动选模型、主动调参的技术。咱们能够构建简单的神经网络构造,只有有足够的算力反对,足够的工夫咱们能够用深度学习解决非常复杂的工作。所以在代码操作上,深度学习甚至比传统的机器学习对程序员更敌对、更易了解。咱们先学习传统机器学习而非间接学习深度学习的益处是,咱们能够通过对“黑盒”的拆箱来了解机器学习过程,把握机器学习的概念,我会对其中利用的数学模型进行解释。

咱们先来看一下人工智能产业链的构造,如下图:

咱们能够看到,机器学习的三大基石 — 算力、算法与数据。机器学习的倒退离不开算法数学的提高,同样离不开算力的倒退。
在技术层面,机器学习在计算机视觉(CV, Computer Vision)和自然语言解决(NLP, Nature Language Processing)获得了要害的倒退和利用。
算法分类上,机器学习分为监督学习、非监督学习、半监督学习、强化学习等。

  • 监督学习:数据样本有标签。
  • 非监督学习:数据样本无标签。
  • 半监督学习 :数据样本有局部(大量) 标签。
  • 强化学习:趋势后果则处分,偏离后果则惩办。

所谓 Garbage in, Garbage out(垃圾进,垃圾出)。数据是机器学习的重中之重。咱们须要破费大量的工夫来解决数据,甚至占到整个机器学习工作的 90% 以上。
比方数据处理过程中的数据采集,如果咱们采样的形式欠妥,就可能导致非代表性的数据集,这就导致了采样偏差。
咱们的数据可能会有很多有效的数据,咱们须要剔除有效的数据,就叫做数据荡涤。
咱们通过开掘大量数据来发现不太显著的法则,就称作数据挖掘。

机器学习工业化流程

咱们以一款工业化流水线工具 TFX 为例,看一下机器学习的技术流程。

流程分为数据输出、数据验证、特色工程、训练模型、验证模型、利用良好模型和提供模型六个局部:

  1. 输出数据,并依据须要拆分数据集。
  2. 生成训练数据和服务数据的特色统计信息。通过从训练数据中推断出类型、类别和范畴来创立架构。辨认训练数据和服务数据中的异样值。
  3. 对数据集执行特色工程。
  4. 训练模型,调整模型的超参数。
  5. 对训练后果进行深入分析,并帮忙验证导出的模型。查看模型是否的确能够从基础架构提供服务,并避免推送不良模型。
  6. 将模型部署到服务基础架构。

我想通过以上解释,大家应该能够对机器学习的实际办法有了肯定宏观的理解。

机器是如何学习的

咱们从宏观角度看了机器学习的产业结构、工业化流程,你应该对你本人在机器学习的这些环节中有哪些施展有了肯定的把握。当初咱们把视角拉回到宏观层面,看看机器是如何学习的。

咱们以摄氏度转换华氏度为例。
传统编程中,咱们要求得摄氏度和华氏度的关系,咱们必须找出公式:
$$ Fahrenheit = Celsius * 1.8 + 32 $$

而在对机器学习来说,咱们有大量的数据,却须要找出关系。机器学习的过程就是一直求导,以此来找出数学模型,来解释法则的过程。

如图所示,咱们有摄氏度数据 0, 8, 15, 22, 38 以及华氏度数据 32, 46.4, 59, 71.6, 100.4,机器学习的过程就是找出公式的过程。
其中,摄氏度就是咱们的 特色 ,华氏度就是咱们的 标签 ,摄氏度与华氏度的关系就是 实例

  • 特色:咱们模型的输出。在这种状况下,只有一个值 - 摄氏度。
  • 标签:咱们的模型预测的输入。在这种状况下,只有一个值 - 华氏度。
  • 实例:训练期间应用的一对输出 / 输入。在咱们的例子中,是摄氏度 / 华氏度一对数据,例如,(0, 32), (8, 46.4)。

蓝色的局部示意咱们设置好数学函数,而后通过一直的调整权重与偏差一直地 拟合 数据,最终失去能够示意法则的 模型 的过程。

  • 拟合:通过训练数据,使模型来概括示意数据的过程。
  • 模型:图构造,蕴含了训练过程中的权重与偏差的数据。其中的图为由各函数组成的计算构造。

简略上手机器学习代码

在上手代码之前我默认你曾经配置好了环境,把握了 Jupyter, Numpy, Pandas, Matplotlib 的用法。如果你没有把握以上技能,请参考我写的配套教程前置机器学习系列

import numpy as np
import matplotlib.pyplot as plt
celsius    = [[-40], [-10], [0], [8], [15], [22], [38]]
fahrenheit = [[-40], [14], [32], [46.4], [59], [71.6], [100.4]]
plt.scatter(celsius,fahrenheit, c='red', label='real')
plt.xlabel('celsius')
plt.ylabel('fahrenheit')
plt.legend()
plt.grid(True)
plt.title('real data')
plt.show()

如上代码所示,咱们筹备摄氏度与华氏度的数据,而后通过 matplotlib 库绘制图像。

from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(celsius,fahrenheit)

咱们通过上方仅仅 3 行代码就训练了数据。LinearRegression是 scikit-learn 包下的线性回归办法,是一般的最小二乘线性回归。而 fit 就是拟合的意思,以此来训练模型。

celsius_test = [[-50],[-30],[10],[20],[50],[70]]
fahrenheit_test = lr.predict(celsius_test)
plt.scatter(celsius,fahrenheit, c='red', label='real')
plt.scatter(celsius_test,fahrenheit_test, c='orange', label='predicted')
plt.xlabel('celsius')
plt.ylabel('fahrenheit')
plt.legend()
plt.grid(True)
plt.title('estimated vs real data')
plt.show()

接下来咱们调用 lr.predict(celsius_test) 办法来进行预测,以此来测验咱们的模型准确度。咱们通过下方图像中黄色的点能够看出,咱们的模型十分精确。

你就说这玩意简略不简略! 咳咳,别嚣张,咱们好好玩。

顺带一提的深度学习代码

既然都上手了,咱们也试一试深度学习代码:

import tensorflow as tf
import numpy as np

# prepare data
celsius_q    = np.array([-40, -10,  0,  8, 15, 22,  38],  dtype=float)
fahrenheit_a = np.array([-40,  14, 32, 46.4, 59, 71.6, 100.4],  dtype=float)

# fit model
model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])])
model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(0.1))
history = model.fit(celsius_q, fahrenheit_a, epochs=500, verbose=False)
print("Finished training the model")

# print loss
import matplotlib.pyplot as plt
plt.xlabel('Epoch Number')
plt.ylabel("Loss Magnitude")
plt.plot(history.history['loss'])

咱们应用 TensorFlow 内置的 Keras 办法创立了 1 层的神经网络,抉择了 MSE 损失函数以及 Adam 优化器,训练了 500 代。

如下图能够看到,随着代 (epoch) 数量的减少,损失函数的后果逐步升高。

那么什么是损失函数呢?咱们在接下来的文章中一探到底。感谢您的关注公众号【caiyongji】与反对!

前置学习系列

  • 前置机器学习(五):30 分钟把握罕用 Matplotlib 用法
  • 前置机器学习(四):一文把握 Pandas 用法
  • 前置机器学习(三):30 分钟把握罕用 NumPy 用法
  • 前置机器学习(二):30 分钟把握罕用 Jupyter Notebook 用法
  • 前置机器学习(一):数学符号及希腊字母
正文完
 0