线性回归的改进版本中的多项式回归。如果您知道线性回归,那么对您来说很简单。如果没有,我将在本文中解释这些公式。
线性回归的改善版别中的多项式回归。假如您知道线性回归,那么对您来说很简略。假如没有,我将在本文中解说这些公式。还有其他先进且更有用的机器学习算法。可是,学习依据线性的回归技能是一个好主意。因为它们简略,快速而且能够运用众所周知的公式。虽然它或许不适用于杂乱的数据集。
多项式回归公式
仅当输入变量和输出变量之间存在线性相关性时,线性回归才干很好地履行。如前所述,多项式回归建立在线性回归的根底上。假如您需求线性回归的根底知识,请拜访线性回归:
Python中的线性回归算法
学习线性回归的概念并从头开端在Python中开发完好的线性回归算法
多项式回归能够更好地找到输入要素与输出变量之间的联系,即便该联系不是线性的。它运用与线性回归相同的公式:
Y = BX + C
我敢肯定,咱们都在校园学过这个公式。关于线性回归,咱们运用如下符号:
在这儿,咱们从数据会集取得X和Y。X是输入要素,Y是输出变量。Theta值是随机初始化的。
关于多项式回归,公式如下所示:
咱们在这儿增加更多术语。咱们运用相同的输入功用,并选用不同的指数以制造更多功用。这样,咱们的算法将能够更好地了解数据。
幂不用为2、3或4。它们也可认为1 / 2、1 / 3或1/4。然后,公式将如下所示:
本钱函数和梯度下降
本钱函数给出了猜测假定与值之间的间隔的概念。公式为:
这个方程或许看起来很杂乱。它正在做一个简略的核算。首要,从原始输出变量中减去假定。取平方消除负值。然后将该值除以练习示例数量的2倍。
什么是梯度下降?它有助于微调咱们随机初始化的theta值。我不打算在这儿进行微积分。假如对每个θ取本钱函数的偏微分,则能够得出以下公式:
在这儿,alpha是学习率。您挑选alpha的值。
多项式回归的Python完成
这是多项式回归的逐渐完成。
(1) 在此示例中,咱们将运用一个简略的虚拟数据集,该数据集供给职位的薪水数据。导入数据集:
- importpandasaspd
- importnumpyasnp
- df=pd.read_csv('position_salaries.csv')
- df.head()
(2) 增加theta 0的误差列。该误差列将仅包括1。因为假如将1乘以数字,则它不会改动。
- df=pd.concat([pd.Series(1,index=df.index,name='00'),df],axis=1)
- df.head()
(3) 删去"方位"列。因为"方位"列中包括字符串,而且算法无法了解字符串。咱们有"等级"列来代表职位。
- dfdf=df.drop(columns='Position')
(4) 界说咱们的输入变量X和输出变量y。在此示例中,"等级"是输入功用,而"薪水"是输出变量。咱们要猜测各个等级的薪水。
- y=df['Salary']X=df.drop(columns='Salary')
- X.head()
(5) 以"等级"列的指数为根底,创立"等级1"和"等级2"列。
- X['Level1']=X['Level']**2
- X['Level2']=X['Level']**3
- X.head()
(6) 现在,标准化数据。用每一列除以该列的最大值。这样,咱们将取得每列的值,规模从0到1。即便没有规范化,该算法也应该起作用。但这有助于收敛更快。相同,核算m的值,它是数据集的长度。
- m=len(X)
- XX=X/X.max()
(7) 界说假定函数。这将运用X和theta来猜测" y"。
- defhypothesis(X,theta):
- y1=theta*X
- returnnp.sum(y1,axis=1)
(8) 运用上面的本钱函数公式界说本钱函数:
- defcost(X,y,theta):
- y1=hypothesis(X,theta)
- returnsum(np.sqrt((y1-y)**2))/(2*m)
(9) 编写梯度下降函数。咱们将不断更新theta值,直到找到最佳本钱。关于每次迭代,咱们将核算本钱以供将来剖析。
- defgradientDescent(X,y,theta,alpha,epoch):
- J=[]
- k=0
- whilek<epoch:
- y1=hypothesis(X,theta)
- forcinrange(0,len(X.columns)):
- theta[c]=theta[c]-alpha*sum((y1-y)*X.iloc[:,c])/m
- j=cost(X,y,theta)
- J.append(j)
- k+=1
- returnJ,theta
(10) 界说了一切功用。现在,初始化theta。我正在初始化零数组。您能够选用任何其他随机值。我挑选alpha为0.05,我将迭代700个纪元的theta值。
- theta=np.array([0.0]*len(X.columns))
- J,theta=gradientDescent(X,y,theta,0.05,700)
(11) 咱们还取得了终究的theta值以及每次迭代的本钱。让咱们运用终究theta查找薪水猜测。
0
- df=pd.concat([pd.Series(1,index=df.index,name='00'),df],axis=1)
- df.head()
(12) 现在依据水平制作原始薪水和咱们的预期薪水。
1
- df=pd.concat([pd.Series(1,index=df.index,name='00'),df],axis=1)
- df.head()
咱们的猜测并不完全符合薪资趋势,但挨近。线性回归只能回来一条直线。可是在多项式回归中,咱们能够得到这样的曲线。假如该线不是一条好曲线,则多项式回归也能够学习一些更杂乱的趋势。
(13) 让咱们制作咱们在梯度下降函数中每个时期核算的本钱。
2
- df=pd.concat([pd.Series(1,index=df.index,name='00'),df],axis=1)
- df.head()
本钱从一开端就急剧下降,然后下降缓慢。在一个好的机器学习算法中,本钱应该一向下降直到收敛。请随意测验不同的时期和不同的学习率(alpha)。
- 这是数据集:salary_data https://github.com/rashida048/Machine-Learning-With-Python/blob/master/position_salaries.csv
- 请点击以下链接获取完好的作业代码:多项式回归 https://github.com/rashida048/Machine-Learning-With-Python/blob/master/polynomial%20regression.ipynb
知优网 » 免费Python机器学习课程三:多项式回归(多项式回归 python)