sklearn编程模型

sklearn编程模型

数据集

sklearn.datasets自带一些经典数据集,方便用于实验。以iris数据集为例

.data是一个150x4的矩阵,每行是一个样本,每列是一个feature,feature的名字在.feature_names,.target是150x1的数组,对应每个样本的目标:

sepal length (cm)sepal width (cm)petal length (cm)petal width (cm).target
5.1003.5001.4000.2000
4.9003.0001.4000.2000
4.7003.2001.3000.2000
4.6003.1001.5000.2000

通常用法如下,用大写表示矩阵,小写表示数组。数据集可以按需求拆分成训练集和测试集使用。

X, y = iris.data, iris.target
estimater.fit(X, y)

estimator(估计器)

有了数据集之后就是训练与分类/回归的过程,新建一个estimator,先用estimator.fit(X, y)训练,然后用estimator.predict(T)测试,示例如下,如果这个estimator是一个分类器,给他的实例起名叫classifier会比较清晰:

>>> from sklearn import svm
>>> classifier = svm.SVC(gamma=0.001, C=100.)
>>> classifier.fit(iris.data[:-1], iris.target[:-1]) #保留最后一条样本,用于测试
>>> classifier.predict(iris.data[-1:])

transformer(数据集转换)

transformer实现fit transform,还有一个方便的组合fit_transform

transformer涵盖很广,包括数据预处理数据降维特征提取等,它的接口和estimator很类似,transformer和estimator常被组织进Pipeline,按步骤操作。

Pipeline

前一个transformer.transform()输出给下一个,这样就串联起来了,最后一个步骤通常是个estimator。预处理、降维、训练,调用一次fit就行了。

    #PCA是个transformer,做降维,SVC是个estimator,训练
>>> estimators = [('reduce_dim', PCA()), ('clf', SVC())]
>>> pipe = Pipeline(estimators)
>>> pipe.fit(X, y)

FeatureUnion

和Pipeline类似,但不是串联,是并联,把多个transformer处理过的数据合起来输出

>>> estimators = [('linear_pca', PCA()), ('kernel_pca', KernelPCA())]
>>> combined = FeatureUnion(estimators)
>>> combined.fit(X, y).transform() #假设PCA提取2个特征,KernelPCA提取3个特征,变换样本数不变,输出5列
#也可以并联之后再串联
>>> pipeline = Pipeline([("features", combined), ("svm", svm)])

sklearn模块、类组织方法

estimator和Pipeline可以fit predict,transformer和FeatureUnion可以fit transform,接口很相似,便于相互配合工作。

python没有强制interface保证,比如estimator的fitpredict有些地方用abc metaclass来保证,但不是很统一,好像有个基类BaseEstimator,又用mixin、又用metaclass的,自己要实现一个estimator也不知道继承哪一个。

没找到sklearn的类继承图,它的各个estimator分布在不同模块里,那么要实现一个estimator,可能的方法

  • 直接继承成熟的estimator,如LinearRegression,svm.SVC,然后修改fit和predict函数
  • 不继承,完全实现,因为就算继承了,基类中也没什么可复用的代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值