最近一直在学习机器学习的几个入门模型,在看了吴恩达教授的机器学习部分视频后(在网易云课堂可以免费看所有视频,良心厂商),终于开始动手实现我的第一个机器学习算法,线性回归模型。
废话不多说 贴代码(完整代码在文末) (先贴代码 再讲解结构 可能理解有误 欢迎大家互相纠正学习)
下面代码是数据读取与数据预处理。
path = 'ex1data1.txt' #其实就是路径名称 我是放在同一个文件夹下的 所以直接写名字
data = pd.read_csv(path,names=['populations','profits']) #读取这个csv格式的数据文件
data.insert(0,'Ones',1) #在数据的第0列 插入一列 1
cols = len(data.columns) #将数据中的第0列到第n-1列记为X 最后一列记为 y
x_cols = data.columns[0:cols-1]
y_cols = data.columns[cols-1:cols]
X = data[x_cols] #获取数据集的数据
y = data[y_cols] #获取训练集的结果
X= np.matrix(X.values) #转换成numpy矩阵
y = np.matrix(y.values)
我使用的是吴恩达机器学习里面提到的数据,数据文件和代码文件会挂出来,大家可以直接理解为一个97行 2列的数据 列代表参数数量 populations代表参数1,profits代表这个房子的价格。
这里我们以profits为纵轴,populations为横轴绘制散点图,看看数据的分布。
可以看出,数据的分布是线性相关的,所以我们使用线性函数来进行拟合。
也就是说 共有2列, populations列为影响房子价格的因素,profits列是房屋价格,假设函数为y = k0 + k1x1 + k2x2 +...+knxn,当然我们这里是最简单的单变量,所以假设函数是 y = k0 + k1x
我们最终求的参数theta就是 k0 和 k1
我们这里先插入一列将矩阵构造成如下形式,后面我会讲解##注释1##这一步的意义,插入完后矩阵如下。
alpha = 0.01 #学习率
maxcyles = 1000 #迭代次数
theta = np.matrix(np.array([1,1])) #[[1 1]] 创建一个一行两列的元素均为1的矩阵 实际上代表 系数 k0 + k1
接下来就是重头戏,核心函数的部分了,