<>线形回归和梯度下降的Python实例。

<>内容模仿学习于:https://www.cnblogs.com/focusonepoint/p/6394339.html
<https://www.cnblogs.com/focusonepoint/p/6394339.html>

本文只是做为一个自我梳理

线形回归的特点

* 将特征x 和结果 y 分别放入两个不同矩阵
* 多元线形回归的时候添加一个X0=1X_0 = 1X0​=1多元线形回归的时候添加一个X0=1X_0 = 1X0​=1
* 梯度下降 梯度下降
* 预测 h(x)=θTXh(x) = \theta^TXh(x)=θTX 预测 h(x)=θTXh(x) = \theta^TXh(x)=θTX
所以第一步加载矩阵:
数据就搬照链接里面的
data = np.array([[1.1,1.5,2.5], [1.3,1.9,3.2], [1.5,2.3,3.9], [1.7,2.7,4.6],
[1.9,3.1,5.3], [2.1,3.5,6]])
这里面x的值就是前两个,一共有六组训练。例:Y=2.5=1.1θ1+1.5θ2+θ0Y=2.5=1.1θ_1 +1.5\theta_2+\theta_0Y=2
.5=1.1θ1​+1.5θ2​+θ0​
def getData(data): m,n = np.shape(data) trainData = np.ones((m,n))
trainData[:,:-1] = data[:,:-1] #这一步完成将y分离,并且前面添加了一个x0 = 1; trainLabel =
data[:,-1] #赋予其y值; return trainData,trainLabel

X[:,]是numpy中数组的一种写法,表示对一个二维数组,取该二维数组第一维中的所有数据;第二维中取第0个数据,直观来说,X[:,0]就是取所有行的第1个数据,

X[:,1] 就是取所有行的第2个数据;

X[:,:2]代表区所有行的前两个数据;

<>这样就完成了第一步和第二步。

<>第三步梯度下降

θj:=θj−α1m∑i=1m(h(X(i))−y(i))∗x(j)θ_ j:= θ_j -
α\frac{1}{m}\sum_{i=1}^{m}(h(X^{(i)}) - y^{(i)})*x^{(j)}θj​:=θj​−αm1​i=1∑m​(h(X(
i))−y(i))∗x(j)
这是梯度下降的公式 ,此间需要用到的参数有,x,y, θ,学习率α ,训练集数量m,训练次数maxIteration

这里我们都需要为这些变量一个初始值
x,y 就是上面的trainData 和 trainLabel
θ值我们需要初始化,有多少个x值就初始化多少个θ,用矩阵的方式
m 就是m行(m个训练数量)
最大次数自己定
学习率自己取,不要取大
m, n = np.shape(trainData) #print(trainData) theta = np.ones(n) #print(theta)
alpha = 0.05 maxIteration = 9999 def batchGradientDescent(x, y, theta, alpha,
m, maxIterations): xTrains = x.transpose() #将x转置 for i in range(0,
maxIterations): hypothesis = np.dot(x, theta) #计算h(x)的值 #print(hypothesis) loss
= hypothesis - y #计算h(X (i) )−y (i)) #print(loss) gradient = np.dot(xTrains,
loss) / m #用x的转置乘以loss 就是等式最后和x(j)相乘 theta = theta - alpha * gradient #得到θ
return theta
<>于是完成了第三步

最后一步,预测h(x)的值,其实就是h(x)=θ0X0+θ1X1+θ3X3+θ4X4........+θnXn h(x) =
θ_0X_0+θ_1X_1+θ_3X_3+θ_4X_4........+θ_nX_nh(x)=θ0​X0​+θ1​X1​+θ3​X3​+θ4​X4​......
..+θn​Xn​
θ与X的矩阵相乘
def predict(x, theta): yPre = np.dot(x, theta) return yPre
<>ok 大功告成

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信