-
12345
查看全部 -
那么总的来说梯度下降是为了优化线性回归运行代码的运算性能和简洁化来实现的,那线性回归的最终效果对于算法,机器学习,甚至是人工智能会起到怎样的作用?
线性回归在算法和机器学习里所占比重是多少?还是说线性回归是机器学习不可或缺的一个算法?为了提高严谨性么?
查看全部 -
dfjdifjdifjidjif
查看全部 -
线性回归的数学表示:
查看全部 -
y=kx 线性回归,通过训练得到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对seta求偏导: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)
所以当seta = (x^T*x)^-1*(x^T*y)时L最小
查看全部 -
import numpy as np
from numpy.linalg import inv——(矩阵的逆)
from numpy import dot——(矩阵的点成)
from numpy import mat——(矩阵)
A=np.mat([1,1])——(1x2 的矩阵)
print('A:\n',A)
#A=np.array([1,1])——(数组)
B=mat([1:2],[3:4])——(2x2的)
print('B:\n',B)
print(''A.B:',dot(A,B))——结果是错的,因为1*2和2*2矩阵是不能想乘的
那么就需要给A矩阵转置:print('A.T:\n',A.T)
还有对矩阵B求逆:print('B的逆:\n',inv(B))
print(B[0,:1])——表示取出0行一列
print(B[:,0])——表示取出的是所有行第一列,就是第一列
print(A.reshape(2,1))——就是重新改变A矩阵的大小的,变成2*1的了;它不仅可以像转置一样还可以将3*2的变成1*6的,这是转置办不到的!
以上矩阵的基本操作:
接下来是线性回归的计算:
imort numpy as np
from numpy.linalg import inv
from numpy import dot
from numpy import mat
#计算y=2x
x=mat([1,2,3]).reshape([3,1])
y=2*x
#再计算theta=(x'x)^-1x'y
theta=dot(dot(inv(dot(x.T,x)),x.T),y)
print(theta)
接下来是梯度下降的算法:
(就是根据Y与X的关系不断的进行迭代计算)
#theta=theta-alpha*(theta*X-Y)*X——alpha在(0,1)之间取值,保证下降的梯度不会太快,是函数迅速收敛,是很重的学习内容
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()可以进行加权平均,因为X是3组数,而结果theta就是一个数,所以加权平均一下,结尾出“/3.”是除以其组数
(梯度下降是逐步逼近那个值的)
接下来完成一个复杂的线性回归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()
】
查看全部 -
梯度下降方法(第二种代码)可以很好地解决向量方法(第一种)面对大量计算无法计算的弊端
而梯度下降更重要的是进行同步更新
所以需要一个temp来进行缓存
注意矩阵的形式可能需要变形——
reshape( )(如果出错,改成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)
查看全部
举报