2.机器学习单(多)特征梯度下降函数,成本函数的实现代码
·
本文包含了机器学习中线性回归的几个基本函数的实现,代码中标有明确的注释,可以直接享用,畅通无阻
1.单(多)特征成本函数的计算

# 单特征的成本函数
def singe_computer_cost(x,y,w,b):
m = x.shape[0]
total_cost = 0
for i in range(m):
total_cost += (w * x[i] - y[i])**2
total_cost =total_cost / (2*m)
return total_cost
# 多特征的成本函数
def multiply_computer_cost(x,y,w,b):
m = x.shape[0]
total_cost = 0
for i in range(m):
f_wb_i = np.dot(w,x[i]) + b
total_cost += (f_wb_i - y[i])**2
total_cost =total_cost / (2*m)
return total_cost
2.单(多)特征梯度下降函数的计算


# 单特征梯度下降函数偏导函数
def computer_gradient(x,y,w,b):
m = x.shape[0]
dj_dw = 0
dj_db = 0
for i in range(m):
f_wb = w * x[i] + b
dj_dw += (f_wb - y[i])*x[i]
dj_db += f_wb - y[i]
dj_dw = dj_dw / m
dj_db = dj_db / m
return dj_dw, dj_db
# 多特征梯度下降函数偏导函数
# 变化的只有dj_dw,从值变为了一维向量
# 需要计算每个dj_dw[i]的值,而在计算过程中,err始终是当前i所指数据和实际值之间的误差
def multiply_computer_gradient(x,y,w,b):
m = x.shape[0]
dj_dw = np.zeros(m)
dj_db = 0
for i in range(m):# i指数据,j指某个数据中的具体特征
f_wb = np.dot(x[i],w) + b
err = f_wb - y[i] # err始终是当前i所指数据和实际值之间的误差
for j in range(m):
dj_dw[j] += err * x[i,j] # 这里对应计算每个特征对应的偏导数,x[i,j]表示第i个数据的第j个特征
dj_db += err # dj_db的计算和之前一样
dj_dw = dj_dw / m
dj_db = dj_db / m
return dj_dw, dj_db
3.梯度下降函数w,b的更新记录与输出实现
# 计算梯度下降的更新值,单特征和多特征都是一样,变得只是输入的w的形状
# 由于numpy数组可以同一班算术那样进行计算,所有不管是数组还是值,都可以用w = w - alpha * dj_dw来计算更新的w
# 计算的结果是w数组中的每一项各自的新值
def gradient_descent(alpha,x,y,w_in,b_in,cost_function,gradient_function,num_items):
J_history = []
w_history = []
w = copy.deepcopy(w_in)
b = b_in
for i in range(num_items):
dj_dw, dj_db = gradient_function(x,y,w,b)
w = w - alpha * dj_dw
b = b - alpha * dj_db
J_history.append(cost_function(x,y,w,b))
if i % math.ceil(num_items / 10) == 0:
w_history.append(w)
print(f"Iteration {i:4}: Cost {float(J_history[-1]):8.2f} ")
return w,b,w_history, J_history
更多推荐



所有评论(0)