zoukankan      html  css  js  c++  java
  • P38 模型的保存与加载

     保存模型主要指:保存模型训练好的权重。

     以房价预测的岭回归为例:

    #load_boston里面的数值都是连续的
    import math
    from sklearn.datasets import load_boston
    #从sklearn中的线性模型导入线性回归,SGD随机梯度下降
    from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.metrics import mean_squared_error
    from sklearn.externals import joblib #模型的保存与加载模块
    
    def mylinear():
        """
        线性回归预测房子价格
        :return:
        """
        # 获取数据
        lb=load_boston()
        # 分割数据集到训练集和测试集
        x_train,x_test,y_train,y_test=train_test_split(lb.data,lb.target,test_size=0.25)
    
        #print(y_train) #打印训练样本
        #print("
    ")
        #print(y_test) #打印测试样本
        # 对特征值进行标准化处理,目标值要不要进行标准化处理?答:也要标准化,因为特征值标准化之后,乘以小权重之后,得到
        # 的值肯定也很小,这与原本的目标值相差会很大
        # 特征值和目标值都必须进行标准化处理,实例化两个标准化API
        std_x=StandardScaler()
    
        x_train=std_x.fit_transform(x_train)
        x_test=std_x.fit_transform(x_test)
    
        # 对目标值进行标准化
        std_y=StandardScaler()
    
        y_train=std_y.fit_transform(y_train.reshape(-1,1)) #样本训练标签y_train源程序提供的是1维数据,
        # 这里要做一个维度的形状转换,1维->2维,不知道有多少个样本,所以第一个参数是"-1",但是每个样本都只有一个目标值
        y_test=std_y.transform(y_test.reshape(-1,1))
    
        #y_train=std_y.fit_transform(y_train) #样本训练标签y_train源程序提供的是1维数据,
        # 这里要做一个维度的形状转换,1维->2维,不知道有多少个样本,所以第一个参数是"-1",但是每个样本都只有一个目标值
        #x_test=std_y.transform(y_test)
    
    
    
    
        #estimator预测
    
    
        # 通过岭回归的方式进行房价预测:
        sgd_Ridge=Ridge(alpha=1.0) #alpha是回归力度参数
        sgd_Ridge.fit(x_train,y_train)
        sgd_Ridge.coef_=sgd_Ridge.coef_.reshape(1,-1)
        #print("通过岭回归的方法迭代求解的回归方程的系数是:
    ",sgd_Ridge.coef_) # 打印出求解的权重参数
    
        # 保存训练好的模型
        joblib.dump(sgd_Ridge,"./tmp/test.pkl")
    
    
        # 之前标准化了,现在转化回去,不然预测的都是小值
        #sgd_Ridge_predict = std_y.inverse_transform(sgd_Ridge.predict(x_test))  # 这个是根据测试样本预测的价格
        #sgd_Ridge_predict=sgd_Ridge_predict.reshape(-1,1)
        #print("岭回归的方法,测试集里面每个测试样本中房子的预测价格是:
    ",sgd_Ridge_predict) #打印出预测价格
        #jfwc=mean_squared_error(std_y.inverse_transform(y_test), sgd_Ridge_predict)
        #print("岭回归的均方误差是:","%.1f"%jfwc ,"
            标准差是:","%.1f"%math.sqrt(jfwc),"单位是:万元")
    
    
        return None
    
    
    
    
    
    if __name__=="__main__":
        mylinear()

    运行的结果是在写的文件夹中生成一个.pkl文件,如下:

     下面利用保存的模型进行预测:

    #load_boston里面的数值都是连续的
    import math
    from sklearn.datasets import load_boston
    #从sklearn中的线性模型导入线性回归,SGD随机梯度下降
    from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.metrics import mean_squared_error
    from sklearn.externals import joblib #模型的保存与加载模块
    
    def mylinear():
        """
        线性回归预测房子价格
        :return:
        """
        # 获取数据
        lb=load_boston()
        # 分割数据集到训练集和测试集
        x_train,x_test,y_train,y_test=train_test_split(lb.data,lb.target,test_size=0.25)
    
        #print(y_train) #打印训练样本
        #print("
    ")
        #print(y_test) #打印测试样本
        # 对特征值进行标准化处理,目标值要不要进行标准化处理?答:也要标准化,因为特征值标准化之后,乘以小权重之后,得到
        # 的值肯定也很小,这与原本的目标值相差会很大
        # 特征值和目标值都必须进行标准化处理,实例化两个标准化API
        std_x=StandardScaler()
    
        x_train=std_x.fit_transform(x_train)
        x_test=std_x.fit_transform(x_test)
    
        # 对目标值进行标准化
        std_y=StandardScaler()
    
        y_train=std_y.fit_transform(y_train.reshape(-1,1)) #样本训练标签y_train源程序提供的是1维数据,
        # 这里要做一个维度的形状转换,1维->2维,不知道有多少个样本,所以第一个参数是"-1",但是每个样本都只有一个目标值
        y_test=std_y.transform(y_test.reshape(-1,1))
    
        #y_train=std_y.fit_transform(y_train) #样本训练标签y_train源程序提供的是1维数据,
        # 这里要做一个维度的形状转换,1维->2维,不知道有多少个样本,所以第一个参数是"-1",但是每个样本都只有一个目标值
        #x_test=std_y.transform(y_test)
    
    
    
    
        #estimator预测
    
    
        # 通过岭回归的方式进行房价预测:
        sgd_Ridge=Ridge(alpha=1.0) #alpha是回归力度参数
        sgd_Ridge.fit(x_train,y_train)
        sgd_Ridge.coef_=sgd_Ridge.coef_.reshape(1,-1)
        #print("通过岭回归的方法迭代求解的回归方程的系数是:
    ",sgd_Ridge.coef_) # 打印出求解的权重参数
    
        # 保存训练好的模型
        joblib.dump(sgd_Ridge,"./tmp/test.pkl")
    
        #使用预训练后保存的模型进行房价预测
        model=joblib.load("./tmp/test.pkl")
        y_perdict=std_y.inverse_transform(model.predict(x_test))
        print("使用保存的模型进行预测,结果是:
    ",y_perdict)
    
    
        return None
    
    
    
    
    
    if __name__=="__main__":
        mylinear()

    运行结果:

    使用保存的模型进行预测,结果是:
    [[22.73744592]
    [25.6768729 ]
    [12.80263561]
    [12.20050118]
    ...

    [13.79863196]
    [ 6.12208385]

    [12.87330096]
    [13.1674153 ]]

    Process finished with exit code 0

  • 相关阅读:
    vbox增加磁盘
    PMP第五版第一次考试相关提醒
    PMP学习系列7:PMBOK(5th)第五章:项目范围管理
    PMP学习系列6:PMBOK(5th)第四章-项目整合管理
    Readlist & AIM1
    如何高校管理你的时间
    PMP学习系列5:PMBOK(5th)第三章-项目管理过程
    PMP学习系列4:PMBOK(5th)第二章-组织影响和项目生命周期
    沃顿商学院最受欢迎的谈判课
    PMP学习系列3:PMBOK(5th)第一章-引言
  • 原文地址:https://www.cnblogs.com/yibeimingyue/p/14184390.html
Copyright © 2011-2022 走看看