栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

线性回归伪代码

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线性回归伪代码

import numpy as np
from sklearn.model_selection import train_test_split
import joblib


class Linear:
    def __init__(self,fit_intercept=True):
        self.theta=None
        self.bias=0
        self.fit_intercept=fit_intercept
    def fit(self,X,Y,lamda=0.001):
        X = np.mat(X)
        Y = np.mat(Y)
        if self.fit_intercept:
            X = np.column_stack((np.ones_like(X[:,0]), X))
            try:
                theta = (X.T * X + lamda * np.eye(X.shape[1])).I * X.T * Y   #lamda防止矩阵不可逆
                self.theta = theta[1:]
                self.bias = theta[0]
            except Exception:
                print('矩阵不可逆,请重新设置lamda的值!')

        else:
            try:
                theta = (X.T*X+lamda*np.eye(X.shape[1])).I * X.T * Y
                self.theta=theta
            except Exception:
                print('矩阵不可逆,请重新设置lamda的值!')

    def predict(self,X):
        y_hat=X*self.theta+self.bias
        return y_hat

    def r2_score(self,X,Y):
        X = np.mat(X)
        Y = np.mat(Y)
        res=np.sum(np.square(Y-self.predict(X)))
        var=np.sum(np.square(Y-np.mean(Y)))
        R2=1-res/var
        return R2

    def mes_score(self,X,Y):
        X = np.mat(X)
        Y = np.mat(Y)
        mse=np.mean(np.sum(np.square(Y-self.predict(X))))
        return mse

    def save(self,path):
        model=(self.theta,self.bias)
        joblib.dump(model,path)


    def load(self,model_path):
        self.theta,self.bias=joblib.load(model_path)



if __name__ == '__main__':
    array = np.array([[1,2,3,10.56],
                       [2,3,4, 27],
                       [3,4,5, 39.1],
                       [4,5,6, 40.4],
                       [5,6,7, 58],
                       [6,7,8, 60.5],
                       [7,8,9, 79],
                       [8,9,10, 87],
                       [9,10,12, 90],
                       [10,11,13, 95]],
                      )
    X=array[:,:-1].reshape(-1,array.shape[1]-1)
    Y=array[:,-1].reshape(-1,1)
    x_train,x_test,y_train,y_test=train_test_split(X,Y,train_size=0.8,random_state=4)
    model=Linear(fit_intercept=True)
    model.fit(x_train,y_train,lamda=0.001)
    print('训练集上的R2:',model.r2_score(x_train,y_train))
    print('测试集上的R2:',model.r2_score(x_test, y_test))
    print('训练集上的MES:', model.mes_score(x_train, y_train))
    print('测试集上的MES:', model.mes_score(x_test, y_test))
    path=r'C:UsersAdministratorPycharmProjectspythonProject616linear.m'
    model.save(path)
    model.load(path)
    print(model.predict(X))
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983974.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号