详解 Scikit-learn 的 preprocessing.OrdinalEncoder函数:有序特征编码器

  • Post category:Python

Scikit-learn是一个广泛使用的Python机器学习库,其中的sklearn.preprocessing.OrdinalEncoder函数允许将分类变量转换为整数值,以便模型可以更好地进行训练。接下来我们将详细讲解OrdinalEncoder函数的作用与使用方法。

作用

OrdinalEncoder函数可以用于将分类变量转换成整数值,该过程被称为编码。这在机器学习中非常重要,因为算法通常只能处理数值数据。另外,OrdinalEncoder函数对于特征缩放,也非常实用。该函数可以对数据集中的每个特征进行编码,以便它们位于相同的比例和范围内,从而提高模型的性能和准确性。

使用方法

  1. 导入OrdinalEncoder模块
from sklearn.preprocessing import OrdinalEncoder 
  1. 创建一个OrdinalEncoder对象
oe = OrdinalEncoder() 
  1. 使用fit_transform方法对数据进行编码
data_encoded = oe.fit_transform(data) 

数据集需要是二维数组,其中每个行代表一个样本,每一列代表一个特征。数据可以是numpy数组、Pandas DataFrames或SciPy稀疏矩阵。

  1. 查看编码后的数据
print(data_encoded) 

输出将返回编码后的数据,每一行代表一个样本,每一列代表一个特征。 例如,对于数据集[['男', '公立学校'], ['女', '私立学校']],使用OrdinalEncoder函数进行编码后,将返回以下数据集:

[[0. 0.]
 [1. 1.]]

其中,0表示男性,1表示女性;0表示公立学校,1表示私立学校。

  1. 获取编码特征的类别
oe.categories_ 

该方法将返回每个特征类别的列表。

实例

实例1:对电影评级数据进行编码

import pandas as pd
from sklearn.preprocessing import OrdinalEncoder

# 创建示例DataFrame
data = {'电影名': ['肖申克的救赎', '阿甘正传', '泰坦尼克号', '阿凡达'], '评级': ['优秀', '良好', '优秀', '一般']}
df = pd.DataFrame(data)

# 创建OrdinalEncoder对象
encoder = OrdinalEncoder()

# 对数据进行编码
encoded_data = encoder.fit_transform(df[['评级']])

# 查看编码后的数据
print(encoded_data)

# 查看特征类别
print(encoder.categories_)

输出:

[[0.]
 [2.]
 [0.]
 [1.]]
[array(['优秀', '一般', '良好'], dtype=object)]

实例2:对房屋销售数据进行编码

import numpy as np
from sklearn.preprocessing import OrdinalEncoder

# 创建示例数据集
data = np.array([['深圳市', '南山区'], ['北京市', '西城区'], ['广州市', '天河区'], ['上海市', '徐汇区']])
print('原始数据集:\n', data)

# 创建OrdinalEncoder对象
encoder = OrdinalEncoder()

# 对数据进行编码
encoded_data = encoder.fit_transform(data)

# 查看编码后的数据
print('编码后数据集:\n', encoded_data)

# 查看特征类别
print('特征类别:\n', encoder.categories_)

输出:

原始数据集:
 [['深圳市' '南山区']
 ['北京市' '西城区']
 ['广州市' '天河区']
 ['上海市' '徐汇区']]
编码后数据集:
 [[2. 1.]
 [0. 4.]
 [1. 2.]
 [3. 0.]]
特征类别:
 [array(['上海市', '北京市', '广州市', '深圳市'], dtype=object), 
  array(['天河区', '徐汇区', '南山区', '西城区'], dtype=object)]

该代码使用OrdinalEncoder将城市和地区转换为数值类别。’深圳市’通过值2表示,’南山区’通过值1表示。特征类别包括四个城市和四个地区。