2021大三机器学习之——管道Pipeline理解+基于管道(pipeline)的模型观察

2023-05-16

周末补一下这星期机器学习的知识点🧀欢迎

在这里插入图片描述
别忘了点赞关注噢🎁🎁🎁
在这里插入图片描述

文章目录

  • 吹个水🤑
  • 什么是管道(Pipeline)?😃
  • 看案例😆
  • 参数🤪
  • 基于管道(pipeline)的模型观察😍

吹个水🤑

在这里插入图片描述

什么是管道(Pipeline)?😃

在这里插入图片描述

管道就是说,你在分析数据的时候可能会有好几个预处理、或者说你可能有好几个model,那么你每次想调用这个过程的时候,每次都要写这么多预处理和model的过程的话就显得很繁琐,所以这里出现了“管道”的概念,它把这些过程相当于封装起来了,你要调用的话,直接就用就行了,不需要再重复写预处理和model的过程😎😎😎

在这里插入图片描述

看案例😆

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline

polynomial_features = PolynomialFeatures(degree=2)
linear_regression = LinearRegression()
pipeline = Pipeline([("polynomial_features", polynomial_features),
                     ("linear_regression", linear_regression)])##重点

pipeline.fit(X_train, y_train)##直接就用它来fit()就行了
##用例:
train_score = pipeline.score(X_train, y_train)
cv_score = pipeline.score(X_test, y_test)
print('train_score: {0:0.6f}; cv_score: {1:.6f}'.format(train_score, cv_score))

就是如此的简单😁

参数🤪

pipeline的构建接受一个列表参数,列表中每个元组都包含两个元素,分别为转换器或者估计器的名字,和转换器或者估计器本身,注意:估计器只能放在pipeline的最后一个。名字用于使用pipeline进行字典访问。

基于管道(pipeline)的模型观察😍

以下例子和多项式回归有点关系的,因为它和degree有关,数据的话这里不方便展示了,大家看一下效果就行了,都是可以理解的了

n_dots = 200 ##随机种子

X = np.linspace(-2 * np.pi, 2 * np.pi, n_dots)
Y = np.sin(X) + 0.2 * np.random.rand(n_dots) - 0.1
X = X.reshape(-1, 1)
Y = Y.reshape(-1, 1);

第二步,写函数

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline

def polynomial_model(degree=1):
    polynomial_features = PolynomialFeatures(degree=degree)
    linear_regression = LinearRegression()
    pipeline = Pipeline([("polynomial_features", polynomial_features),
                         ("linear_regression", linear_regression)])
    return pipeline

第三步

from sklearn.metrics import mean_squared_error

degrees = [2, 3, 5, 10]
results = []
for d in degrees:
    model = polynomial_model(degree=d)
    model.fit(X, Y)
    train_score = model.score(X, Y)
    mse = mean_squared_error(Y, model.predict(X))
    results.append({"model": model, "degree": d, "score": train_score, "mse": mse})
for r in results:
    print("degree: {}; train score: {}; mean squared error: {}".format(r["degree"], r["score"], r["mse"]))

结果:
在这里插入图片描述
第四步,看效果图

from matplotlib.figure import SubplotParams

plt.figure(figsize=(12, 6), dpi=200, subplotpars=SubplotParams(hspace=0.3))
for i, r in enumerate(results):
    fig = plt.subplot(2, 2, i+1)
    plt.xlim(-8, 8)
    plt.title("LinearRegression degree={}".format(r["degree"]))
    plt.scatter(X, Y, s=5, c='b', alpha=0.5)
    plt.plot(X, r["model"].predict(X), 'r-')

在这里插入图片描述
在这里插入图片描述
可以看到degree的值越高,那么拟合的最终效果就越好,也就是可以理解成,预处理的次数越多,效果越好,当然这不是绝对的,不是预处理做的越多,效果就越好的,有时候degree=1的效果可能比10的效果还好,这个东西是不确定的!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2021大三机器学习之——管道Pipeline理解+基于管道(pipeline)的模型观察 的相关文章

随机推荐