如今市面上的机器学习教程大多先学习数学基础,而后学机器学习的数学算法,再创建机器学习的数学模型,再学习深度学习,再学习工程化,再考虑落地。这其中每一个环节都在快速发展,惟独落地特别困难。咱们花费大量时间成本去学习以上内容,成本无疑是特别昂贵的。因此咱们不如先“盲人摸象”、“不求甚解”地探索下机器学习,浅尝辄止。若是想到本身的应用场景,再学以至用,深刻探索。这无疑是使沉没成本最低的决策。
本教程适合兴趣普遍的人士增长本身知识的广度,从应用的角度谨“使用”机器学习这款工具,是典型的黑盒思惟。这很是契合笔者的思惟方式,固然也是我我的的格局局限。
本教程会浅显易懂,让你走的很快。但若是你想走的更远还请学习数学。固然咱们也只是暂时放下数学,先构建本身的知识体系。程序员
先抬头看路,找准适合本身的方向,再埋头赶路,或深耕下去……算法
从手工到工业化再到人工智能,这是把人类从生产活动中逐渐解放的过程。用机器来帮助人们工做,一直是人类的美好愿望。让机器智能化,以此来代替人力作更智能问题,这能够做为人工智能的简单解释。
不少教程或者书籍把人工智能、机器学习、深度学习的关系解释为从属关系,人工智能 > 机器学习 > 深度学习。这种解释不错,但却没法表示他们之间的更深层次的关系。
机器学习是经过数学方法在数据中寻找解释,以此来实现人工智能的一种手段。而深度学习是参照神经系统在机器学习基础上发展出的一种高级技巧。 它们之间是存在必定的依托关系、进化趋势的。
狭义地讲,传统的机器学习是经过数学模型不断求导来找出数据规律的过程。这其中数学模型的选择尤其重要。随着GPU、TPU等算力的发展,算法技术的进步,甚至出现了自动选模型、自动调参的技术。咱们能够构建复杂的神经网络结构,只要有足够的算力支持,足够的时间咱们能够用深度学习处理很是复杂的任务。因此在代码操做上,深度学习甚至比传统的机器学习对程序员更友好、更易理解。咱们先学习传统机器学习而非直接学习深度学习的好处是,咱们能够经过对“黑盒”的拆箱来理解机器学习过程,掌握机器学习的概念,我会对其中应用的数学模型进行解释。编程
咱们先来看一下人工智能产业链的结构,以下图:数组
咱们能够看到,机器学习的三大基石---算力、算法与数据。机器学习的发展离不开算法数学的进步,一样离不开算力的发展。
在技术层面,机器学习在计算机视觉(CV, Computer Vision)和天然语言处理(NLP, Nature Language Processing)取得了关键的发展和应用。
算法分类上,机器学习分为监督学习、非监督学习、半监督学习、强化学习等。网络
所谓Garbage in, Garbage out(垃圾进,垃圾出)。数据是机器学习的重中之重。咱们须要花费大量的时间来处理数据,甚至占到整个机器学习任务的90%以上。
好比数据处理过程当中的数据采集,若是咱们采样的方式欠妥,就可能致使非表明性的数据集,这就致使了采样误差。
咱们的数据可能会有不少无效的数据,咱们须要剔除无效的数据,就叫作数据清洗。
咱们经过挖掘大量数据来发现不太明显的规律,就称做数据挖掘。架构
咱们以一款工业化流水线工具TFX为例,看一下机器学习的技术流程。app
流程分为数据输入、数据验证、特征工程、训练模型、验证模型、应用良好模型和提供模型六个部分:机器学习
我想经过以上解释,你们应该能够对机器学习的实践方法有了必定宏观的了解。函数
咱们从宏观角度看了机器学习的产业结构、工业化流程,你应该对你本身在机器学习的这些环节中有哪些发挥有了必定的把握。如今咱们把视角拉回到微观层面,看看机器是如何学习的。工具
咱们以摄氏度转换华氏度为例。
传统编程中,咱们要求得摄氏度和华氏度的关系,咱们必须找出公式:
$$ Fahrenheit = Celsius * 1.8 + 32 $$
而在对机器学习来讲,咱们有大量的数据,却须要找出关系。机器学习的过程就是不断求导,以此来找出数学模型,来解释规律的过程。
如图所示,咱们有摄氏度数据0, 8, 15, 22, 38以及华氏度数据32, 46.4, 59, 71.6, 100.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】与支持!