开发机器学习模型
介绍
直到几十年前,回溯数据主要用于两个目的:
知道发生了什么事。
找出事情发生的根本原因。
虽然上述因素很重要,但在过去十年左右的时间里,我们已经进入了一个新时代,数据被用来预测未来可能发生的事情。这就是机器学习发挥重要作用的地方。预测未来问题的关键因素之一是开发机器学习模型。机器学习模型是将数据与机器学习算法相结合后得到的。已经开发了许多机器学习算法来解决各种业务问题。
数据分析
数据本身对我们几乎没有任何价值,除非分析师对其进行分析以获取有意义的信息并帮助我们从数据中获得见解。让我们看看在使用数据构建机器学习模型之前需要解决的一些挑战。
缺失数据
缩放不当
功能太多
隐藏功能
数据不平衡
数据不足
仅举几例。每个主题都是一个独立的主题,详细介绍它们超出了本指南的范围。
机器学习算法
大体上的数据可以分为两类:
标记数据
未标记的数据
根据数据类型,机器学习算法分为两大类。
监督学习
无监督学习
监督学习主要用于解决两类问题。
- 连续数据
在机器学习语言中,这种类型的问题称为回归问题。例如,过去 30 年内特定区域的房价。用于解决回归问题的一些常见算法是线性回归和多项式回归。
- 分类数据
具有分类数据的案例被视为分类问题。一个典型的例子是分类产品是否已过期。解决分类问题的一些常用算法是逻辑回归和最近邻算法。
无监督学习主要用于处理聚类数据。例如,根据部门对零售店中的产品进行分组。在这种情况下,数据没有标签。K-means 是常用的聚类算法之一。
建立监督机器学习模型有三个阶段。
训练阶段
测试阶段
预测阶段
所有可用数据分为两类。在训练阶段,我们使用 75% 的数据来训练模型。剩余 25% 的数据用于测试阶段,以验证所构建模型的准确性。在预测阶段,模型部署到生产中,我们使用实际的实时数据来预测结果。
在本指南中,我们将使用名为scikit-learn的 Python 开源库和样本数据,使用线性回归算法开发我们的模型。
演示
读取数据
让我们通过分析数据来开始一个演示,数据显示青少年的体重如何因其玩电子游戏的时间长短而变化。
我将导入 pandas 库,读取 csv 数据并打印。为简单起见,我们假设数据已经标准化,并且没有缺失元素。换句话说,数据可以在我们的模型开发过程中按原样使用。
import pandas as pd
df = pd.read_csv('grades.csv')
print(df)
这应该打印出我们模型的来源数据。
Play_Hours Weight
1 145
2 157
3 166
4 173
5 176
6 179
7 181
8 190
9 196
10 200
从数据来看,很明显这是连续数据,最好用回归算法来建模。我们将在本演示中使用线性回归算法。
拟合数据
让我们导入 scikit 包并创建线性回归对象:
import sklearn.linear_model as sk
lr = sk.LinearRegression()
我们将导入一个 numpy 包,使用它的 newaxis 对象,并将 x 轴转换为二维数组,以便我们可以将 x 和 y 轴值传递给线性回归并执行拟合操作。拟合操作将数据应用于线性回归算法并生成最适合数据的机器学习模型。
import numpy as np
x = df.Play_Hours[:, np.newaxis]
y = df.Weight.values
lr.fit(x,y)
让我们打印出intercept_和coef_的值。线性方程的形式为Y = mX + c,其中m是直线的斜率,c是截距。斜率和截距定义了两个变量之间存在的关系。一旦我们确定了这两个值,我们就可以用它来预测任何未来的值。假设我们想知道一个每天玩15个小时电子游戏的青少年的体重;我们可以用这个模型来预测他的体重。在这种情况下,玩游戏的时间(X)是一个独立变量,而青少年的体重(Y)是因变量。
print("Intercept - c:", lr.intercept_)
print("Coeff - m:", lr.coef_)
您应该看到类似于下面的输出,其中列出了截距和系数值。截距是当独立变量值为 0 或 X = 0 时图形中的点时的值,而系数是直线的斜率。
Intercept -c: 145.8
Coeff -m: [5.54545455]
预测数据
让我们绘制此图并直观地查看结果。导入 matplotlib 包,如下所示。现在我们有了一个基本模型,让我们看看如何使用该模型来预测测试数据。我们使用预测对象来预测测试值,如下所示。
import matplotlib.pyplot as plt
predict = lr.predict([[6]])
plt.scatter(x, y, color='black')
plt.plot(x, lr.predict(x), color='blue', linewidth=3)
现在我们已经预测出了值,让我们看看这个预测有多好。我们将使用三个不同的指标来评估这个预测的性能。
平均绝对误差
均方根误差 (RMSE)
R 平方误差
平均绝对误差
对于给定的 X 值,如果 Y 是预测值而 Y' 是实际值,则平均绝对误差 (MSE) 计算为预测值和实际值之间的绝对差异之和除以实体总数。
在这种情况下,取绝对误差非常重要。如果不这样做,正误差将抵消负误差,结果将是错误的。让我们使用 sklearn 计算 MSE。
from sklearn.metrics import mean_absolute_error
df['predict'] = lr.predict(x)
print(mean_absolute_error(df.Weight, df.predict))
2.290909090909088
均方根误差 (RMSE)
RMSE 是平方误差均值的平方根。RMSE 值越低,表示模型性能越好,因为 RMSE 表明预测值和实际值的接近程度。
from sklearn.metrics import mean_absolute_error
print(np.sqrt(mean_squared_error(df.Weight, df.predict)))
3.147293209323613
R 平方误差
此误差表示模型与训练数据的拟合程度。其值介于 0 和 1 之间。越接近 1 的值表示模型越准确。
from sklearn.metrics import r2_score
print(r2_score(df.Weight, df.predict))
0.9624238285897556
结论
本指南的目的是展示如何开发一个简单的机器学习模型。我们假设一个非常简单且定义良好的数据结构。在实际情况中,数据量非常大,我们可能需要花费大量时间准备用于机器学习算法的数据。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~