参考文章:http://sebastianraschka.com/Articles/2014_about_feature_scaling.html
官方文档:http://scikit-learn.org/stable/modules/preprocessing.html
1. Standardization
z-分数转换。
Z = \frac{x-\mu}{\sigma}
它将数据转换成mean=0,std=1的标准正态分布。
用sk-learn实现:sklearn.preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True)
。
scaler = preprocessing.StandardScaler().fit(X)
scaler.mean_
scaler.scale_
scaler.transform(X)
# 可以用训练好的scaler去转换其他数据,这样它们就处于同样的分不下了。
在以下这些算法中,特征值服的分布对机器学习的结果影响很大:
- KNN
- K-Means
- SVM
- PCA
- RBF Kernel
- Logistic regression
- Linear discriminant analysis
- l1 and l2 regularizers of linear models
只有基于树模型的算法是scale-invariant的,也就是说数据范围对它来说没影响。
2. Min-Max scaling
转换公式:
X_{norm} = \frac{X-X_{min}}{X_{max}-X_{min}}
这个方法把数据压缩到了(0,1)范围内。在图像处理(image processing)中用到。
3. Max-Abs scaling
和Min-Max scaling一样将数值压缩到一定范围内[-1,1]。计算方法是将所有的特征值除以最大值。
用在数值已经以0为中心(均值=0),或者稀疏数据中。
4. Normalizing
sklearn.preprocessing.Normalizer(norm='l2', copy=True)
把独立的样本数据缩放成具有单位规范(unit norm)的数据。在用二次方式(quadratic form)如点积,或者其他kernel队样本之间的差异进行量化时,很有用。
这个假设是基于Vector Space Model的,经常用在文本分类、聚类中。
5. Binarization
将数值型的特征值转换为布尔型(二分类),通过设置阈值。
6. Encoding categorical features
sklearn.preprocessing.OneHotEncoder(
n_values='auto',
categorical_features='all',
dtype=<type 'numpy.float64'>,
sparse=True,
handle_unknown='error')
特征值为类别数据是使用OneHotEncoder来编码。它会把类别数据转换成多列0,1数据。
7. Imputation of missing values
归置缺失值。
sklearn.preprocessing.Imputer(
missing_values='NaN',
strategy='mean',
axis=0, verbose=0, copy=True)
8. Generating polynomial features
将少数几个特征搞成更多的特征,也就是把模型搞复杂起来。
sklearn.preprocessing.PolynomialFeatures(
degree=2,
interaction_only=False,
include_bias=True)
生成多项的、相互影响的特征值。比如一个[a,b]两个特征的数据,用degree=2的PolynomialFeatures转换之后会变成[1, a, b, a^2, ab, b^2]这么多特征。
9. Custom transformers
最后,按照国际惯例会有一个自定义转换。可以使用
sklearn.preprocessing.FunctionTransformer(
func=None,
inverse_func=None,
validate=True,
accept_sparse=False,
pass_y=False, kw_args=None, inv_kw_args=None)
这个来制定你所需要的转换方式。
用到的时候去查文档吧。
以上。
网友评论