实战-数据处理

2020-08-11  本文已影响0人  程南swimming

https://www.cnblogs.com/chaosimple/p/4153167.html

数据处理的方式

  1. 使用sklearn.preprocessing.scale()函数
  2. 使用sklearn.preprocessing.StandardScaler类,使用该类的好处在于可以保存训练集中的参数(均值、方差)直接使用其对象转换测试集数据。
X_scaled = preprocessing.scale(X)
scaler = preprocessing.StandardScaler().fit(X)
>>>#可以直接使用训练集对测试集数据进行转换
>>> scaler.transform([[-1.,  1., 0.]])  
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
x=(x-min)/(max-min)
X_normalized = preprocessing.normalize(X, norm='l2')

独热编码

可以这样理解,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征(如成绩这个特征有好,中,差变成one-hot就是100, 010, 001)。并且,这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的。

  1. 实现方法一:pandas之get_dummies方法
pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False
data : array-like, Series, or DataFrame 输入的数据
prefix : string, list of strings, or dict of strings, default None 
get_dummies转换后,列名的前缀 
*columns : list-like, default None 指定需要实现类别转换的列名
dummy_na : bool, default False 增加一列表示空缺值,如果False就忽略空缺值
drop_first : bool, default False 获得k中的k-1个类别值,去除第一个
  1. 实现方法二:sklearn
from sklearn import preprocessing
enc = preprocessing.OneHotEncoder()
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])    # fit来学习编码
enc.transform([[0, 1, 3]]).toarray()    # 进行编码

优点:独热编码解决了分类器不好处理属性数据的问题,在一定程度上也起到了扩充特征的作用。它的值只有0和1,不同的类型存储在垂直的空间。
缺点:当类别的数量很多时,特征空间会变得非常大。在这种情况下,一般可以用PCA来减少维度。而且one hot encoding+PCA这种组合在实际中也非常有用。

问题

1:怎么理解独热编码
解决类别型数据的离散值问题。Tree Model不太需要one-hot编码: 对于决策树来说,one-hot的本质是增加树的深度。总的来说,要是one hot encoding的类别数目不太多,建议优先考虑
2:数据为什么要标准化?一定要标准化么?
需要: 基于参数的模型或基于距离的模型,都是要进行特征的归一化。
不需要:基于树的方法是不需要进行特征的归一化,例如随机森林,bagging 和 boosting等。

上一篇 下一篇

猜你喜欢

热点阅读