吴恩达机器学习作业python实现--多变量线性回归
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了吴恩达机器学习作业python实现--多变量线性回归,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2943字,纯文字阅读大概需要5分钟。
内容图文
![吴恩达机器学习作业python实现--多变量线性回归](/upload/InfoBanner/zyjiaocheng/645/91a6a6b78ae7489582b3b3faf09a399a.jpg)
多变量线性回归(深度之眼学习笔记)
代价函数
J(θ)=2m1?i=1∑m?(hθ?(x(i))?y(i))2
假设函数
hθ?(x)=θTX=θ0?x0?+θ1?x1?+θ2?x2?+...+θn?xn?
# 同单变量线性回归一样,加一列全1,为了和theta0求积,否则无法对应起来
data2 = data2_0
data2.insert(0, 'Ones', 1)# insert第一个参数是插入的列的位置,第二个参数是列名,第三个参数是value
# 特征变量和目标变量的个数获取
cols = data2.shape[1] #获取列数,及有多少个变量,包含特征变量和预测变量
X2_0 = data2.iloc[:,0:cols-1] #取前面所有列
y2_0 = data2.iloc[:,cols-1:cols] #取最后一列,减1的原因是索引是从0排起来的
# theta初始化,并将数据矩阵化
X2 = np.matrix(X2_0.values) #直接写np.mat(x2_0)也是阔以滴
y2 = np.matrix(y2_0.values)
theta2 = np.matrix(np.array([0,0,0])) #直接写np.mat([2,2,2])也是一样滴
#为了多变量适用,不用每次数着特征变量来写,theta初始化的赋值可以写成
#其中-1是代表只要该矩阵前面是一行就行,列随总数除以行数来算,如果有强迫症不喜欢浮点型,此处astype可以变成整型
theta2 = np.mat(np.zeros(cols-1)).reshape(1,-1).astype(int)
'''
此例中的theta应该为3个值,第一个就是常数项,第二、三个为后面两个自变量的权重,
因此可以写成
h(theta) = theta0*x1 + theta1*x2 + theta2*x3 其中x1=1
那么同单变量线性回归一样,我们需要先去计算代价函数cost
为啥要算代价函数呢,因为要根据代价函数利用梯度下降算法算局部最优解的theta数组,
下面先实现cost函数的计算
'''
#cost函数
def computeCost(X, y, theta):
# 返回代价函数
tmp = np.power((X*theta.T -y),2)
return np.sum(tmp)/(2*len(X))
'''
为啥这么算呢,因为代价函数的矩阵化公式就是特征量矩阵 叉乘 theta向量的转置 再减去 目标向量 ,将其中每个元素求和再求均值即可
那下面再次写一遍梯度下降算法
'''
#梯度下降
def gradientDescent(X,y,theta,alpha,iters):
theta_cn = theta.shape[1] #不用len()是因为theta2是矩阵,返回的是1
N = len(X) #样本容量
cost = np.zeros(iters) #用来存每次迭代后计算的代价函数
temp = np.mat(np.zeros(theta.shape)) #用来传临时theta2,后面做递归用
for i in range(iters):
error = (X*theta.T-y)
for j in range(theta_cn):
term = np.multiply(error,X[:,j])
temp[0,j] = theta[0,j] -(alpha/len(X)*np.sum(term))
# 把temp的两个值其实也就是theta0、theta1传给theta,再计算第i次迭代出来的代价函数的值
theta = temp
cost[i] = computeCost(X, y, theta)
return theta, cost
alpha = 0.01
iters = 1000
# 导出theta数组和cost数组
g2, cost2 = gradientDescent(X2, y2, theta2, alpha, iters)
# 计算模型最后一次迭代的代价函数值
computeCost(X2, y2, g2)
#观看cost函数下降趋势
fig, ax = plt.subplots(figsize=(12,8))
ax.plot(np.arange(iters), cost2, 'r')
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')
plt.show()
啥都不会可咋整
发布了2 篇原创文章 · 获赞 2 · 访问量 127
私信
关注
内容总结
以上是互联网集市为您收集整理的吴恩达机器学习作业python实现--多变量线性回归全部内容,希望文章能够帮你解决吴恩达机器学习作业python实现--多变量线性回归所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。