python机器学习包sklearn数据预处理

sklearn.preprocessing包提供了几个常见的实用函数和转换类,将原始特征向量改变为更适合下游机器学习的表示。

函数

功能
preprocessing.scale( )标准化
preprocessing.MinMaxScaler( )最大最小值标准化
preprocessing.StandardScaler( )数据标准化
preprocessing.MaxAbsScaler( )绝对值最大标准化
preprocessing.RobustScaler( )带离群值数据集标准化
preprocessing.QuantileTransformer( )使用分位数信息变换特征
preprocessing.PowerTransformer( )使用幂变换执行到正态分布的映射
preprocessing.Normalizer( )正则化
preprocessing.OrdinalEncoder( )将分类特征转换为分类数值
preprocessing.LabelEncoder( )将分类特征转换为分类数值
preprocessing.MultiLabelBinarizer( )多标签二值化
preprocessing.OneHotEncoder( )独热编码
preprocessing.KBinsDiscretizer( )将连续数据离散化
preprocessing.FunctionTransformer( )自定义特征处理函数
preprocessing.Binarizer( )特征二值化
preprocessing.PolynomialFeatures( )创建多项式特征
preprocesssing.Normalizer( )正则化
preprocessing.Imputer( )弥补缺失值

1.StandardScaler

# numpy: 1.21.1
# sklearn: 1.0.1

import numpy as np
from sklearn import preprocessing

## 1.StandardScaler, 
# z = (x - u) / s,:将数据转换为均值为0,方差为1的数据, 即标准正态分布的数据,数据维度<=2
# 注:沿着axis=0进行数据处理,数据维度要小于等于2

X_train = np.array([[ 1., -1.,  2.],
                    [ 2.,  0.,  0.],
                    [ 0.,  1., -1.]])
scaler = preprocessing.StandardScaler().fit(X_train)
X_scaled = scaler.transform(X_train)
print(X_scaled.mean(axis=0),X_scaled.std(axis=0))

# 数据标准化用于分类预测示例
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

X, y = make_classification(random_state=0)
print(X,y)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
pipe = make_pipeline(StandardScaler(), LogisticRegression())
pipe.fit(X_train, y_train)  # apply scaling on training data
pipe.score(X_test, y_test)

2. MinMaxScaler

## 2. MinMaxScaler:数据转换到[0,1]
X_train = np.array([[ 1., -1.,  2.],
                    [ 2.,  0.,  0.],
                    [ 0.,  1., -1.]])
min_max_scaler = preprocessing.MinMaxScaler()
X_train_minmax = min_max_scaler.fit_transform(X_train)
print(X_train_minmax)

# 用X_train的max,min转化测试数据,范围不一定位于[0,1]区间
X_test = np.array([[-3., -1.,  4.]])
X_test_minmax = min_max_scaler.transform(X_test)
print(X_test_minmax)

3.MaxAbsScaler

## 3.MaxAbsScaler:数据映射到[-1, 1]区间
X_train = np.array([[ 1., -1.,  2.],
                    [ 2.,  0.,  0.],
                    [ 0.,  1., -1.]])

max_abs_scaler = preprocessing.MaxAbsScaler()
X_train_maxabs = max_abs_scaler.fit_transform(X_train)
print(X_train_maxabs)
# 用X_train的scaler转化测试数据,范围不一定位于[-1, 1]区间
X_test = np.array([[ -3., -1.,  4.]])
X_test_maxabs = max_abs_scaler.transform(X_test)
#print(X_test_maxabs)
print(max_abs_scaler.scale_)

4.QuantileTransformer

## 4.QuantileTransformer,属于非线形变换
# map the data to a uniform distribution with values between 0 and 1:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
quantile_transformer = preprocessing.QuantileTransformer(random_state=0)
X_train_trans = quantile_transformer.fit_transform(X_train)
# print(X_train)
# print(X_train_trans)

X_test_trans = quantile_transformer.transform(X_test)
print(np.percentile(X_train[:, 1], [0, 25, 50, 75, 100]))
print(X_train.shape)
print(min(X_train[:, 1]))

5.Normalization

## 5.Normalization
# Normalization is the process of scaling individual samples to have unit norm. 
X = [[ 1., -1.,  2.],
     [ 2.,  0.,  0.],
     [ 0.,  1., -1.]]
X_normalized = preprocessing.normalize(X, norm='l2')
print(X_normalized)

normalizer = preprocessing.Normalizer(norm='l2').fit(X)  # fit does nothing
X_normalized = normalizer.transform(X) 
print(X_normalized)

6.序数编码

## 6.序数编码:分类特征 to 整数 (0 to n_categories - 1)
enc = preprocessing.OrdinalEncoder()
X = [['male', 'from US', 'uses Safari'], ['female', 'from Europe', 'uses Firefox']]
enc.fit(X)
enc.transform([['female', 'from US', 'uses Safari']])
X_transform = enc.transform(X)
print(X_transform)

# sklearn.impute: 缺失值处理模块
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
enc = Pipeline(steps=[("encoder", preprocessing.OrdinalEncoder()),
                      ("imputer", SimpleImputer(strategy="constant", fill_value=-1)),])
enc.fit_transform(X)

7.热独编码

##7.热独编码
enc = preprocessing.OneHotEncoder()
X = [['male', 'from US', 'uses Safari'], ['female', 'from Europe', 'uses Firefox']]
enc.fit(X)
print(enc.categories_)
X_transform = enc.transform(X)
print("One hot")
print(X_transform)
print(X_transform.toarray())

genders = ['female', 'male']
locations = ['from Africa', 'from Asia', 'from Europe', 'from US']
browsers = ['uses Chrome', 'uses Firefox', 'uses IE', 'uses Safari']
enc = preprocessing.OneHotEncoder(categories=[genders, locations, browsers])
X = [['male', 'from US', 'uses Safari'], ['female', 'from Europe', 'uses Firefox']]
enc.fit(X)
X_transform = enc.transform(X)
print(X_transform.toarray())
print(enc.transform([['male', 'from Asia', 'uses Firefox']]).toarray())

# 注:编码规则,genders前两位(01或10),locations:中间四位,browsers:后四位

enc = preprocessing.OneHotEncoder(handle_unknown='ignore')
X = [['male', 'from US', 'uses Safari'], ['female', 'from Europe', 'uses Firefox']]
enc.fit(X)
print("missing categorical features")
x = enc.transform([['female', 'from Asia', 'uses Chrome']]).toarray()
print(x)
# handle_unknown='ignore':fit中没有的分类特征编码为全0

# 每种特征只有两个值,可以去掉第一位,1,0 编码
X = [['male', 'from US', 'uses Safari'],
     ['female', 'from Europe', 'uses Firefox']]
drop_enc = preprocessing.OneHotEncoder(drop='first').fit(X)
print(drop_enc.categories_)
print(drop_enc.transform(X).toarray())

# 对于大于2个值的特征,不要去除最高位
X = [['male', 'US', 'Safari'],
     ['female', 'Europe', 'Firefox'],
     ['female', 'Asia', 'Chrome']]
drop_enc = preprocessing.OneHotEncoder(drop='if_binary').fit(X)
print(drop_enc.categories_)

print(drop_enc.transform(X).toarray())

# 处理特征中的缺失值
drop_enc = preprocessing.OneHotEncoder(drop='if_binary',
                                       handle_unknown='ignore').fit(X)
X_test = [['male', 'Europe', 'IE']]
print("with unknown value")
print(drop_enc.transform(X_test).toarray())

# 缺失值当作一种特征值
X = [['male', 'Safari'],
     ['female', None],
     [np.nan, 'Firefox']]
enc = preprocessing.OneHotEncoder(handle_unknown='error').fit(X)
print(enc.categories_)
print(enc.transform(X).toarray())

# 热独编码映射到特征值
X = [['male', 'US', 'Safari'],
     ['female', 'Europe', 'Firefox'],
     ['female', 'Asia', 'Chrome']]
drop_enc = preprocessing.OneHotEncoder(drop='if_binary', sparse=False,
                                       handle_unknown='ignore').fit(X)
X_test = [['male', 'US', 'IE']]
X_trans = drop_enc.transform(X_test)
print(X_trans)
print(drop_enc.inverse_transform(X_trans))

8.PolynomialFeatures

## 8.PolynomialFeatures
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
X = np.arange(6).reshape(3, 2)
poly = PolynomialFeatures(2)
print(poly.fit_transform(X))

9.FunctionTransformer

## 9.FunctionTransformer:自定义转化
import numpy as np
from sklearn.preprocessing import FunctionTransformer
transformer = FunctionTransformer(np.log1p, validate=True)
# log1p = log(x+1),数据取对数后,在一定程度上符合正态分布的特征
X = np.array([[0, 1], [2, 3]])
transformer.transform(X)

参考:

https://zhuanlan.zhihu.com/p/393113910

https://scikit-learn.org/stable/modules/preprocessing.html#

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: python机器学习sklearn是一个功能强大的机器学习工具,提供了许多机器学习算法和工具,括分类、回归、聚类、降维、模型选择、预处理等等。它的目的是使机器学习更加简单和可重复,以便更多的人可以轻松地使用它。 sklearn的代码风格简洁明了,易于理解和使用。它也提供了许多评估指标和工具,帮助用户评估模型的性能。此外,它还支持许多常见的数据集,方便用户进行试验和研究。 总的来说,sklearn是一个非常实用的机器学习工具,适用于各种机器学习任务。如果你是一个初学者,或者是一个经验丰富的机器学习工程师,都可以从sklearn中受益。 ### 回答2: Python机器学习sklearn是一个功能强大的开源工具,可实现各种常见和先进的机器学习任务。它通过提供简洁易用的API,使得机器学习的各个方面更加容易上手。 sklearn含了众多的工具,括预处理、特征提取、监督和无监督学习算法等等。其中,监督学习算法括分类、回归和聚类。预处理工具括缺失数据处理、数据标准化等等。而特征提取方面,sklearn支持所有流行的提取技术,如HOG、LBP和Sift等。无论从哪个角度看,sklearn都是一款强大的工具。 sklearn的优点在于它广泛的支持性。它提供了许多内置的数据集,使得机器学习工作更加容易上手。此外,sklearn还提供了许多功能强大的可视化工具,辅助开发者理解机器学习结果。 sklearn做得不足之处在于其内置算法并没有涵盖所有机器学习任务。例如,它并未支持深度学习,限制了其使用范围。另外,由于sklearn提供的是封装的算法,一定程度上降低了自定义的空间。 总而言之,sklearn是一款非常实用的机器学习工具,它在广泛的支持性、API易用性、可视化工具和算法效果上均有表现。但是,虽然它不是完美的,但它仍然是大多数机器学习项目的首选库之一。 ### 回答3: Python机器学习sklearn是一个强大的工具,它提供了多种机器学习算法和工具,括分类、回归、聚类、降维、模型选择和预处理等功能。sklearn是对其他Python数据处理库,如NumPy和Pandas的补充,使得用户可以快速轻松地对数据进行一些复杂的操作。在许多数据科学和机器学习项目中,sklearn成为了一个不可或缺的工具。 sklearn主要被开发用于数据挖掘和数据分析,并被广泛应用于分类、聚类、回归和推荐系统等领域。该库提供了许多流行的机器学习算法实现,如支持向量机(SVM)、K近邻(KNN)、决策树、随机森林、朴素贝叶斯等。这些算法可以应用于不同类型的数据,如数值、分类、文本、图像和语音等数据。 sklearn的另一个重要特点是它提供了许多有用的数据预处理和数据转换方法,如标准化、归一化、降维、数据合并等方法,这些方法可以使数据更适合于机器学习算法的应用。sklearn还提供了模型选择和评估的工具,如交叉验证、网格搜索和性能度量等方法,这些方法可以帮助用户有效地选择合适的算法和调整其参数。 sklearn的优点不仅在于它的功能和性能,而且在于它在Python社区的支持和贡献。由于python机器学习的社区非常活跃,因此sklearn能够获得广泛的应用和支持。此外,sklearn详细的文档和示例使得学习和使用该库变得更加轻松和容易。 总之,Python机器学习sklearn是一个功能强大、易于使用和广泛应用于数据科学和机器学习项目的工具,它的优点在于其提供了众多有用的机器学习算法和工具,清晰的文档和示例以及强大的Python社区的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值