特征工程是数据科学项目中的关键步骤,它涉及从原始数据中提取特征,以提升机器学习算法的性能。本文将探讨如何使用独热编码技术处理多分类变量。
特征工程是应用机器学习的过程,它利用问题领域的知识从原始数据中提取特征。这些特征能够提高机器学习算法的性能,从而获得更高的准确度。特征工程是机器学习中最重要的艺术之一,它在好的模型和差的模型之间创造了巨大的差异。
在机器学习中,经常遇到不同类型的数据,例如连续数据、分类特征、缺失值、日期和时间等。本文将专注于分类特征,这些特征的数据类型通常是对象类型,其数据点的值不是数值形式,而是对象形式。
独热编码是一种将分类变量转换为数值形式的技术。许多机器学习算法不能直接处理标签数据,它们要求所有输入变量和输出变量都是数值的。这意味着分类数据必须转换为数值形式。
以房价预测数据集为例,展示如何应用独热编码技术。首先,需要导入Python中的重要模块,包括pandas用于数据分析,NumPy用于多维数组,以及sklearn中的OneHotEncoder用于分类编码。
import pandas as pd
import numpy as np
from sklearn.preprocessing import OneHotEncoder
接下来,使用pandas的read_csv()函数读取CSV格式的数据集。
df = pd.read_csv('house_price.csv')
df.head()
只关注分类变量,并使用pandas的select_dtypes()函数检查数据集中哪些特征是分类值。
cat = df.select_dtypes(include='O').keys()
cat
然后,从数据集中删除数值列,只保留分类变量,以便应用独热编码。
new_df = pd.read_csv('house_price.csv', usecols=['Neighborhood', 'Exterior1st', 'Exterior2nd'])
new_df.head()
接下来,找出每个分类列中存在多少个唯一类别。
for x in new_df.columns:
print(x, ':', len(new_df[x].unique()))
现在,将应用独热编码技术到多分类变量上。将限制独热编码只应用于变量中最常见的10个标签。这意味着只为这10个最常见的标签创建一个二元变量,其他标签则被归入一个新的类别,并被丢弃。
top_10 = [x for x in new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index]
top_10
将这10个最常见的分类标签转换为二进制格式。
for label in top_10:
new_df[label] = np.where(new_df['Neighborhood'] == label, 1, 0)
new_df[['Neighborhood'] + top_10]
def top_x(df2, variable, top_x_labels):
for label in top_x_labels:
df2[variable + '_' + label] = np.where(data[variable] == label, 1, 0)
data = pd.read_csv('D://xdatasets/train.csv', usecols=['Neighborhood', 'Exterior1st', 'Exterior2nd'])
top_x(data, 'Neighborhood', top_10)
data.head()