Machine learning 普通python中的简单线性回归 我刚刚开始学习机器学习,是通过安得烈NG从Coursera学习机器学习。< /强>,我试着在不使用任何ML库的情况下在纯Python中实现简单的线性回归。这段代码最终失败了。成本函数随着循环的迭代而增加,并达到非常高的值。我做错了什么 def cost_功能(列组,θ0,θ1): 总误差=0 对于范围内的i(len(列车组)): x=列车组[i][0] y=列车组[i][1] 总误差+=(θ0+θ1*x)-y)**2 返回总错误/2*len(列车组) def梯度下降(列车设置、学习率、θ0、θ1): θ0\u der,θ1\u der=0,0 对于范围内的i(len(列车组)): x=列车组[i][0] y=列车组[i][1] θ0_der+=((θ0+θ1*x)-y) θ1_der+=((θ0+θ1*x)-y)*x 新θ0=θ0-(1/列(列车组)*学习率*θ0顺序) 新θ1=θ1-(1/列(列车组)*学习速率*θ1顺序) 返回新的\u theta0,新的\u theta1 def main(): θ0,θ1=0,0 学习率=0.001 迭代次数=100 x_train=data_frame.iloc[:,0] y_train=data_frame.iloc[:,1] 列车组=列表(zip(x列车,y列车))[:280]#[(1,2.444),(2,3.555),(3,6.444)…] 打印('初始成本:'+str(成本函数(序列集,θ0,θ1))) 对于范围内的i(迭代): x=列车组[i][0] y=列车组[i][1] 新θ0,新θ1=梯度下降(训练集,学习速率,θ0,θ1) θ0=新θ0 θ1=新θ1 打印([theta0,theta1]) 打印('最终成本:'+str(成本函数(序列集,θ0,θ1))) main()

Machine learning 普通python中的简单线性回归 我刚刚开始学习机器学习,是通过安得烈NG从Coursera学习机器学习。< /强>,我试着在不使用任何ML库的情况下在纯Python中实现简单的线性回归。这段代码最终失败了。成本函数随着循环的迭代而增加,并达到非常高的值。我做错了什么 def cost_功能(列组,θ0,θ1): 总误差=0 对于范围内的i(len(列车组)): x=列车组[i][0] y=列车组[i][1] 总误差+=(θ0+θ1*x)-y)**2 返回总错误/2*len(列车组) def梯度下降(列车设置、学习率、θ0、θ1): θ0\u der,θ1\u der=0,0 对于范围内的i(len(列车组)): x=列车组[i][0] y=列车组[i][1] θ0_der+=((θ0+θ1*x)-y) θ1_der+=((θ0+θ1*x)-y)*x 新θ0=θ0-(1/列(列车组)*学习率*θ0顺序) 新θ1=θ1-(1/列(列车组)*学习速率*θ1顺序) 返回新的\u theta0,新的\u theta1 def main(): θ0,θ1=0,0 学习率=0.001 迭代次数=100 x_train=data_frame.iloc[:,0] y_train=data_frame.iloc[:,1] 列车组=列表(zip(x列车,y列车))[:280]#[(1,2.444),(2,3.555),(3,6.444)…] 打印('初始成本:'+str(成本函数(序列集,θ0,θ1))) 对于范围内的i(迭代): x=列车组[i][0] y=列车组[i][1] 新θ0,新θ1=梯度下降(训练集,学习速率,θ0,θ1) θ0=新θ0 θ1=新θ1 打印([theta0,theta1]) 打印('最终成本:'+str(成本函数(序列集,θ0,θ1))) main(),machine-learning,linear-regression,gradient-descent,Machine Learning,Linear Regression,Gradient Descent,您将学习率设置得太高,请尝试将其更改为0.0001 但是,, 您可以使用其封闭式方程直接实现简单线性回归,该方程为: 用python实现这一点非常简单,您可以这样做:- class LinearRegression: def fit(self, X, y): ones = np.ones(len(X)).reshape(-1, 1) X = np.concatenate((ones, X), axis=1) B = np.matmul

您将学习率设置得太高,请尝试将其更改为
0.0001


但是,, 您可以使用其封闭式方程直接实现简单线性回归,该方程为:

用python实现这一点非常简单,您可以这样做:-

class LinearRegression:
    def fit(self, X, y):
        ones = np.ones(len(X)).reshape(-1, 1)
        X = np.concatenate((ones, X), axis=1)

        B = np.matmul(np.linalg.pinv(np.matmul(X.T, X)), np.matmul(X.T, y))

        self.slope = B[1:]
        self.intercept = B[0]

    def predict(self, X):
        self.predicted = np.dot(X, self.slope) + self.intercept
        return self.predicted
拟合函数是在谈论
X
y
值并计算Beta(通过上面使用NumPy的公式)。Beta是一个矩阵,其中第一个索引值为截距,其余为斜率


预测函数获取2D数组,然后计算预测

是的,你是对的。学习率的价值很小。为了得到新的精确结果,我不得不将其设置为
0.00001