python

超轻量级php框架startmvc

Python编程实现线性回归和批量梯度下降法代码实例

更新时间:2020-05-17 03:36:01 作者:startmvc
通过学习斯坦福公开课的线性规划和梯度下降,参考他人代码自己做了测试,写了个类以后

通过学习斯坦福公开课的线性规划和梯度下降,参考他人代码自己做了测试,写了个类以后有时间再去扩展,代码注释以后再加,作业好多:


import numpy as np
import matplotlib.pyplot as plt
import random

class dataMinning:
 datasets = []
 labelsets = []
 
 addressD = '' #Data folder
 addressL = '' #Label folder
 
 npDatasets = np.zeros(1)
 npLabelsets = np.zeros(1)
 
 cost = []
 numIterations = 0
 alpha = 0
 theta = np.ones(2)
 #pCols = 0
 #dRows = 0
 def __init__(self,addressD,addressL,theta,numIterations,alpha,datasets=None):
 if datasets is None:
 self.datasets = []
 else:
 self.datasets = datasets
 self.addressD = addressD
 self.addressL = addressL
 self.theta = theta
 self.numIterations = numIterations
 self.alpha = alpha
 
 def readFrom(self):
 fd = open(self.addressD,'r')
 for line in fd:
 tmp = line[:-1].split()
 self.datasets.append([int(i) for i in tmp])
 fd.close()
 self.npDatasets = np.array(self.datasets)

 fl = open(self.addressL,'r')
 for line in fl:
 tmp = line[:-1].split()
 self.labelsets.append([int(i) for i in tmp])
 fl.close()
 
 tm = []
 for item in self.labelsets:
 tm = tm + item
 self.npLabelsets = np.array(tm)

 def genData(self,numPoints,bias,variance):
 self.genx = np.zeros(shape = (numPoints,2))
 self.geny = np.zeros(shape = numPoints)

 for i in range(0,numPoints):
 self.genx[i][0] = 1
 self.genx[i][1] = i
 self.geny[i] = (i + bias) + random.uniform(0,1) * variance

 def gradientDescent(self):
 xTrans = self.genx.transpose() #
 i = 0
 while i < self.numIterations:
 hypothesis = np.dot(self.genx,self.theta)
 loss = hypothesis - self.geny
 #record the cost
 self.cost.append(np.sum(loss ** 2))
 #calculate the gradient
 gradient = np.dot(xTrans,loss)
 #updata, gradientDescent
 self.theta = self.theta - self.alpha * gradient
 i = i + 1
 
 
 def show(self):
 print 'yes'
 
if __name__ == "__main__":
 c = dataMinning('c:\\city.txt','c:\\st.txt',np.ones(2),100000,0.000005)
 c.genData(100,25,10)
 c.gradientDescent()
 cx = range(len(c.cost))
 plt.figure(1)
 plt.plot(cx,c.cost)
 plt.ylim(0,25000)
 plt.figure(2)
 plt.plot(c.genx[:,1],c.geny,'b.')
 x = np.arange(0,100,0.1)
 y = x * c.theta[1] + c.theta[0]
 plt.plot(x,y)
 plt.margins(0.2)
 plt.show()

图1. 迭代过程中的误差cost

图2. 数据散点图和解直线

总结

以上就是本文关于Python编程实现线性回归和批量梯度下降法代码实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

Python算法输出1-9数组形成的结果为100的所有运算式

python中实现k-means聚类算法详解

Python编程实现粒子群算法(PSO)详解

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

线性回归梯度下降代码 python梯度下降代码 python线性回归代码 线性回归 梯度下降法 线性回归及梯度下降