-
12345
查看全部 -
那么總的來說梯度下降是為了優(yōu)化線性回歸運(yùn)行代碼的運(yùn)算性能和簡(jiǎn)潔化來實(shí)現(xiàn)的,那線性回歸的最終效果對(duì)于算法,機(jī)器學(xué)習(xí),甚至是人工智能會(huì)起到怎樣的作用?
線性回歸在算法和機(jī)器學(xué)習(xí)里所占比重是多少?還是說線性回歸是機(jī)器學(xué)習(xí)不可或缺的一個(gè)算法?為了提高嚴(yán)謹(jǐn)性么?
查看全部 -
dfjdifjdifjidjif
查看全部 -
線性回歸的數(shù)學(xué)表示:
查看全部 -
y=kx 線性回歸,通過訓(xùn)練得到k的過程,就稱為線性分析查看全部
-
最小二乘法模型
A=(seta*x-y) (A為一維列向量)
L=1/2*A^2 = (seta*x-y)^T (seta*x-y)=x^T*seta^T*seta*x-x^T*setaT*y-y^T*seta*x+y^T*y
L對(duì)seta求偏導(dǎo):1/2*{x^T*x*[seta+(seta^T)^T] - x^T*y - (y^T*x)^T}=1/2[2*x^T*x*seta - 2*x^T*y] =?x^T*x*seta - x^T*y
令L'=0有seta = (x^T*x)^-1*(x^T*y)
所以當(dāng)seta = (x^T*x)^-1*(x^T*y)時(shí)L最小
查看全部 -
import numpy as np
from numpy.linalg import inv——(矩陣的逆)
from numpy import dot——(矩陣的點(diǎn)成)
from numpy import mat——(矩陣)
A=np.mat([1,1])——(1x2 的矩陣)
print('A:\n',A)
#A=np.array([1,1])——(數(shù)組)
B=mat([1:2],[3:4])——(2x2的)
print('B:\n',B)
print(''A.B:',dot(A,B))——結(jié)果是錯(cuò)的,因?yàn)?*2和2*2矩陣是不能想乘的
那么就需要給A矩陣轉(zhuǎn)置:print('A.T:\n',A.T)
還有對(duì)矩陣B求逆:print('B的逆:\n',inv(B))
print(B[0,:1])——表示取出0行一列
print(B[:,0])——表示取出的是所有行第一列,就是第一列
print(A.reshape(2,1))——就是重新改變A矩陣的大小的,變成2*1的了;它不僅可以像轉(zhuǎn)置一樣還可以將3*2的變成1*6的,這是轉(zhuǎn)置辦不到的!
以上矩陣的基本操作:
接下來是線性回歸的計(jì)算:
imort numpy as np
from numpy.linalg import inv
from numpy import dot
from numpy import mat
#計(jì)算y=2x
x=mat([1,2,3]).reshape([3,1])
y=2*x
#再計(jì)算theta=(x'x)^-1x'y
theta=dot(dot(inv(dot(x.T,x)),x.T),y)
print(theta)
接下來是梯度下降的算法:
(就是根據(jù)Y與X的關(guān)系不斷的進(jìn)行迭代計(jì)算)
#theta=theta-alpha*(theta*X-Y)*X——alpha在(0,1)之間取值,保證下降的梯度不會(huì)太快,是函數(shù)迅速收斂,是很重的學(xué)習(xí)內(nèi)容
theta=1.
alpha=0.1
for i in range(100):
????theta=theta+np.sum(alpha*(Y-dot(X,theta))*X.reshape(1,3))/3.——bp.sum()可以進(jìn)行加權(quán)平均,因?yàn)閄是3組數(shù),而結(jié)果theta就是一個(gè)數(shù),所以加權(quán)平均一下,結(jié)尾出“/3.”是除以其組數(shù)
(梯度下降是逐步逼近那個(gè)值的)
接下來完成一個(gè)復(fù)雜的線性回歸l:
【
import random
def Y(X1, X2, X3):
?return 0.65 * X1 + 0.70 * X2 - 0.55 * X3 + 1.95
def Produce():
?filename = 'data.csv'
?with open(filename, 'w') as file:
? file.write('Unnamed: 0,Y,X1,X2,X3\n')
? for i in range(150):
? ?random.seed()
? ?x1 = random.random() * 10
? ?x2 = random.random() * 10
? ?x3 = random.random() * 10
? ?y = Y(x1, x2, x3)
? ?try:
? ? file.write(str(i)+','+ str(y)+ ',' +str(x1) + ',' + str(x2) + ',' + str(x3)? + '\n')
? ?except Exception as e:
? ? print ('Write Error')
? ? print (str(e))
Produce()
】
查看全部 -
梯度下降方法(第二種代碼)可以很好地解決向量方法(第一種)面對(duì)大量計(jì)算無法計(jì)算的弊端
而梯度下降更重要的是進(jìn)行同步更新
所以需要一個(gè)temp來進(jìn)行緩存
注意矩陣的形式可能需要變形——
????????????????????????reshape( )(如果出錯(cuò),改成values.reshape( ))
查看全部 -
>>> import numpy as np
>>> from numpy.linalg import inv
>>> from numpy import dot
>>> from numpy import mat
>>> import pandas as pd
>>> dataset=pd.read_csv('data.csv')
>>> print(dataset)
查看全部
舉報(bào)