机器学习(一):5分钟理解机器学习并上手实践 (2)

我们从宏观角度看了机器学习的产业结构、工业化流程,你应该对你自己在机器学习的这些环节中有哪些发挥有了一定的把握。现在我们把视角拉回到微观层面,看看机器是如何学习的。

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

而在对机器学习来说,我们有大量的数据,却需要找出关系。机器学习的过程就是不断求导,以此来找出数学模型,来解释规律的过程。

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

如图所示,我们有摄氏度数据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库绘制图像。

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

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)方法来进行预测,以此来检验我们的模型准确度。我们通过下方图像中黄色的点可以看出,我们的模型非常准确。

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

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

顺带一提的深度学习代码

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

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)数量的增加,损失函数的结果逐渐降低。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjdxx.html