吴恩达ex1_2多变量线性回归

一、参考链接

(1)https://blog.csdn.net/weixin_44027820/article/details/104535408

二、源码

import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt
#from mpl_toolkits.mplot3d import Axes3D
path =  'ex1data2.txt'
data = pd.read_csv(path, names=['Size', 'Bedrooms', 'Price'])
m = len(data)
size = data['Size']
bedrooms = data['Bedrooms']
price = data['Price']

#初始数据展示
fig = plt.figure(figsize=(6,12),dpi=80)
fig.get_size_inches()
ax = fig.add_subplot(111, projection='3d')  # 创建一个三维的绘图工程
ax.set_title('data')  # 设置本图名称
ax.scatter(size, bedrooms, price, c = 'b',marker='x')   # 绘制数据点 c:颜色

ax.set_xlabel('Size')  # 设置x坐标轴
ax.set_ylabel('Bedrooms')  # 设置y坐标轴
ax.set_zlabel('Price')  # 设置z坐标轴
plt.show()

 # 特征归一化
x1 = np.array(size).reshape(-1, 1)
x2 = np.array(bedrooms).reshape(-1, 1)
y = np.array(price).reshape(-1, 1)
data = np.concatenate((x1, x2, y), axis=1)  # 放在一个ndarray中便于归一化处理

mean = np.mean(data, axis=0)  # 计算每一列的均值
ptp = np.ptp(data, axis=0)  # 计算每一列的最大最小差值
nor_data = (data - mean) / ptp  # 归一化
X = np.insert(nor_data[..., :2], 0, 1, axis=1)  # 添加x0=1
y = nor_data[..., -1]

# 计算代价函数J(θ)
def cost_function(X, y, theta):
    diff = X.dot(theta.T) - y
    return sum(np.power(diff, 2))/(2*m)
 
# 求偏导
def gradient_function(X, y, theta):
    diff = X.dot(theta.T) - y
    return diff.dot(X)/m
 
# 梯度下降
def gradient_descent(X, y, alpha,epoch):
    theta = np.array((m,1,1)) 
    gradient = gradient_function(X, y, theta)
    cost = np.zeros(epoch) 
  #  while not all (abs(gradient) <= 1e-5):修改版,使J(θ)可视化
    for i in range(epoch):
        theta = theta - alpha * gradient
        gradient = gradient_function(X, y, theta)
        cost[i] = cost_function(X, y, theta)

    return theta,cost

alpha = 0.01
epoch=4000
 
optimal_theta,cost = gradient_descent(X, y, alpha,epoch)
print('optimal_theta:', optimal_theta)     
 
fig, ax = plt.subplots(figsize=(12,8))
ax.plot(np.arange(epoch), cost, 'r')  # np.arange()返回等差数组
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')
plt.show()
 

结果

在这里插入图片描述
optimal_theta: [1.24671178e-16 7.47082078e-01 2.82288368e-01]
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值