基于最大似然原理的线性回归python实现

'''
基于极大似然原理的没有截距的线性回归 y=wx
属性:系数 w 
功能: fit  基于X,y 求w
       pridict 加入X 预测相应y
'''
class LinearRegressionself():
    def __init__(self):
        self.w = None
    def fit(self,X,y):
        b = np.ones(X.shape[0])
        X = np.insert(X,0,values = b,axis=1)
        #self.w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
        X_ = np.linalg.inv(X.T.dot(X))
        self.w = X_.dot(X.T).dot(y)

    def predict(self,X):
        b = np.ones(X.shape[0])
        X = np.insert(X,0,values = b,axis=1)
        y_pred = X.dot(self.w)
        return y_pred
    def score(self,y,y_pred):
        accuracy = np.mean(np.power(y - y_pred,2))
        return accuracy

与python自带线性回归模型精度比较,结果一致

if __name__ == '__main__':
    from sklearn import datasets
    import numpy as np 
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LinearRegression
    dataset = datasets.load_diabetes()
    X = dataset.data
    y = dataset.target
    X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2)   
    lr_self = LinearRegressionself()
    lr_self.fit(X_train,y_train)
    y_ = lr_self.predict(X_test)
    accuracy_self = lr_self.score(y_test,y_)
 #   print(accuracy_self)
    #--------------------------#
    lr = LinearRegression()
    lr.fit(X_train,y_train)
    y_ = lr.predict(X_test)
    accuracy = np.mean(np.power(y_test- y_,2))
  #  print(accuracy)
    if np.abs(accuracy_self - accuracy)<1e-4:
        print('算法与python给的原算法结果一致')
    else:
        print('算法与python给的原算法结果不一致') 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
贝叶斯线性回归是一种利用贝叶斯统计方法进行参数估计的线性回归模型。在Python中,可以使用一些库来实现贝叶斯线性回归,如`scikit-learn`和`PyMC3`。 对于`scikit-learn`库,可以使用`BayesianRidge`类来实现贝叶斯线性回归。下面是一个简单的示例代码: ```python from sklearn.linear_model import BayesianRidge # 创建贝叶斯线性回归模型 model = BayesianRidge() # 训练模型 model.fit(X, y) # 预测 y_pred = model.predict(X_test) ``` 其中,`X`是输入特征矩阵,`y`是目标变量向量,`X_test`是测试数据的特征矩阵。可以根据具体情况调整模型的参数。 另外,可以使用`PyMC3`库进行更灵活的贝叶斯建模。下面是一个使用`PyMC3`实现贝叶斯线性回归的示例代码: ```python import pymc3 as pm # 创建模型 with pm.Model() as model: # 定义先验分布 alpha = pm.Normal('alpha', mu=0, sd=10) beta = pm.Normal('beta', mu=0, sd=10, shape=X.shape[1]) sigma = pm.HalfNormal('sigma', sd=1) # 定义线性模型 mu = alpha + pm.math.dot(beta, X.T) # 定义似然函数 likelihood = pm.Normal('y', mu=mu, sd=sigma, observed=y) # 执行推断 trace = pm.sample(2000, tune=1000) # 获取后验分布样本 posterior_samples = trace['alpha'] posterior_samples = np.vstack([posterior_samples, trace['beta'].T]) # 预测 with model: post_pred = pm.sample_posterior_predictive(trace, samples=500) ``` 这是一个较为复杂的示例,其中使用了先验分布、似然函数和推断过程。可以根据具体情况进行参数调整和模型改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lee_Yu_Rui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值