在部署机器学习模型之前,如何准备数据

在部署机器学习模型之前,如何准备数据

你很少能以你想要的形式获得准确的数据。在建立和部署机器学习模型之前,数据预处理是一个关键的第一步。在建立模型时,并不是每次都能得到干净和格式化的数据来工作。在使用前清理和检查数据是强制性的。因此,我们使用数据预处理来处理这些数据。让我们看看在建立模型之前我们应该执行的一些步骤。

1.获取数据集
2.导入图书馆
3.导入数据集
4.寻找缺失值
5.对分类数据进行编码
6.分割训练集和测试集的数据
7.特征缩放

1.获取数据集

我们首先需要的是一个数据集,因为机器学习完全是在数据集上工作的。以特定格式收集的数据被称为数据集(DATASET)。充分了解你的数据集是非常必要的。因为数据集可能是不同的格式,用于不同的目的。你需要充分了解数据集来建立和分析模型。为了在我们的代码中使用数据集,我们基本上使用CSV格式或xlsx(Excel)格式。

2.导入库

预定义的Python库。为了执行一些特定的任务,这些库是非常有用的。

  • NumpyNumpy Python库用于在代码中进行任何种类的科学和数学计算。
  • Pandas :Pandas是最有名、最有用的Python库,用于导入和管理数据集。Pandas是开源数据,在Python中提供高性能的数据操作。
  • Matplotlib:Matplotlib对于可视化我们的结果和对数据有更好的看法非常重要。有了这个库,我们需要导入一个叫做Pyplot的子包。这个库是用来绘制任何类型的图或图表的。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

在部署机器学习模型之前,如何准备数据?

3.导入数据集

现在,是时候导入我们为机器学习模型收集的数据集了。在导入数据集之前,确保将当前目录设置为工作目录。现在使用pandas库中的read_csv()来导入数据集,该库用于读取CSV文件并对其进行各种操作。还有其他各种选项可以用来读取不同格式的文件,比如read_excel()用来读取excel文件。

data = pd.read_csv('dataset.csv')

数据集是变量的名称,它存储加载的数据集,作为CSV格式的数据集命名的文件。下面是一个随机数据集的例子,称为泰坦尼克号数据集,你可以在这里下载。

在部署机器学习模型之前,如何准备数据?

提取自变量和独立变量:通过对过滤后的数据集进行探索,你需要创建一个独立变量矩阵和一个因变量向量。首先,你应该决定并确认哪些列或因素被用作自变量(也被称为特征)来训练你的模型,从而影响你的目标变量。例如,如果目标列是你的数据集的最后一列,那么你可以很容易地创建一个独立变量的矩阵。

x = data.iloc[:,:-1].values

这里,第一个冒号(:)代表我们想要数据集中的所有行。 :-1意味着我们想要获取除最后一列以外的所有列。而.values表示我们要取所有的值。如果目标变量不在最后一列,如我们的例子(Survived),那么我们可以放弃该变量,而采用训练集中的所有其他列。例子。

在部署机器学习模型之前,如何准备数据?

而取因变量的向量,也就是数据集的最后一列,你可以写成。

y = data.iloc[:,-1].values

或者使用这种方法。

y = data['Survived']

4.处理缺失值

缺失的数据会给结果带来巨大的问题,因此有必要将它们从数据集中删除。缺失数据是最常见的问题,也是数据清理中的一个重要步骤。缺失值通常以NaN或NONE的形式出现。造成缺失值的原因是:有时列中的大部分字段是空的,需要用正确的数据来填补,有时有不正确的数据或数据质量差,对输出产生不利影响。有几种方法可以处理缺失值并将其填满。

  • 处理NULL值的第一种方法:你可以简单地删除有NULL值的行或列。但是在大多数情况下,这可能会导致信息的丢失,所以这种方法并不是那么有效。
  • 另一个重要的方法是填补数据中的NULL值。你可以计算特定行和列的平均数,然后用它来代替Null值。这种方法对那些有数字数据的列非常有用,如年龄、工资、体重、年份等。
  • 你也可以决定用同一列中直接排在它后面的任何数值来填补缺失的数值。

这些决定取决于数据的类型,以及你想用这些数据得出的结果。如果缺失的数值较少,那么最好将其删除,如果缺失的数值超过50%,则需要用正确的数据来填补。

在部署机器学习模型之前,如何准备数据?

在这里,机舱一栏包含了大约55%的缺失数据。姓名和机票一栏对于预测人的存活率来说并不那么有效,所以要放弃那些对预测不重要的一栏,否则它们会损害你的机器学习模型的准确性。

5.编码分类数据

机器学习适用于数学和数字(浮动或int类型)。然而,经常发生的情况是,在数据集中有一些列有分类值(字符串类型),我们想用它们来训练我们的模型。在这种情况下,我们必须将分类值转换为数字类型。例如,在数据集中有一个性别列,其中包含男性和女性的值,需要转换为数字,那么我们可以简单地转换,比如我们可以把0赋给男性,1赋给女性,然后在上面训练我们的模型。这主要发生在许多列中,如州名、国家、颜色等。为了转换数值,我们可以简单地使用SKLEARN _ _预处理库,它有一个名为LabelEncoder()的类。例如,我们将state列转换为数字值。

# CATEGORICAL DATA
from sklearn.preprocessing import LabelEncoder
le_x = LabelEncoder()
x['State'] = le_x.fit_transform(x['State'])

在上述代码中,我们从sklearn的预处理库中导入了LabelEncoder类。该类已经成功地将变量编码为数字。如果有更多的数字被编码,如0,1,2,那么机器学习模型就会认为这些数字之间有某种关系,这样一来,模型预测的输出就会出错,性能就会下降。因此,为了避免这个问题,我们将使用虚拟变量。

虚拟变量:虚拟变量是指只有0和1值的变量。在我们的数据集中,如果我们有3个0、1和2的值,那么它将被转换成0和1。

from sklearn.preprocessing import OneHotEncoder
onehot_encoder = OneHotEncoder(categorical_features = ['State'])
x = onehot_encoder.fit_transform(x).toarray() 
  
# or
x = pd.get_dummies(x['gender'])

在部署机器学习模型之前,如何准备数据?

6.将数据集分割成训练集和测试集

数据预处理的一个非常关键的步骤是将数据集分成训练集和测试集。通过这一步,我们可以更好、更有效地提高我们模型的性能和准确性。如果我们在不同的数据集上训练模型,并用与训练完全不同的数据集进行测试,那么就会给模型估计自变量和因变量之间的创建带来困难,模型的准确性就会非常低。因此,我们总是试图让机器学习模型在训练集和测试集上都表现良好。

  • 训练集。用来训练模型的数据集的子集,输出是我们已知的,也是用来建模的。
  • 测试集。用于测试模型的数据集子集,该模型根据给予模型的训练预测输出。

为此,我们使用了sklearn.Net中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.2, 
                                                    random_state = 0)
  • x_train:训练集的独立变量(特征)。
  • y_train: 测试数据的特征
  • x_test: 自变量训练数据
  • y_test:独立变量测试数据

在train_test_split()中,我们传递了4个参数,其中两个是数组,第三个是test_size,定义了测试数据的大小。在这里,我们取了20%的数据作为测试数据,所以给出了0.2,剩下的80%将被用于训练集。最后一个参数random_state用于设置随机发生器的种子,这样你就能得到相同的结果。

7.Feature Scaling

机器学习模型的最后一步是特征缩放。这是一种在特定范围内对训练数据集进行标准化的方法。在特征缩放中,所有的值都保持在相同的范围和相同的尺度上,这样就不会有变量支配其他变量。例如,我们在训练数据集中有年龄和工资,那么它们就不在同一个尺度上,因为年龄是31岁,工资是48000。由于机器学习模型是基于欧氏距离的,如果我们不调整变量的比例,就会导致结果和性能出现问题。

**A和B之间的欧几里得距离=∑[(x 2 – x 1 )² + (y 2 – y 1 )²] **

对于特征缩放,我们使用预处理__库中的StandardScaler类。

from sklearn.preprocessing import StandardScaler

现在,我们将为独立变量创建一个StandardScaler类的对象。然后,我们将对训练数据集进行拟合和转换。对于测试数据集,我们将直接应用转换函数,因为它已经在训练数据集中完成了。

std_x = StandardScaler()
x_train = std_x.fit_transform(x_train)
x_test = std_x.transform(x_test)

作为输出,变量的比例在-1到1之间。在执行这些步骤后,拟合模型,预测和部署它,然后测试模型的准确性。它将给出准确的结果,模型的准确率将始终在90%以上。

结合上述所有步骤

现在,在最后,我们将结合所有的步骤,使代码更加可读和易懂。

# Importing libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
  
# import dataset
data = pd.read_csv('datasets/Titanic.csv')
  
# extract dependent and independent features
x = data.drop('Survived', axis = 1)
y = data['Survived']
  
# Missing value Imputation
# drop the unrelaven features
x.drop(['Name', 'Ticket', 'Cabin'], 
       axis = 1, inplace = True)
  
# numeric value imputation with mean
x['Age'] = x['Age'].fillna(x['Age'].mean())   
  
# categorical value imputation with mode(most frequent category)
x['Embarked'] = x['Embarked'].fillna(x['Embarked'].mode()[0])
  
# category encoding
x = pd.get_dummies(x, columns = ['Sex', 'Embarked'],
                   prefix = ['Sex', 'Embarked'], 
                   drop_first = True)
  
# 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.2,
                                                    random_state = 0)
  
# feature scaling
from sklearn.preprocessing import StandardScaler
std_x = StandardScaler()
x_train = std_x.fit_transform(x_train)
x_test = std_x.transform(x_test)

在上面的代码中,我们已经涵盖了准备你的数据或进行数据预处理所需的必要步骤。但有些领域和数据集的所有步骤都是必要的,在这些情况下,我们可以把它们从我们的代码中排除。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Numpy教程