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.100 | 3.500 | 1.400 | 0.200 | 0 |
| 4.900 | 3.000 | 1.400 | 0.200 | 0 |
| 4.700 | 3.200 | 1.300 | 0.200 | 0 |
| 4.600 | 3.100 | 1.500 | 0.200 | 0 |
| … | … | … | … | … |
通常用法如下,用大写表示矩阵,小写表示数组。数据集可以按需求拆分成训练集和测试集使用。
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的fit和predict有些地方用abc metaclass来保证,但不是很统一,好像有个基类BaseEstimator,又用mixin、又用metaclass的,自己要实现一个estimator也不知道继承哪一个。
没找到sklearn的类继承图,它的各个estimator分布在不同模块里,那么要实现一个estimator,可能的方法
- 直接继承成熟的estimator,如LinearRegression,svm.SVC,然后修改fit和predict函数
- 不继承,完全实现,因为就算继承了,基类中也没什么可复用的代码
本文介绍sklearn编程模型的使用方法,包括内置数据集的加载、估计器与转换器的应用、Pipeline与FeatureUnion的构建等。通过示例展示了如何进行数据预处理、特征选择及模型训练。
2080

被折叠的 条评论
为什么被折叠?



