使用Python中的线性回归进行机器学习实例
如果你想成为一名数据科学家,回归是你需要学习的第一个算法。很多咨询公司仍在大规模的使用回归技术来帮助他们的客户。毫无疑问,这是最容易学习的算法之一,但它需要持续的努力才能达到精通的水平。
简介
假定你有一个商店,商店的销售将依赖于一些因素。对于每个因素,创建一个假设,说明该因素如何影响各种产品的销售。例如 - 我希望产品的销售取决于商店的位置。同样列出您可以想到的所有可能因素:您的商店的位置,产品的可用性,商店的大小,产品的优惠,产品的广告,商店的位置等都可能是您的销售所依赖的特征。
线性回归是用于预测建模的最简单和最广泛使用的统计技术。它基本上给了我们一个方程式,我们将我们的特征作为自变量,我们的目标变量[在我们的例子中是销售]依赖于它。
线性回归方程如下所示:
这里,我们将Y作为因变量(Sales),X是自变量,θ是系数。系数是根据特征的重要性分配给特征的权重。
今天,我们将基于纽约市一家电子商务公司的数据集学习多元线性回归,该公司在网上销售服装,但他们也有店内风格和服装咨询服务。顾客进入商店,与个人造型师进行咨询议,然后他们可以回家并在移动应用程序或网站上订购他们想要的衣服。要获取数据集,请单击此处(https://github.com/meetnandu05/ml1/blob/master/Ecommerce%20Customers)。
该公司正试图决定是否将精力集中在他们的移动应用体验或他们的网站上。
导入
我们首先介绍一些常见的Python库。
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline
这些库帮助我们导入数据,构建数据,可视化数据,然后最终在数据上构建机器学习模型。
获取数据
导入这些库之后,现在让我们使用pandas库导入数据。
customers = pd.read_csv('Ecommerce Customers')
我们来看看这些数据的外观。
customers.head()
如您所见,我们有8列,即 Email (string), Address (string), Avatar (string), Avg. Session Length (float), Time on App (float), Time on website (float), Length of membership (float) and Yearly Amount Spent (float)
探索性数据分析
我们首先比较网站上的Time on website列和Yearly Amount Spent 列。
sns.jointplot(x='Time on Website',y='Yearly Amount Spent',data=customers)
让我们对Time on App做同样的事情。
sns.jointplot(x='Time on App',y='Yearly Amount Spent',data=customers)
现在让我们探索整个数据集中的这些类型的关系。我们将使用pairplot。
sns.pairplot(customers)
根据此图,可以看出与Yearly Amount Spent相关的最相关特征是Length of Membership。
训练和测试数据
现在我们已经对数据进行了一些探讨,让我们继续将数据分成训练和测试集。设置变量X等于客户的特征,变量y等于“Yearly Amount Spent”列。
y = customers['Yearly Amount Spent'] X = customers[['Avg. Session Length', 'Time on App','Time on Website', 'Length of Membership']]
使用sklearn中的model_selection.train_test_split将数据拆分为训练和测试集。
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=101)
训练机器学习模型
现在是时候训练我们的机器学习模型了!从sklearn.linear_model导入LinearRegression
from sklearn.linear_model import LinearRegression
创建名为lm的LinearRegression()模型的实例。
lm = LinearRegression()
在训练数据上训练/拟合 lm
lm.fit(X_train,y_train)
打印出机器学习模型的系数
print('Coefficients: ', lm.coef_)
输出
Coefficients:
[ 25.98154972 38.59015875 0.19040528 61.27909654]
预测测试数据
现在我们已经拟合了我们的机器学习模型,让我们通过预测测试值来评估其性能!使用lm.predict()来预测数据集X_test。
predictions = lm.predict( X_test)
创建实际测试值与预测值的散点图。
plt.scatter(y_test,predictions) plt.xlabel('Y Test') plt.ylabel('Predicted Y')
评估机器学习模型
让我们通过计算残差平方和来评估我们的机器学习模型性能。
from sklearn import metrics print('MAE:', metrics.mean_absolute_error(y_test, predictions)) print('MSE:', metrics.mean_squared_error(y_test, predictions)) print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, predictions)))
我们仍然想知道最初问题的答案,我们的工作重点是移动应用程序还是网站开发?或许这根本不重要,会员时间才是最重要的。我们来看看能不能解释一下系数。
coeffecients = pd.DataFrame(lm.coef_,X.columns) coeffecients.columns = ['Coeffecient'] coeffecients
解释这些系数呢?
解释系数:
- 保持所有其他特征固定,Avg. Session Length增加1个单位,总花费增加25.98美元。
- 保持所有其他特征固定,Time on App增加1个单位,总花费增加38.59美元。
- 保持所有其他特征固定,Time on Website增加1个单位,总花费增加0.19美元。
- 保持所有其他特征固定,Length of Membership增加1个单位,相关联的增加的花费61.27美元。
但问题仍然存在...... 你认为公司应该更多地关注他们的移动应用程序或他们的网站吗?
有两种方法可以考虑这个问题:开发网站以赶上移动应用程序的性能,或者开发更多的应用程序,因为这是更好的工作方式。这种答案实际上取决于公司正在发生的其他因素。