从零开始学习在Python中为任意数量的变量开发多元线性回归。线性回归可能是最简单的机器学习算法。它非常适合初学者,因为它使用了一个简单的公式。因此,它有利于学习机器学习概念。在本文中,我将尝试逐步解释多元线性回归。概念和公式线性回归使用我们在学校都学过的简单公式:Y=C+AX提醒一下,Y是输出或因变量,X是输入或自变量,A是斜率,C是拦截。对于线性回归,对于相同的公式,我们遵循以下符号:如果我们有多个自变量,则线性回归的公式如下:这里,'h'称为假设。这是预测的输出变量。Theta0是偏置项,其他所有的theta值都是系数。它们首先随机开始,然后使用算法进行优化,以便该公式能够准确预测因变量。CostFunctionandGradientDescent当theta值从一开始就被初始化时,公式没有被训练来预测因变量。这个假设与原始输出变量“Y”相去甚远。这是用于估计所有训练数据的累积距离的公式:这称为成本函数。如果您注意到,它会从假设(预测输出)中减去y(原始输出),平方以去除负数,求和并除以2乘以m。这里,m是训练数据的数量。您可能会将成本函数视为原始输出与预测输出之间差异的指示。机器学习算法的思想是最小化一个成本函数,使得原始输出和预测输出之间的差异更小。为此,我们需要优化theta值。这就是我们更新theta值的方式。我们对每个theta值取成本函数的偏导数,然后从现有的theta值中减去该值,其中alpha是学习率,它是一个常数。我没有为所有theta值显示相同的公式。但这是所有theta值的相同公式。经过微分后,公式为:这叫做梯度下降。算法的逐步实现我将要使用的数据集来自AndreNg的Coursera机器学习课程。我将在本页底部提供一个链接。请随意下载数据集并使用本教程进行练习。我鼓励您在阅读数据集时进行练习(如果这对您来说是新的)。这是了解它的唯一方法。在这个数据集中,只有两个变量。但是我开发了适用于任意数量变量的算法。如果您对10个变量或20个变量使用相同的算法,那么它也应该有效。我将在Python中使用Numpy和Pandas库。所有这些丰富的Python库都让机器学习算法变得更容易。导入包和数据集:importpandasaspdimportnumpyasnpdf=pd.read_csv('ex1data2.txt',header=None)df.head()(1)给partialterm加一列。选择1是因为如果您将一个值乘以任何值,该值不会改变。df=pd.concat([pd.Series(1,index=df.index,name='00'),df],axis=1)df.head()(2)定义输入变量或自变量X并输出变量或因变量y。在此数据集中,第0列和第1列是输入变量,第2列是输出变量。X=df.drop(columns=2)y=df.iloc[:,3](3)通过将每列除以该列的最大值来规范化输入变量。这样,每列的值都在0到1之间。这一步不是必需的。但是这样会让算法更快的达到最优状态。此外,如果您注意到数据集,第0列的元素与第1列的元素相比太大。如果您规范化数据集,则可以防止第一列支配算法。foriinrange(1,len(X.columns)):X[i-1]=X[i-1]/np.max(X[i-1])X.head()(4)初始化theta值。我将它们初始化为零。但任何其他数字都可以。theta=np.array([0]*len(X.columns))#Output:array([0,0,0])(5)计算上式中m表示的训练数据个数:m=len(df)(6)定义假设函数defhypothesis(theta,X):returntheta*X(7)定义代价函数defcomputeCost(X,y,theta)利用上面代价函数的公式:y1=hypothesis(theta,X)y1=np.sum(y1,axis=1)returnsum(np.sqrt((y1-y)**2))/(2*47)(8)写出梯度下降函数。此函数将作为输入X、y、theta、学习率(公式中的alpha)和时期(或迭代)。我们需要不断更新theta值,直到成本函数达到其最小值。defgradientDescent(X,y,theta,alpha,i):J=[]#costfunctionineachiterationsk=0whilek
