python机器学习课程01-单变量线性回归用python实现

0
回复
4837
查看
[复制链接]

53

主题

8

回帖

836

积分

管理员

积分
836
来源: 2019-11-24 14:21:01 显示全部楼层 |阅读模式
机器学习最好的课程还是吴恩达老师的网易云机器学习课程,这个课程在网易云上是免费的,大家可以学习一下。原理讲的比较透彻,老师表述很条理,听起来也很简单。我准备接下来写的内容的主线也是根据该课程的内容来的,

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

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

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

一、线性回归的基本概念      

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

1.1 线性回归的假设函数
————————————————


1.2 代价函数1.3 梯度下降

代入1.2中的公式,可得

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

1、加载数据集

2、初始化theta

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

4、迭代

三、简单线性回归的源代码
  1. from numpy import mat, shape, ones, random,zeros
  2. import matplotlib.pyplot as plt

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

  11.     return dataMat, labelMat

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

  25. #main 函数
  26. if __name__ == '__main__':
  27.    
  28.     exciseDataPath = "/Users/hufan/Desktop/ex1data1.txt"
  29.     X, y = loadDataSet(exciseDataPath)
  30.     x = mat(X)[:,1]
  31.     y = mat(y).reshape(-1,1)
  32.     theta = gradDescent(X,y)
  33.    
  34.     slope = float(theta[1,0])
  35.     print(slope)
  36.     intercept = float(theta[0,0])
  37.     print(intercept)

  38.     xx = np.arange(1,40,1)
  39.     yy = intercept + slope * xx
  40.     plt.plot(x,y,'.')
  41.     plt.plot(xx,yy,'--')
  42.     plt.xlim(0,40)
  43.     plt.ylim(-10,40)
  44.     plt.show()
复制代码




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册
关注微信