当前位置: 首页 > 科技观察

如何在Python中创建线性回归机器学习模型?【简介】_0

时间:2023-03-14 21:08:44 科技观察

线性回归和逻辑回归是当今流行的两种机器学习模型。本文将教您如何使用scikit-learn库在Python中创建、训练和测试您的第一个线性逻辑回归机器学习模型。本文适合大多数新手。线性回归机器学习模型1.使用的数据集由于线性回归是我们将在本文中学习的第一个机器学习模型,因此在本文中,我们将使用手动创建的数据集。这使您可以更专注于学习理解机器学习概念,避免花费不必要的时间清理或操作数据。更具体地说,我们将使用住房数据集并尝试预测房价。在构建模型之前,我们首先需要导入所需的库。2.要使用的Python库我们首先需要导入的库是pandas,它结合了“面板数据”和流行的用于处理表格数据的Python库。一般我们会使用pd来命名库,可以使用如下语句导入Pandas:importpandasaspd接下来我们需要导入NumPy,这是一个非常常用的数值计算库。Numpy以其Numpy数组数据结构和非常有用的reshee、arange和append而闻名。一般我们也使用np作为Numpy的别名,可以使用如下语句导入:importnumpyasnp接下来,我们需要导入matplotlib,这是一个非常流行的Python数据可视化库。matplotlib通常导入plt作为别名。您可以使用以下语句导入:importmatplotlib.pyplotasplt%matplotlibinline%matplotlibinline语句将我们的matplotlib可视化直接嵌入到我们的JupyterNotebook中,以便于访问和解释。最后,您还将导入seaborn,这是另一个Python数据可视化库,它使您可以更轻松地使用matplotlib创建漂亮的数据可视化。您可以使用以下语句导入:importseabornassns总而言之,这是本文所需库的导入:importpandasasspdimportnumpyasnpiimportmatplotlib.pyplotasplt%matplotlibinlineimportseabornassnsnsimportdataset如前所述,我们将使用住房信息数据集。在以下URL链接中,.csv文件中有我们的数据集:https://nickmccullum.com/files/Housing_Data.csv要将数据集导入JupyterNotebook,首先要做的是复制URL并粘贴到您的浏览器下载文件。然后,将该文件移动到JupyterNotebook的目录中。完成后,以下Python语句可以将住房数据集导入JupyterNotebook:raw_data=pd.read_csv('Housing_Data.csv')该数据集具有许多特征,包括:按平方英尺计算的平均售价按面积计算的平均房间TotalHousesSoldPriceHouseAddress此数据是随机生成的,因此您会看到一些可能没有意义的细微差别(例如,本应为整数的数字后有很多小数位)。了解数据集现在数据集已经导入到raw_data变量下,您可以使用info方法获取有关数据集的一些高级信息。具体来说,运行raw_data.info()可以得出:RangeIndex:5000entries,0to4999Datacolumns(total7columns):Avg.AreaIncome5000non-nullfloat64Avg.AreaHouseAge5000non-nullfloat64Avg.AreaNumberofRooms5000non-nullfloat64Avg.AreaNumberofBedrooms5000non-nullfloat64Are??aPopulation5000non-nullfloat64Price5000non-nullfloat64Address5000non-nullobjectdtypes:float64(6),object(1)memoryusage:273.6+KB另一个有用的方法是生成数据。您可以为此使用seaborn方法pairplot并将整个DataFrame作为参数传递。下面一行代码用于说明:sns.pairplot(raw_data)这条语句的输出结果如下:接下来,让我们开始建立一个线性回归模型。构建机器学习线性回归模型我们需要做的第一件事是将我们的数据分成一个x数组(包含我们将用于进行预测的数据)和一个y数组(包含我们试图制作的数据上的预测)。首先,我们应该决定要包括哪些列,您可以使用raw_data.columns输出生成一个DataFrame列列表:,'AreaPopulation','Price','Address'],dtype='object')x-array除了价格(因为这是我们要预测的变量)和地址(因为它只包含文本),我们将用于所有这些变量。让我们创建x数组并将其分配给名为x的变量。x=raw_data[['Avg.AreaIncome','Avg.AreaHouseAge','Avg.AreaNumberofRooms','Avg.AreaNumberofBedrooms','AreaPopulation']]接下来,让我们创建我们的代码y数组并将其分配给一个名为的变量y。y=raw_data['Price']我们已经成功地将数据集划分为x数组(模型的输入值)和y数组(模型的输出值)。在下一部分中,我们将学习如何将数据集进一步拆分为训练数据和测试数据。将我们的数据集拆分为训练数据和测试数据scikit-learn可以轻松地将我们的数据集拆分为训练数据和测试数据。为此,我们需要从scikit-learn的model_selection模块中导入函数train_test_split。以下是执行此操作的完整代码:fromsklearn.model_selectionimporttrain_test_splittrain_test_split数据接受三个参数:x-arrayy-array测试数据的预期大小有了这些参数,train_test_split函数将为我们拆分数据!如果我们想要测试数据占整个数据集的30%,可以使用下面的代码:x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3)下面我们来解压这里到底发生了什么。train_test_split函数返回一个长度为4的Python列表,其中列表中的每一项都是x_train、x_test、y_train和y_test。然后我们使用列表解包将正确的值分配给正确的变量名。现在我们已经正确地划分了数据集,是时候构建和训练我们的线性回归机器学习模型了。构建和训练模型我们需要做的第一件事是从scikit-learn导入LinearRegression估计器。下面是Python语句:fromsklearn.linear_modelimportLinearRegression接下来,我们需要创建一个线性回归Python对象的实例。我们将把它分配给一个名为模型的变量。这是代码:model=LinearRegression()我们可以使用scikit-learn中的fit方法在训练数据上训练这个模型。model.fit(x_train,y_train)我们的模型现在已经训练好了,我们可以用下面的语句检查模型的每个系数:print(model.coef_)output:[2.16176350e+011.65221120e+051.21405377e+051.31871878e+031.52251955e+01]同样,这里是如何查看回归方程的截距:print(model.intercept_)输出:-2641372.6673013503查看系数的更好方法是将它们放在数据框中,这可以通过陈述:PD。DataFrame(model.coef_,x.columns,columns=['Coeff'])在这种情况下的输出更容易理解:让我们花点时间来理解这些系数的含义。让我们具体看一下区域人口变量,它的系数约为15。这意味着如果您保持所有其他变量不变,区域人口增加一个单位将导致预测变量(价格在这个案例)。换句话说,特定变量的大系数意味着该变量对您尝试预测的变量的值有很大影响。同样,小的值影响不大。现在我们已经生成了第一个机器学习线性回归模型,是时候使用该模型根据我们的测试数据集进行预测了。从我们的模型scikit-learn进行预测使得从机器学习模型进行预测变得非常容易,我们只需调用我们之前创建的模型变量的预测方法。因为predict变量是用来做预测的,它只接受一个x数组参数,它会为我们生成y值!以下是使用预测方法从我们的模型生成预测所需的代码:predictions=model.predict(x_test)预测器保存存储在x_test中的特征的预测值。由于我们使用train_test_split方法将实际值存储在y_test中,接下来我们要做的是将预测数组的值与y_test的值进行比较。下面是使用散点图绘制两个数组的简单方法。使用plt.scatter方法可以轻松构建Matplotlib散点图。下面是代码:plt.scatter(y_test,predictions)这是代码生成的散点图:可以看到,我们的预测值非常接近观测值中的实际值数据集。此散点图中的一条完美直线表明我们的模型完美地预测了y数组的值。另一种直观地评估模型性能的方法是绘制残差,它是实际y数组值与预测的y数组值之间的差异。这可以使用以下代码语句轻松实现:plt.hist(y_test-predictions)这是代码生成的可视化效果:这是我们的机器学习模型残差的直方图。您可能会注意到我们的机器学习模型中的残差似乎呈正态分布。这恰好是一个好兆头!它表明我们已经选择了合适的模型类型(在本例中为线性回归)来根据我们的数据集进行预测。在本课的后面,我们将仔细研究如何确保使用正确的模型。测试模型性能我们在本课程开始时了解到回归机器学习模型使用三个主要性能指标:平均绝对误差均方误差均方根误差现在,让我们看看如何计算每个指标。在继续之前,请记住在JupyterNotebook中运行以下导入语句:fromsklearnimportmetrics平均绝对误差(MAE)平均绝对误差(MAE)可以在Python中使用以下方法计算:metrics.mean_absolute_error(y_test,predictions)均方误差(MSE)同样,你可以使用以下语句在Python中计算均方误差:metrics.mean_squared_error(y_test,predictions)均方根误差(RMSE)与平均绝对误差和均方误差不同,scikitlearn实际上没有内置的计算方法根均方误差。幸运的是,它真的不需要。由于均方根误差只是均方根误差的平方根,因此可以使用NumPy的sqrt方法轻松计算它:np.sqrt(metrics.mean_squared_error(y_test,predictions))机器学习教程都是关于代码的。importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltimportseabornassns%matplotlibinlineraw_data=pd.read_csv('Housing_Data.csv')x=raw_data[['Avg.AreaIncome','Avg.AreaHouseAge','Avg.AreaNumberofRooms','Avg.AreaPopulation'Re]'Avg.AreaPopulation'Re]y=原始数据['价格']fromsklearn.model_selectionimporttrain_test_splitx_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3)fromsklearn.linear_modelimportLinearRegressionmodel=LinearRegression()model.fit(x_train,y_train)print(model.coef_)print(model.intercept_)pd.DataFrame(model.coef_,x.columns,columns=['Coeff'])predictions=model.predict(x_test)#plt.scatter(y_test,predictions)plt.hist(y_test-预测)fromsklearnimportmetricsmetrics.mean_absolute_error(y_test,predictions)metrics.mean_squared_error(y_test,predictions)np.sqrt(metrics.mean_squared_error(y_test,predictions))