在人工智能和机器学习的神奇世界中,创建模型并预测输出。本文将介绍如何构建一个简单的线性回归模型。如果是数据科学、人工智能或机器学习领域的新手,并且想了解机器学习模型是什么,或者想要使用在高中和大学学过的数学方程构建一个简单的机器学习模型,那么本文正适合。
在统计学中,回归分析是一种衡量一个变量与其他变量之间关系的方法。例如,时间和成本之间的关系。用更通俗的话说,回归分析是尝试确定一个因变量与一系列其他自变量之间的关系。
在机器学习中,自变量有不同的称呼,比如特征列或输入列。因变量也有不同的称呼,比如标签列或输出列。
线性回归是一种机器学习算法,用它来发现特征列和目标列之间的关系。总是寻找线性关系,即是否可以在特征和目标列之间画一条直线,如果可以,决定构建一个线性模型。
线性方程由下式给出:Y = mX + b + e,其中b是截距,m是线的斜率,e是误差项。该方程用于根据给定的预测变量预测目标变量的值。
根据数据集中特征列的数量,可以构建两种类型的线性回归模型:简单线性回归和多元线性回归。
如果数据集只包含1个特征和1个目标列,那么这就是简单线性回归。简单线性回归的方程是:Y = mX + b,其中Y是目标或输出,X是特征列,m和b是模型系数。
如果数据集包含多个特征列和1个目标列,那么这就是多元线性回归。多元线性回归的方程是:Y = m1X1 + m2X2 + ... + mnXn + b。
现在,让以一个简单的机器学习数据集为例。假设有一个酒店的数据集,描述了不同成本下每种食品的销售情况。这些数字是随机选取的,用于构建线性回归模型,其中价格成本的数额并不代表当前市场价格。
在给定的数据集中,需要进行探索性数据分析,比如检查缺失值、处理偏斜、替换特殊符号等。如果数据集不是正态分布的,可能需要对数据集进行标准化和归一化,以提高模型的准确性和得分。
data.drop(['Index'], axis=1, inplace=True)
在给定的酒店数据集中,索引列不涉及任何决策制定,模型无法从中学习任何模式。因此,使用上述代码删除这一列。
data.shape
使用上述代码可以检查数据集的形状,即列数和行数。在给定的数据集中,有200行和4列(因为删除了一列)。
data.info()
使用dataframe的info方法可以获取整个数据集的信息,包括列名、数据类型和非空值。
data.isna().sum()
在上述数据集中,没有空值或缺失值,因此可以继续应用简单线性回归。
为了构建简单的线性回归模型,还需要检查特征与标签列之间的线性关系。可以使用散点图来实现这一点。
fig, axs = plt.subplots(1, 3, sharey=True)
data.plot(kind='scatter', x='French Fries', y='sales', ax=axs[0], figsize=(16, 8))
data.plot(kind='scatter', x='Gobi Manchurian', y='sales', ax=axs[1])
data.plot(kind='scatter', x='Maggi', y='sales', ax=axs[2])
从图表中可以看出,French Fries和Gobi Manchurian与销售之间似乎存在线性关系。
feature_cols = ['French Fries', 'Gobi Manchurian', 'Maggi']
X = data[feature_cols]
Y = data.sales
需要将特征列和标签列分离为X和Y变量,以便进行模型预测。
from sklearn.linear_model import LinearRegression
slr = LinearRegression()
slr.fit(X, Y)
从Scikit Learn库导入线性回归,实例化线性回归,并直接在特征和目标列上应用model.fit。
print('c value is: ', slr.intercept_)
print('m1, m2 and m3 values are: ', slr.coef_)