训练 x 的 1、2….10次多项式模型

随机划分训练集和测试集
训练 x 的 1、2….10次多项式模型
报告每个模型训练集和测试集的MSE

“Devil组”引证GPT后的撰写:
为了随机划分训练集和测试集,可以按照以下步骤进行操作:

  • 将数据集随机划分为训练集和测试集,可以使用 sklearn 库中的 train_test_split() 函数。
  • 对于每个多项式模型,使用训练集数据进行拟合,可以使用 sklearn 库中的 PolynomialFeatures() 和 LinearRegression() 函数。
  • 使用训练集和测试集数据来评估每个模型的性能,可以计算均方误差(MSE),并使用 sklearn 库中的 mean_squared_error() 函数。

下面是 Python 代码示例:

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import numpy as np

# 假设您的数据集存储在 x 和 y 中
# 首先,将数据集随机划分为训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=0)

# 然后,使用训练集数据进行拟合
mse_train = []
mse_test = []
for i in range(1, 11):
    poly = PolynomialFeatures(degree=i)
    x_poly_train = poly.fit_transform(x_train.reshape(-1, 1))
    x_poly_test = poly.transform(x_test.reshape(-1, 1))
    linreg = LinearRegression()
    linreg.fit(x_poly_train, y_train)
    
    # 最后,使用训练集和测试集数据来评估每个模型的性能,计算 MSE
    y_pred_train = linreg.predict(x_poly_train)
    mse_train.append(mean_squared_error(y_train, y_pred_train))
    
    y_pred_test = linreg.predict(x_poly_test)
    mse_test.append(mean_squared_error(y_test, y_pred_test))

# 打印每个模型训练集和测试集的 MSE
for i in range(10):
    print(f"Degree {i+1}: Train MSE = {mse_train[i]}, Test MSE = {mse_test[i]}")


上述代码会计算并输出每个模型在训练集和测试集上的 MSE。可以根据输出结果选择最佳的多项式模型,通常希望测试集的 MSE 越小越好。

以下是一个示例代码,实现了10次多项式模型的训练和测试,并计算了训练集和测试集的均方误差(MSE):

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

# 生成数据集
X = np.linspace(0, 1, num=100)
y = np.sin(X * 2 * np.pi) + np.random.normal(scale=0.3, size=100)

# 随机划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练和测试10次多项式模型,并计算MSE
for degree in range(1, 11):
    # 创建多项式特征
    poly_features = PolynomialFeatures(degree=degree, include_bias=False)
    X_train_poly = poly_features.fit_transform(X_train.reshape(-1, 1))
    X_test_poly = poly_features.transform(X_test.reshape(-1, 1))

    # 训练模型
    lin_reg = LinearRegression()
    lin_reg.fit(X_train_poly, y_train)

    # 计算训练集和测试集的MSE
    y_train_pred = lin_reg.predict(X_train_poly)
    train_mse = mean_squared_error(y_train, y_train_pred)
    y_test_pred = lin_reg.predict(X_test_poly)
    test_mse = mean_squared_error(y_test, y_test_pred)

    # 打印结果
    print(f"Degree {degree} - Train MSE: {train_mse:.4f} - Test MSE: {test_mse:.4f}")

首先,我们生成了一个具有噪声的正弦函数数据集。然后,我们使用train_test_split函数将数据集划分为训练集和测试集,比例为80%的训练集和20%的测试集。

接下来,我们用一个循环来训练和测试10次多项式模型。对于每个模型,我们首先使用PolynomialFeatures来创建多项式特征。然后,我们使用LinearRegression来训练模型,并用mean_squared_error函数计算训练集和测试集的MSE。

最后,我们打印出每个模型的训练集和测试集的MSE。

注意,这只是一个示例代码,实际上您可能需要根据您的数据集和模型进行适当的修改。

将数据集随机打乱,以消除数据集中任何潜在的顺序或排序效应。

根据所需的比例将数据集分为训练集和测试集。通常情况下,70%至80%的数据分配给训练集,20%至30%的数据分配给测试集。

以下是一个实现的例子:


import random
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 加载数据集
X, y = load_data()

# 随机划分训练集和测试集,测试集占20%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练1-10次多项式模型
for i in range(1, 11):
    # 创建模型对象
    model = LinearRegression()

    # 构造多项式特征
    poly_features = PolynomialFeatures(degree=i)
    X_train_poly = poly_features.fit_transform(X_train)
    X_test_poly = poly_features.transform(X_test)

    # 训练模型
    model.fit(X_train_poly, y_train)

    # 计算训练集和测试集的MSE
    train_mse = mean_squared_error(y_train, model.predict(X_train_poly))
    test_mse = mean_squared_error(y_test, model.predict(X_test_poly))

    # 打印结果
    print(f"Degree {i} polynomial model:")
    print(f"Train MSE: {train_mse:.4f}")
    print(f"Test MSE: {test_mse:.4f}\n")