您的位置:首页 > 编程语言 > Python开发

从零开始用Python学习MachineLearning(1)-单变量线性回归用python实现

2018-12-10 00:28 260 查看

       机器学习最好的课程还是吴恩达老师的网易云机器学习课程,这个课程在网易云上是免费的,大家可以学习一下。原理讲的比较透彻,老师表述很条理,听起来也很简单。我准备接下来写的内容的主线也是根据该课程的内容来的,

      首先,学习一下线性回归。

      虽然线性回归在实际应用中比较少,但线性回归理解起来比较容易,可以让我们很轻松的了解机器学习的一些基本的概念,比如假设函数,损失函数,梯度下降等概念。

       吴恩达老师的课程推荐用matlab实现作业的编写,因为自己想学习python,所以我选择用python编写老师的作业。

一、线性回归的基本概念       

复习一下线性回归的一些基本概念,我这里只列举一下基本概念,详细的内容请参考吴恩达老师的网易云机器学习课程。

1.1 线性回归的假设函数

1.2 代价函数


1.3 梯度下降

代入1.2中的公式,可得

二、用python编写简单线性回归的思路

1、加载数据集

2、初始化theta

3、计算成本函数的偏导数

4、迭代

三、简单线性回归的源代码

[code]from numpy import mat, shape, ones, random,zeros
import matplotlib.pyplot as plt

def loadDataSet(filePath):
dataMat = []
labelMat = [] #分别定义一个数据集list和标签list
fr = open(filePath) #打开文件输入流
for line in fr.readlines(): #处理输入数据
lineArr = line.strip().split(',') #按照空格分割每一行数据集 (x1 x2 x3 ...xn y)
dataMat.append([1.0, float(lineArr[0])])
labelMat.append(float(lineArr[1])) #数据集中的真实值 y 这里需要根据自己的数据集进行修改索引位置

return dataMat, labelMat

def gradDescent(X, y):

X_Matrix = mat(X) # 将读取完的数据集X转化成 矩阵X
y_Matrix = mat(y) #转置 y
m,n  = shape(X_Matrix) #m是数据集行数,n是特征的数量
alpha = 0.01 #学习速率
iterations = 1500 #最大迭代次数
theta = zeros((n, 1)) #初始化特征参数 theta的值
for k in range(iterations):
error = X_Matrix * theta - y_Matrix # h(x) - y的值
theta = theta - alpha * X_Matrix.transpose() * error/m # w =: w - a(h - y)x/m
#     print(error)
return theta

#main 函数
if __name__ == '__main__':

exciseDataPath = "/Users/hufan/Desktop/ex1data1.txt"
X, y = loadDataSet(exciseDataPath)
x = mat(X)[:,1]
y = mat(y).reshape(-1,1)
theta = gradDescent(X,y)

slope = float(theta[1,0])
print(slope)
intercept = float(theta[0,0])
print(intercept)

xx = np.arange(1,40,1)
yy = intercept + slope * xx
plt.plot(x,y,'.')
plt.plot(xx,yy,'--')
plt.xlim(0,40)
plt.ylim(-10,40)
plt.show()

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: