吴恩达机器学习作业python实现--多变量线性回归
作者:互联网
多变量线性回归(深度之眼学习笔记)
代价函数
J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2
假设函数
hθ(x)=θTX=θ0x0+θ1x1+θ2x2+...+θnxn
# 同单变量线性回归一样,加一列全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
私信
关注
标签:theta2,吴恩达,函数,python,np,cost,线性,theta,变量 来源: https://blog.csdn.net/weixin_42152944/article/details/104076565