|
机器学习最好的课程还是吴恩达老师的网易云机器学习课程,这个课程在网易云上是免费的,大家可以学习一下。原理讲的比较透彻,老师表述很条理,听起来也很简单。我准备接下来写的内容的主线也是根据该课程的内容来的,
首先,学习一下线性回归。
虽然线性回归在实际应用中比较少,但线性回归理解起来比较容易,可以让我们很轻松的了解机器学习的一些基本的概念,比如假设函数,损失函数,梯度下降等概念。
吴恩达老师的课程推荐用matlab实现作业的编写,因为自己想学习python,所以我选择用python编写老师的作业。
一、线性回归的基本概念
复习一下线性回归的一些基本概念,我这里只列举一下基本概念,详细的内容请参考吴恩达老师的网易云机器学习课程。
1.1 线性回归的假设函数
————————————————
1.2 代价函数1.3 梯度下降代入1.2中的公式,可得 二、用python编写简单线性回归的思路1、加载数据集 2、初始化theta 3、计算成本函数的偏导数 4、迭代 三、简单线性回归的源代码
- 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()
复制代码
|
|