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

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%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真·skysys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值