albertjone 2018-10-17
在这篇文章中,我将逐步完成使用Python和SKLearn设置机器学习模型的过程。在您计划设置和运行机器学习模型时,每次使用此过程都会产生细微的差异。这些差异取决于您选择运行的机器学习模型,我将尝试在此文章中提及其中的一些差异。
首先让我们看看数据科学工作流程:
在此过程中,我将假设您已完成识别问题,获取数据,清理数据以及执行一些探索性数据分析(EDA)的步骤。此时,您已准备好进入机器学习建模并对数据执行一些预测。
注意:建模的另一个先决条件是知道您是否将使用监督学习或非监督学习的方法进行建模。
下面的过程将采用监督学习方法
确定X和y变量是非常重要的。本例中,我们假定要预测的是launch_speed。
在X变量(一般用大写字母表示的X)是包含所有特征(列)的数据,我们可以设置X并删除我们计划预测的目标变量(launch_speed)。
X = model_df.drop('launch_speed', axis=1)
y变量(通常表示为小写的y)是“target”变量,换句话说,就是您打算使用模型进行预测的内容。
y = model_df['launch_speed'].values
接下来,我们要将我们的数据分成几个批量,我们可以用它们来训练我们的模型,也可以用它们来测试我们的模型。为此,我们使用SKLearn的train, test 和 split 。
首先,确保导入适当的库:
from sklearn.model_selection import train_test_split
然后,设置train,test和split。我们总是按以下顺序写出来:
注意:如果为分类问题创建模型,请使用train,test和split 查看stratify参数。另外,如果希望保持训练运行时的测试和split一致,请设置random_state参数。
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
注意:根据您选择运行的模型,这是可选的。确保您已经检查了模型,以了解它是否需要缩放数据。
现在,我们需要以同样的规模获取数据。这是很重要的,这样特征都在相同的尺度上加权。例如有工资特征列和年龄特征列,如果模型不按比例缩放, 因为工资数值很大,模型将认为这一特征需要更高的加权或更对模型的影响力更大。
为了缩放我们的数据,我们使用SKLearn 的Standard Scaler。
首先,确保导入库:
from sklearn.preprocessing import StandardScaler
其次,将Standard Scaler分配给变量:
ss = StandardScaler()
接下来,在X_train数据上拟合和转换缩放器。这将找到适合所有特征的正确缩放比例,然后转换数据。
X_train_sc = ss.fit_transform(X_train)
最后,我们采用适用于训练数据的拟合,并将其转换为X_test数据。
X_test_sc = ss.transform(X_test)
注意:在缩放和转换数据后,不要忘记pickle 缩放器以备将来使用。
现在我们准备选择我们想要用于建模的机器学习模型。有许多不同的机器学习模型可供选择,因此请查看SKLearn文档以找到适合您数据的最佳模型。
选择模型后确保已导入。我将使用Gradient Boost Regressor。
from sklearn.ensemble import GradientBoostingRegressor
实例化一个变量到你的模型:
gbr = GradientBoostingRegressor()
这一步可能需要一些时间来完成,这取决于数据的大小,但这是您的模型拟合于您提供的数据的地方。在这个过程中,它训练自己为目标变量做出最优的预测。我们只将数据放入训练批次中,因为这是大多数数据所在的位置。
gbr.fit(X_train_sc, y_train)
在拟合模型之后,您可以重复使用实例化的模型变量来对训练和测试模型批次进行评分。
gbr.score(X_train_sc, y_train) gbr.score(X_test_sc, y_test)
在给你的模型打分之前,确保你理解了模型的默认评分标准。
需要记住的事情:
为了提高模型的得分,您需要在SKLearn中使用特征选择技术,并继续对提供给模型的数据进行特征工程。持续改进你的数据集最终会得到一个更好的评分模型。