Python数据挖掘 # 5.流水线在预处理中的应用

论坛 期权论坛 脚本     
匿名技术用户   2020-12-27 09:48   18   0

0 准备

这里接着 Python数据挖掘 #存用scikit-learn估计器分类 [实验:Ionosphere 分类](近邻算法)这篇文章实验继续做。


1 预处理示例

先对Ionosphere数据集做些破坏。

x_broken = np.array(x)
x_broken[:,::2] /= 10
estimator = KNeighborsClassifier()
original_scores = cross_val_score(estimator,x,y,scoring='accuracy')
print("The original average accuracy for is {0:.1f}%".format(np.mean(original_scores)*100))
broken_scores = cross_val_score(estimator,x_broken,y,scoring='accuracy')
print("The broken average accuracy for is {0:.1f}%".format(np.mean(broken_scores)*100))

The original average accuracy for is 82.3%
The broken average accuracy for is 71.5%
我们发现在破坏后的数据集中算法的准确率显著下降。
因此我们需要对特征值规范化,避免特征值差异过大使得算法准确率下降。


2 标准预处理

借助sklearn中的预处理器MinMaxScaler来对特征进行规范化
这个类可以把特征值域规范化到0和1之间
最小值用0,最大值用1代替
使用方法:

from sklearn.preprocessing import MinMaxScaler
x_transformed =  MinMaxScaler().fit_transform(x)

3 组装

x_transformed = MinMaxScaler().fit_transform(x_broken)
estimator = KNeighborsClassifier()
transformed_scores = cross_val_score(estimator,x_transformed,y,scoring='accuracy')
print("The average accuracy for is {0:.1f}%".format(np.mean(transformed_scores)*100))

The average accuracy for is 82.3%

总结:异常值会影响近邻算法,不同算法对值域大小敏感度不同,为了提高近邻算法的准确率,需要先对特征值进行规范化


4 流水线

随着实验的增加,操作的复杂程度也在提高,我们可能需要切分数据集,对特征进行二值化处理,以特征或数据集中的个体为基础规范化数据,除此之外还可能需要其他各种操作。
流水线结构吧这些步骤保存到数据挖掘的工作流中。我们可以在cross_val_score等接收估计器的函数中使用流水线。
流水线的输入为一连串的数据挖掘步骤,最后一步必须是估计器,前几步是转换器。输入的数据集经过转换器的处理后,作为下一步的输入,最后一步用估计器对数据进行分类。
流水线分为两大步:
1)用MinMaxScaler将特征取值范围规范到0~1
2)制定KNeighborsClassifier分类器
每一步都用元组(‘名称’,步骤)来表示。
流水线的核心是元素是元组的列表。

from sklearn.pipeline import Pipeline
scaling_pipeline = Pipeline([
    ('scale',MinMaxScaler()),
    ('predict',KNeighborsClassifier())
])

使用流水线:

scores = cross_val_score(scaling_pipeline,x_broken,y,scoring='accuracy')
print("The pipeline scored an average accuracy for is {0:.1f}%".format(np.mean(transformed_scores)*100))

The pipeline scored an average accuracy for is 82.3%

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP