19、欠拟合与过拟合

19、欠拟合与过拟合

import numpy as np

import matplotlib.pyplot as plt

from sklearn.pipeline import Pipeline

from sklearn.preprocessing import PolynomialFeatures

from sklearn.linear_model import LinearRegression

from sklearn.model_selection import cross_val_score

plt.rcParams[ font.sans-serif ] = [ SimHei ]

plt.rcParams[ axes.unicode_minus ] = False

def true_fun(X):

    return np.cos(1.5 * np.pi * X)

np.random.seed(0)

n_samples = 30

degrees = [1, 4, 15]

X = np.sort(np.random.rand(n_samples))

y = true_fun(X) + np.random.randn(n_samples) * 0.1

plt.figure(figsize=(14, 5))

for i in range(len(degrees)):

    ax = plt.subplot(1, len(degrees), i + 1)

    plt.setp(ax, xticks=(), yticks=())

    polynomial_features = PolynomialFeatures(degree=degrees[i],

                                            include_bias=False)

    linear_regression = LinearRegression()

    pipeline = Pipeline([(“polynomial_features”, polynomial_features),

                        (“linear_regression”, linear_regression)])

    pipeline.fit(X[:, np.newaxis], y)

    #使用交叉验证评估模型

    scores = cross_val_score(pipeline, X[:, np.newaxis], y,

                            scoring=”neg_mean_squared_error”, cv=10)

    X_test = np.linspace(0, 1, 100)

    plt.plot(X_test, pipeline.predict(X_test[:, np.newaxis]), label=”Model”)

    plt.plot(X_test, true_fun(X_test), label=”True function”)

    plt.scatter(X, y, edgecolor= b , s=20, label=”Samples”)

    plt.xlabel(“x”)

    plt.ylabel(“y”)

    plt.xlim((0, 1))

    plt.ylim((-2, 2))

    plt.legend(loc=”best”)

    plt.title(“欠拟合与过拟合
Degree {}
MSE = {:.2e}(+/- {:.2e})”.format(

        degrees[i], -scores.mean(), scores.std()))

plt.show()

19、欠拟合与过拟合

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...