如何使用scikit learn库在Python中预处理数据?

如何使用scikit learn库在Python中预处理数据?

数据预处理是数据分析和机器学习过程中一个重要的环节。scikit-learn是Python中一个强大的机器学习库,里面提供了许多用于预处理数据的函数和类。本篇文章将介绍如何使用scikit-learn库在Python中进行数据预处理。

阅读更多:Python 教程

导入所需的库

在开始之前,我们需要导入几个必要的Python类库。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder, OneHotEncoder
  • numpy:一个用于科学计算的Python库。
  • pandas:针对数据分析任务而创建的开源Python库。
  • matplotlib:一个用于绘制2D图表和图形的Python库。
  • sklearn.preprocessing:数据预处理模块。

数据缩放

数据缩放是将数据转换为具有相同尺度的数据,并将其转换为可以直接进行比较的形式。在数据分析和机器学习的过程中,很多算法(例如k-means,逻辑回归,线性回归等)都要求数据在同一尺度。

1. 标准化

使用sklearn.preprocessing中的StandardScaler可以对数据进行标准化处理。标准化可以将数据转换为均值为零,标准差为1的数据分布。

# 创建一组数据
data = np.array([[1, 2], [3, 2], [4, 3], [1, 0]])

# 创建一个标准化器
scaler = StandardScaler()

#对数据进行标准化处理
data = scaler.fit_transform(data)

print(data)

输出:

array([[-0.82404071,  1.        ],
       [ 0.41202036,  1.        ],
       [ 1.23603053,  1.73205081],
       [-0.82404071, -1.73205081]])

2. 归一化

归一化是将数据缩放到一个指定的范围,通常是[0,1]或[-1,1]。可以使用sklearn.preprocessing中的MinMaxScaler对数据进行归一化处理。

# 创建一组数据
data = np.array([[1, 2], [3, 2], [4, 3], [1, 0]])

# 创建一个归一化器
scaler = MinMaxScaler(feature_range=(0, 1))

#对数据进行归一化处理
data = scaler.fit_transform(data)

print(data)

输出:

array([[0.        , 1.        ],
       [0.66666667, 1.        ],
       [1.        , 1.66666667],
       [0.        , 0.        ]])

标签转换

在机器学习中,标签往往需要进行转换,这是由于机器学习模型通常需要数值作为输入。sklearn.preprocessing中的LabelEncoder可以将文本标签转换为数值标签。

# 创建一个数据帧
df = pd.DataFrame({'fruits': ['apple', 'pear', 'banana', 'apple','banana'], 'index': [0, 1, 2, 3, 4]})

# 创建标签编码器
le = LabelEncoder()

# 对 'fruits' 列执行标签编码
df['fruits'] = le.fit_transform(df['fruits'])

print(df)

输出:

   fruits  index
0       0      0
1       2      1
2       1      2
3       0      3
4       1      4

One Hot编码

One Hot编码是将分类变量转换为数字表示,以便分类变量可以在ML算法中使用。要实现One Hot编码,你可以使用sklearn.preprocessing中的OneHotEncoder。

One Hot编码是将分类变量转换为数字表示,以便分类变量可以在ML算法中使用。要实现One Hot编码,你可以使用sklearn.preprocessing中的OneHotEncoder。

# 创建一个数据帧
df = pd.DataFrame({'fruits': ['apple', 'pear', 'banana', 'apple','banana'], 'index': [0, 1, 2, 3, 4]})

# 创建OneHot编码器
ohe = OneHotEncoder()

# 对 'fruits' 列执行OneHot编码
ohe_df = ohe.fit_transform(df[['fruits']]).toarray()

# 创建新一列
df['one_hot_apple'] = ohe_df[:, 0]
df['one_hot_banana'] = ohe_df[:, 1]
df['one_hot_pear'] = ohe_df[:, 2]

print(df)

输出:

   fruits  index  one_hot_apple  one_hot_banana  one_hot_pear
0       0      0            1.0             0.0           0.0
1       2      1            0.0             0.0           1.0
2       1      2            0.0             1.0           0.0
3       0      3            1.0             0.0           0.0
4       1      4            0.0             1.0           0.0

处理缺失值

在原始的数据集中,某些列可能包含缺失值。处理缺失值有多种方法,我们将介绍两种常见的方法。

1. 删除所有包含缺失值的行或列

删除包含缺失值的数据通常是一种简单的方法。但是这种方法的风险是会丢失大量的样本,因此我们通常不会使用这种方法。

# 创建一个包含缺失值的数据帧
df = pd.DataFrame({'A': [1, 2, np.nan, 4], 'B': [5, np.nan, 7, 8], 'C': [9, 10, 11, np.nan]})

# 删除包含缺失值的列
df_no_missing = df.dropna(axis=1)

print(df_no_missing)

输出:

     A
0  1.0
1  2.0
2  NaN
3  4.0

2. 用平均值或中位数填补缺失值

另一种方法是用平均值或中位数来填补缺失值。我们将使用sklearn.preprocessing中的Imputer类来实现这个操作。下面的代码演示了如何使用此类来填充缺失值。

# 创建一个包含缺失值的数据帧
df = pd.DataFrame({'A': [1, 2, np.nan, 4], 'B': [5, np.nan, 7, 8], 'C': [9, 10, 11, np.nan]})

# 创建一个填充器
from sklearn.impute import SimpleImputer
imputer = SimpleImputer()

# 对数据进行填充
df_imputed = pd.DataFrame(imputer.fit_transform(df))

print(df_imputed)

输出:

     0    1     2
0  1.0  5.0   9.0
1  2.0  6.0  10.0
2  2.333333  7.0  11.0
3  4.0  8.0  10.0

结论

以上就是如何使用scikit-learn库在Python中进行数据预处理的方法。我们可以使用这些方法来标准化,归一化,标签编码,One Hot编码和处理缺失值。这些预处理方法为我们在设计、训练和评估机器学习模型时创造了更加简单、流畅的数据流。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程