美文网首页
特征数据预处理-离散值处理

特征数据预处理-离散值处理

作者: ForgetThatNight | 来源:发表于2018-07-06 19:20 被阅读201次
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

标签处理

通常我们会把字符型的标签转换成数值型的

class_mapping = {label:idx for idx,label in enumerate(set(df['class label']))}

df['class label'] = df['class label'].map(class_mapping)
df

特征处理

对于特征来说,我们一般可以做一个映射的字典

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

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

我们还可以做这样的转换进行编码

color_mapping = {
           'green': (0,0,1),
           'red': (0,1,0),
           'blue': (1,0,0)}

df['color'] = df['color'].map(color_mapping)
df

对于数据,我们同样可以给它反变换回去

inv_color_mapping = {v: k for k, v in color_mapping.items()}
inv_size_mapping = {v: k for k, v in size_mapping.items()}
inv_class_mapping = {v: k for k, v in class_mapping.items()}

df['color'] = df['color'].map(inv_color_mapping)
df['size'] = df['size'].map(inv_size_mapping)
df['class label'] = df['class label'].map(inv_class_mapping)
df

Using scikit-learn and pandas features

scikit LabelEncoder

from sklearn.preprocessing import LabelEncoder

class_le = LabelEncoder()
df['class label'] = class_le.fit_transform(df['class label'])
df

反变换回去可以用这个函数 inverse_transform :

class_le.inverse_transform(df['class label'])

输出 : array(['class1', 'class2', 'class1'], dtype=object)

scikit DictVectorizer

使用 DictVectorizer将得到特征的字典

df.transpose().to_dict().values()

输出 :
dict_values([{'color': 'green', 'size': 'M', 'class label': 0, 'prize': 10.1}, {'color': 'red', 'size': 'L', 'class label': 1, 'prize': 13.5}, {'color': 'blue', 'size': 'XL', 'class label': 0, 'prize': 15.3}])

feature = df.iloc[:, :-1]
feature

对所有的数据都做了映射

from sklearn.feature_extraction import DictVectorizer
dvec = DictVectorizer(sparse=False)

X = dvec.fit_transform(feature.transpose().to_dict().values())
X

输出 :
array([[ 0. , 1. , 0. , 10.1, 0. , 1. , 0. ],
[ 0. , 0. , 1. , 13.5, 1. , 0. , 0. ],
[ 1. , 0. , 0. , 15.3, 0. , 0. , 1. ]])

可以调用 get_feature_names 来返回新的列的名字,其中0和1就代表是不是这个属性.

pd.DataFrame(X, columns=dvec.get_feature_names())

OneHotEncoder

OneHotEncoder 必须使用整数作为输入,所以得先预处理一下

color_le = LabelEncoder()
df['color'] = color_le.fit_transform(df['color'])

df
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(sparse=False)

X = ohe.fit_transform(df[['color']].values)
X

输出 :
array([[ 0., 1., 0.],
[ 0., 0., 1.],
[ 1., 0., 0.]])

pandas get_dummies

Pandas库中同样有类似的操作,使用get_dummies也可以得到相应的特征

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']

size_mapping = {
           'XL': 3,
           'L': 2,
           'M': 1}
df['size'] = df['size'].map(size_mapping)

class_mapping = {label:idx for idx,label in enumerate(set(df['class label']))}
df['class label'] = df['class label'].map(class_mapping)


df

对整个DF使用get_dummies 将会得到新的列:

pd.get_dummies(df)

相关文章

  • 特征数据预处理-离散值处理

    标签处理 通常我们会把字符型的标签转换成数值型的 特征处理 对于特征来说,我们一般可以做一个映射的字典 我们还可以...

  • 数据预处理

    数据预处理: 参考 朱/欧等,《数据科学导引》 朱占星课程ppt 离散特征编码: One Hot编码:在数据是离散...

  • 数据预处理:标称型特征的编码和缺失值处理

    数据预处理:标称型特征的编码和缺失值处理 标称型特征编码(Encoding categorical feature...

  • 5.data_preprocessing_and_feature

    1.数据预处理与特征工程 1.1处理缺失值 1.1.1 直接删除缺失值多的样本和特征 1.1.2 计算缺失值与填充...

  • 数据预处理、特征工程和特征学习

    神经网络的数据预处理 数据预处理的目的是使原始数据更适合神经网络处理,包括向量化、标准化、处理缺失值和特征提取。 ...

  • 搭建金融信贷风控中的机器学习模型-(3)评分卡与数据简介

    在构建评分卡模型的工作中,数据的预处理和特征构建工作是至关重要的一步。数据预处理可以有效处理缺失值和异常值...

  • 机器学习入门(猴子live)

    数据处理步骤 获得数据预处理数据特征提取特征选择和特征降维 数据预处理6个步骤 1.选择子集2.列名重命名3.缺失...

  • Kaggle

    数据预处理: 步骤: 删除不需要的列;填补缺失值;类别特征进行labelencode;连续值进行切分 1.分析数据...

  • 0713机器学习 算法

    难点:数据预处理与特征工程

  • 预处理

    数据预处理的常用流程 去除唯一属性 处理缺失值 属性编码 数据标准化 特征选择 主成分分析 缺失值处理的三种方法 ...

网友评论

      本文标题:特征数据预处理-离散值处理

      本文链接:https://www.haomeiwen.com/subject/dpmmuftx.html