python实现表格线性回归_Python实现线性回归

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值