如何保存训练好的模型

请问如何保存训练好的模型?
模型代码如下

#RM,LSTAT-->MEDV
#y=theta_0+theta_1*RM+theta_2*LSTAT+theta_3*PTRATIO+theta_4*RM^2+theta_5*RM*LSTAT+theta_6*RM*LSTAT*PTRATIO
import numpy as np

theta=np.random.rand(7,)
theta

#回归模型
def f(x):
    return np.dot(theta,x.T)
#dot():返回两个数组的点积,x.T为矩阵转置

#评估函数(求均方误差)
def mse(x,y):
    return np.sum((f(x)-y)**2) / len(y)

#训练模型
learning_rate = 0.00001

df['RM2'] = df['RM']**2
df['RM_LSTAT'] = df['RM']*df['LSTAT']
df['RM_LSTAT_PTRATIO'] = df['RM']*df['LSTAT']*df['PTRATIO']
train_x = df[['RM','LSTAT','PTRATIO','RM2','RM_LSTAT','RM_LSTAT_PTRATIO']]
print(train_x)
train_x = (train_x -train_x.mean()) / train_x.std()#标准化, mean()求平均值
train_x = np.insert(train_x.to_numpy(),0,1,axis=1)
train_y = df['MEDV']

for i in range(10000):
    theta = theta - learning_rate * np.dot(f(train_x)-train_y,train_x)
    metrics = mse(train_x,train_y)
    print('第%d轮 均方误差为%.04f theta%s' % (i+1,metrics,str(theta)))
 

基于Monster 组和GPT的调写:


import numpy as np
import pickle

#回归模型
def f(x, theta):
    return np.dot(theta, x.T)

#评估函数(求均方误差)
def mse(x, y, theta):
    return np.sum((f(x, theta) - y)**2) / len(y)

#训练模型
learning_rate = 0.00001

df['RM2'] = df['RM']**2
df['RM_LSTAT'] = df['RM'] * df['LSTAT']
df['RM_LSTAT_PTRATIO'] = df['RM'] * df['LSTAT'] * df['PTRATIO']
train_x = df[['RM', 'LSTAT', 'PTRATIO', 'RM2', 'RM_LSTAT', 'RM_LSTAT_PTRATIO']]
train_x = (train_x - train_x.mean()) / train_x.std()  #标准化
train_x = np.insert(train_x.to_numpy(), 0, 1, axis=1)
train_y = df['MEDV']

theta = np.random.rand(7)

for i in range(10000):
    theta = theta - learning_rate * np.dot(f(train_x, theta) - train_y, train_x)
    metrics = mse(train_x, train_y, theta)
    print('第%d轮 均方误差为%.04f theta%s' % (i+1, metrics, str(theta)))

#保存模型
with open('model.pickle', 'wb') as f:
    pickle.dump(theta, f)

#加载模型
with open('model.pickle', 'rb') as f:
    theta = pickle.load(f)

训练好的模型被保存到了名为'model.pickle'的文件中,并通过pickle库进行了序列化。在加载模型时,只需调用pickle库的load()函数即可将模型反序列化为一个Numpy数组。

稍微保存训练好的模型,包括保存模型的结构、超参数和模型参数
因为模型是你自己创建和定义的,又是比较简单的模型结构,所以对于这个模型来说,其实谈不上保存训练好的模型,就是保存一下训练(回归)得到的模型参数。再次使用时,不仅需要读取这些模型参数,更重要的是你编写的模型结构的子程序,即 def f(x)

该回答引用ChatGPT

在 Python 中,可以使用 pickle 模块来保存训练好的模型。pickle 是 Python 中用于序列化和反序列化对象的标准模块,可以将 Python 对象转换为字节流,然后再将字节流保存到文件中。之后,我们可以再次从文件中加载字节流,并使用 pickle 将其反序列化为原始对象。

以下是一个示例代码,展示如何使用 pickle 模块保存和加载训练好的模型:

import pickle

# 训练模型
# ...

# 保存模型
with open('model.pkl', 'wb') as f:
    pickle.dump(theta, f)

# 加载模型
with open('model.pkl', 'rb') as f:
    theta = pickle.load(f)


在上面的代码中,我们首先使用训练数据训练模型,得到最终的参数 theta。接下来,我们使用 pickle 模块将参数 theta 保存到文件 model.pkl 中。保存时需要以二进制写入模式打开文件。最后,我们可以再次打开文件 model.pkl,加载保存的字节流,并使用 pickle 将其反序列化为原始对象,即训练好的模型参数 theta。