练习1:线性回归

一.实现简单的示例函数

在该部分练习中,将通过代码实现返回一个5*5的对角矩阵。输出与如下相同:

1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1

1.1解决方案及结果

在这里插入图片描述

二.单变量线性回归

在该部分练习中,将实现单变量线性回归并用来预测餐车的利润。

假设你是一家餐厅的领导,正在考虑在不同的城市开设新的分店。该连锁店已经在不同的城市有了餐车,并且你能够获得每个城市的人口和利润数据。

现在需要使用这些数据来帮助你选择下一个被扩展的城市。

文件ex1data1.txt包含线性回归问题的数据集。第一列数据对应城市人口,第二列数据对应那座城市的餐车的利润。利润为负时表示亏损。

2.1绘制数据

在这里插入图片描述
在这里插入图片描述

data.plot(kind='scatter', x='Population', y='Profit',c='red', figsize=(12,8))

结果展示:
在这里插入图片描述

2.2梯度下降

在该部分中,将使用梯度下降来选择合适的线性回归参数θ用以拟合给定数据集。

2.2.1 更新公式

在这里插入图片描述

2.2.2 实现

接下来,我们在数据中添加了一个维度来拟合截距项 𝜃0
。并将初始参数值设为0,学习率 𝛼 设为0.01。
在这里插入图片描述

2.2.3 计算成本J(θ)

在执行梯度下降最小化成本函数 𝐽(𝜃) 时,通过计算成本来监视收敛状态是有帮助的。在该部分练习任务中,你需要实现一个计算成本 𝐽(𝜃)的函数computeCost,用于检查梯度下降实现的收敛性。其中,X和y不是标量值,而是矩阵,其行代表训练集中的示例。

要点:完成该函数后,将 𝜃值初始化为0并进行成本的计算,将得到的成本值打印出来。如果结果为32.07,则计算通过。

def computeCost(X, y, theta):
    inner = np.power(((X * theta.T) - y), 2)
    return np.sum(inner) / (2 * len(X))

theta = np.matrix(np.array([0,0]))
computeCost(X, y, theta)

结果:
在这里插入图片描述

2.2.4 梯度下降

在这里插入图片描述
在这里插入图片描述

def gradientDescent(X, y, theta, alpha, iters):
    temp = np.matrix(np.zeros(theta.shape))
    parameters = int(theta.ravel().shape[1])
    cost = np.zeros(iters)
    
    for i in range(iters):
        error = (X * theta.T) - y
        
        for j in range(parameters):
            term = np.multiply(error, X[:,j])
            temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))
            
        theta = temp
        cost[i] = computeCost(X, y, theta)
        
    return theta, cost

g, cost = gradientDescent(X, y, theta, alpha, iterations)
g
computeCost(X, y, g)
x = np.linspace(data.Population.min(), data.Population.max(), 100)
f = g[0, 0] + (g[0, 1] * x)

fig, ax = plt.subplots(figsize=(12,8))
ax.plot(x, f, 'b', label='Prediction')
ax.scatter(data.Population, data.Profit, c='red',label='Traning Data')
ax.legend(loc=2)
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Predicted Profit vs. Population Size')

结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 可视化成本函数

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用TensorFlow 2进行线性回归练习时,我们首先需要导入所需的库,包括TensorFlow和NumPy。 接下来,我们可以定义输入数据和目标变量。假设我们有一组输入数据X和对应的目标变量y,我们可以使用NumPy创建这些数据。 然后,我们需要创建模型。在线性回归中,模型是一个线性方程,可以通过TensorFlow的密集层(Dense)来实现。我们可以使用Sequential模型来创建一个简单的线性模型,并添加一个密集层。 接下来,我们需要定义优化器和损失函数。对于线性回归问题,我们可以使用均方误差(Mean Squared Error, MSE)作为损失函数,并选择合适的优化器,如随机梯度下降(SGD)。 然后,我们可以使用compile()方法编译模型,指定优化器和损失函数。编译模型后,我们可以使用fit()方法来拟合模型。通过指定输入数据和目标变量,以及训练的批次大小和训练的迭代次数,可以在训练集上训练模型。 在训练完模型后,我们可以使用evaluate()方法评估模型在测试集上的性能。 最后,我们可以使用predict()方法对新的数据进行预测。通过将新的输入数据传递给predict()方法,可以得到对应的目标变量的预测值。 综上所述,使用TensorFlow 2进行线性回归练习可以分为以下步骤:导入库、定义输入数据和目标变量、创建模型、定义优化器和损失函数、编译模型、拟合模型、评估模型性能、预测新的数据。通过完成这些步骤,我们可以进行线性回归练习,并得到模型在给定数据上的预测结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值