创建自己得转换器
小编最近在看数据分析,写下博客加深影响。 参考 Robert Layton得数据分析。
涉及到三个概念,估计器,转换器,流水线。
估计器(Estimator):用于分类、聚类和回归分析。
转换器(Transformer):用于数据预处理和数据转换。
流水线(Pipeline):组合数据挖掘流程,便于再次使用
scikit-learn 估计器
为帮助用户实现大量分类算法,scikit-learn把相关功能封装成所谓的估计器。估计器用
于分类任务,它主要包括以下两个函数。
fit():训练算法,设置内部参数。该函数接收训练集及其类别两个参数。
predict():参数为测试集。预测测试集类别,并返回一个包含测试集各条数据类别的
数组。
大多数scikit-learn估计器接收和输出的数据格式均为numpy数组或类似格式。
转换器像极了转换函数。它接收一种形式的数据,输出另外一种形式。转换器可以用训练集
训练,训练得到的参数可以用来转换测试数据集。转换器通常用作数据处理和数值转化,因为在实际情况中,影响事物得种类很多,队事物影响得权重又不同,导致数据冗杂。因此,将数据集进行转化不仅可以提高运行速度,更提高准确度。
from sklearn.base import TransformerMixin from sklearn.utils import as_float_array class MeanDiscrete(TransformerMixin): def fit(self, X, y=None): X = as_float_array(X) self.mean = np.mean(X, axis=0) return self def transform(self, X): X = as_float_array(X)
# 判断矩阵得列数是否一致 assert X.shape[1] == self.mean.shape[0] return X > self.mean
小编再看得时候,有些语法忘了,便随手在ipython上面敲了敲。
下面再进行检验:
%%file adult_tests.py import numpy as np from numpy.testing import assert_array_equal def test_meandiscrete(): X_test = np.array([[ 0, 2], [ 3, 5], [ 6, 8], [ 9, 11], [12, 14], [15, 17], [18, 20], [21, 23], [24, 26], [27, 29]]) mean_discrete = MeanDiscrete() mean_discrete.fit(X_test) assert_array_equal(mean_discrete.mean, np.array([13.5, 15.5])) X_transformed = mean_discrete.transform(X_test) X_expected = np.array([[ 0, 0], [ 0, 0], [ 0, 0], [ 0, 0], [ 0, 0], [ 1, 1], [ 1, 1], [ 1, 1], [ 1, 1], [ 1, 1]]) assert_array_equal(X_transformed, X_expected)
流水线通常是由转换器和估算器组成得,最够必须是估算器。
下面附上:
pandas.read_csv学习笔记
https://blog.csdn.net/zjyklwg/article/details/79556545