数据预处理常见问题
2018-06-20 本文已影响8人
7125messi
主要关注点
特征提取,幅度缩放(Feature Extraction and Scaling)
特征选择(Feature Selection)
维度约减(Dimensionality Reduction)
采样(Sampling)
通常,解决机器学习问题的最困难的部分可能是找到恰当的的评估器(estimator)。
不同的评估器更适合不同类型的数据和不同的问题。
下面的流程图是一些粗略的指导,可以让用户根据自己的数据来选择应该尝试哪些评估器。
了解数据分布、去异常值、数据变换、特征工程
多模型融合与提升
非数值标签到数值标签的转化
数据预处理 LabelBinarizer通常用于通过一个多类标签(label)列表,创建一个label指示器矩阵
数据预处理 LabelEncoder 标签编码 也可以非数值标签到数值标签的转化
import numpy as np
import pandas as pd
from sklearn.preprocessing import LabelEncoder
df_train = pd.read_csv("./input/train.csv")
df_test = pd.read_csv("./input/test.csv")
print(type(df_train[['Sex','Pclass']]))
print(type(df_train[['Sex']]))
print(type(df_train['Sex']))
df_train.head()
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.series.Series'>
# 二分类 Sex变为0或1 female和male
le = LabelEncoder()
df_train["Sex"] = le.fit_transform(df_train["Sex"])
df_train.head()
# 三个分类 Embarked变为0,1,2 C S Q
# le.fit_transform不能转化空值,所以需要先填充
df_train['Embarked'] = df_train['Embarked'].fillna("S") # 直接使用某个值来填充
df_train['Embarked'] = le.fit_transform(df_train['Embarked'])
df_train.head()
分类变量需要转换为数值变量 Embarked, Pclass and Sex分别标签变量,需要转换成数值变量
pd.get_dummies?
Signature: pd.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False)
Convert categorical variable into dummy/indicator variables 将分类变量转换为虚拟/指标变量
data : array-like, Series, or DataFrame
prefix : string, list of strings, or dict of strings, default None
String to append DataFrame column names
Pass a list with length equal to the number of columns
when calling get_dummies on a DataFrame. Alternativly, `prefix`
can be a dictionary mapping column names to prefixes.
数据:数组式,Series或DataFrame
前缀:字符串,字符串列表或字符串,默认为无
要附加DataFrame列名的字符串
传递长度等于列数的列表
在DataFrame上调用get_dummies时。 替代地,`前缀'
可以将字典映射列名称作为前缀。
不生成新的变量:对于二分类类别
# Sex——> 0和1
sex = pd.Series(np.where(full.Sex == 'male',1,0) , name = 'Sex')
sex
0 1
1 0
2 0
3 0
4 1
5 1
6 1
生成新变量Embarked
embarked = pd.get_dummies(full.Embarked , prefix='Embarked' ) # 将分类变量转换为虚拟/指标变量
embarked.head()
注意,此时原来的数据集full仍然未变
from sklearn.preprocessing import Imputer , Normalizer , scale
# 用于完成缺失值的插补
preprocessing.Imputer?
Init signature: preprocessing.Imputer(self, missing_values='NaN', strategy='mean', axis=0, verbose=0, copy=True)
# 归一化
preprocessing.Normalizer?
Init signature: preprocessing.Normalizer(self, norm='l2', copy=True)
# 沿着任何轴标准化数据集
preprocessing.scale?
Signature: preprocessing.scale(X, axis=0, with_mean=True, with_std=True, copy=True)