Scikit-learn是一个广泛使用的Python机器学习库,其中的sklearn.preprocessing.OrdinalEncoder函数允许将分类变量转换为整数值,以便模型可以更好地进行训练。接下来我们将详细讲解OrdinalEncoder函数的作用与使用方法。
作用
OrdinalEncoder函数可以用于将分类变量转换成整数值,该过程被称为编码。这在机器学习中非常重要,因为算法通常只能处理数值数据。另外,OrdinalEncoder函数对于特征缩放,也非常实用。该函数可以对数据集中的每个特征进行编码,以便它们位于相同的比例和范围内,从而提高模型的性能和准确性。
使用方法
- 导入OrdinalEncoder模块
from sklearn.preprocessing import OrdinalEncoder
- 创建一个OrdinalEncoder对象
oe = OrdinalEncoder()
- 使用fit_transform方法对数据进行编码
data_encoded = oe.fit_transform(data)
数据集需要是二维数组,其中每个行代表一个样本,每一列代表一个特征。数据可以是numpy数组、Pandas DataFrames或SciPy稀疏矩阵。
- 查看编码后的数据
print(data_encoded)
输出将返回编码后的数据,每一行代表一个样本,每一列代表一个特征。 例如,对于数据集[['男', '公立学校'], ['女', '私立学校']]
,使用OrdinalEncoder函数进行编码后,将返回以下数据集:
[[0. 0.]
[1. 1.]]
其中,0表示男性,1表示女性;0表示公立学校,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表示。特征类别包括四个城市和四个地区。