在scikit-learn中使用OneHotEncoder为分类准备序数和名义特征

用户名

我想准备一个包含连续,名义和有序特征进行分类的数据集。我在下面有一些解决方法,但是我想知道是否有使用scikit-learn编码器的更好方法

让我们考虑以下示例数据集:

import pandas as pd
df = pd.DataFrame([['green', 'M', 10.1, 'class1'], ['red', 'L', 13.5, 'class2'], ['blue', 'XL', 15.3, 'class1']])
df.columns = ['color', 'size', 'prize', 'class label']
df

在此处输入图片说明

现在,可以通过标签编码器简单地转换类标签(分类器忽略类标签中的顺序)。

from sklearn.preprocessing import LabelEncoder
class_le = LabelEncoder()
df['class label'] = class_le.fit_transform(df['class label'].values)

我将size像这样转换序数特征列

size_mapping = {
           'XL': 3,
           'L': 2,
           'M': 1}

df['size'] = df['size'].apply(lambda x: size_mapping[x])
df

在此处输入图片说明

最后是序数color特征:

color_mapping = {
           'green': [0,0,1],
           'red': [0,1,0],
           'blue': [1,0,0]}

df['color'] = df['color'].apply(lambda x: color_mapping[x])
df

在此处输入图片说明

y = df['class label'].values
X = df.iloc[:, :-1].values
X = np.apply_along_axis(func1d= lambda x: np.array(x[0] + list(x[1:])), axis=1, arr=X)
X

array([[  0. ,   0. ,   1. ,   1. ,  10.1],
       [  0. ,   1. ,   0. ,   2. ,  13.5],
       [  1. ,   0. ,   0. ,   3. ,  15.3]])

您可以使用DictVectorizer进行名义编码,从而使过程更整洁。您也可以直接使用来应用“ size_maping” .map()

import pandas as pd
df = pd.DataFrame([['green', 'M', 10.1, 'class1'], ['red', 'L', 13.5, 'class2'], ['blue', 'XL', 15.3, 'class1']])
df.columns = ['color', 'size', 'prize', 'class label']

from sklearn.preprocessing import LabelEncoder
class_le = LabelEncoder()
df['class label'] = class_le.fit_transform(df['class label'].values)

size_mapping = {
       'XL': 3,
       'L': 2,
       'M': 1}

df['size'] = df['size'].map(size_mapping)

feats =df.transpose().to_dict().values()

from sklearn.feature_extraction import DictVectorizer
Dvec = DictVectorizer()

Dvec.fit_transform(feats).toarray()

返回:

array([[  0. ,   0. ,   1. ,   0. ,  10.1,   1. ],
       [  1. ,   0. ,   0. ,   1. ,  13.5,   2. ],
       [  0. ,   1. ,   0. ,   0. ,  15.3,   3. ]])

获取功能名称:

 Dvec.get_feature_names()

 ['class label', 'color=blue', 'color=green', 'color=red', 'prize', 'size']

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

scikit-learn:如何用管道组成LabelEncoder和OneHotEncoder?

使用scikit-learn在朴素贝叶斯分类器中混合分类数据和连续数据

如何预处理新实例进行分类,以使特征编码与使用Scikit-learn的模型相同?

使用scikit-learn删除低方差的特征

分类和数值特征-分类目标-Scikit学习-Python

使用Numba和scikit-learn

使用scikit-learn进行二次采样+分类

如何在Scikit-learn中使用稀疏矩阵制作多项式特征

使用scikit Learn进行离散分类器的ROC曲线

scikit-learn的VotingClassifier中使用的分类器是什么?

在AdaBoostClassifier中使用scikit-learn的MLPClassifier

scikit-learn中的目标转换和特征选择

scikit中的分类报告学习

如何在python / Scikit中使用许多唯一值处理分类特征

scikit-learn StratifiedKFold实现

使用scikit-learn处理分类特征

使用scikit-learn消除随机森林上的递归特征

使用scikit-learn生成困难分类数据集

Scikit Learn中的距离指标

如何在scikit Learn,Python中处理名义数据?

Scikit学习分类

在 scikit-learn 中使用图像数据拟合支持向量分类器会产生错误

处理 scikit-learn MLPClassifier 的分类标签

Scikit Learn - 结合 TfidfVectorizer 和 OneHotEncoder 的输出 - 维度

使用 Scikit-Learn 使用分类数据制作回归模型

在 scikit-learn 中使用 OneVsRest 分类时,每个分类器的负数据点集是什么?

使用 scikit-learn 对 SVR 进行递归特征消除和网格搜索

更新 scikit-learn

Scikit-Learn OneHotEncoder 无法正常工作?