sklearn提供了Pipeline将多个学习器组成流水线。通常,流水线的形式为:将数据标准化的学习器-->特征提取的学习器-->执行预测的学习器。除了最后一个学习器之外,之前的所有学习器必须提供tranform方法,该方法用于数据变换(如归一化,正则化,以及特征提取等)。
Pipeline的原型为:
class sklearn.pipeline.Pipeline(steps)
参数:
steps:一个列表,列表的元素为(name,transform)元组,其中name是学习器的名字,用于输出和日志;transform是学习器,之所以叫transform是因为这个学习器(除了最后一个)必须提供transform方法。
属性:
named_steps:一个字典,字典的键就是steps中各元组的name元素,字典的值就是steps中各元组的transform元素。
方法:
fit(X[,y]):启动流水线,依次对各个学习器(除了最后一个学习器)执行fit方法和transform方法转换数据,对最后一个学习器执行fit方法训练学习器。
transform(X):启动流水线,依次对各个学习器执行fit方法和transform方法转换数据。要求每个学习器都实现了tranform方法。
fit_transform(X[,y]):启动流水线,依次对各个学习器(除了最后一个学习器)执行fit方法和transform方法转换数据,最后一个学习器执行fit_transform方法转换数据。
inverse_transform(X):将转换后的数据逆转换成原始数据,要求每个学习器都实现了inverse_transform方法。
predict(X)/predict_log_proba(X)/predict_proba(X):将X进行数据转换后,用最后一个学习器来预测。
score(X,y):将X进行数据转换后,用最后一个学习器来给出预测评分。
Demo:
from sklearn.datasets import load_digits
from sklearn import cross_validation
from sklearn.svm import LinearSVC
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
def test_Pipeline(data):
x_train,x_test,y_train,y_test=data
steps=[('Linear_SVM',LinearSVC(C=1,penalty='l1',dual=False)),
('LogisticRegression',LogisticRegression(C=1))]
pipeline=Pipeline(steps)
pipeline.fit(x_train,y_train)
print('name steps:',pipeline.named_steps)
print('Pipeline Score:',pipeline.score(x_test,y_test))
if __name__=='__main__':
data=load_digits()
X=data.data
y=data.target
test_Pipeline(cross_validation.train_test_split(X,y,test_size=0.25,
random_state=0,stratify=y)) pipeline.named_steps给出了流水线上每一步使用的学习器
pipeline.score给出来最后一个学习器的预测性能得分,该学习器的输入数据为原始数据经过流水线处理后的数据。
本文介绍了sklearn的Pipeline,它允许将多个学习器串联成一个流水线,通常包括数据预处理、特征提取和预测。Pipeline的每个步骤由(name, transform)元组构成,其中transform必须提供transform方法。Pipeline提供了fit、transform、fit_transform和inverse_transform等方法,方便进行数据处理和预测。最后,通过pipeline.named_steps可以访问流水线中每个步骤的学习器,而pipeline.score则给出流水线中最后一个学习器的预测性能。"
131365864,7429428,理解均方误差与交叉熵损失函数,"['机器学习', '损失函数', '模型训练', '预测模型', '数据科学']
1894

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



