Python吴恩达机器学习课后习题作业一算法(Ⅰ)(1)

        吴恩达老师的机器学习课程是机器学习入门者必看的经典之一,其课后习题也是典中典。下面将在以Python为语言工具完成课后习题。

        问题一:单元线性回归

问题:根据城市人口数量,预测开小吃店的利润

        下面我将介绍两部分算法,一个是利用单纯的循环减少算法,算法内容冗长,另一个为吴老师所讲的向量化,减少循环部分,以达到优化算法的目的。首先介绍一下算法Ⅰ(超新手算法)        

        导入数据文件,并读出数据前五项内容以检查。

path = 'C://Users//xzl//PycharmProjects//machinelearning//linear//ex1data1.txt'
data = pd.read_csv(path, header=None, names=['Population', 'Profit'])
data.head()

         进行梯度下降并计算代价函数值。

# 迭代1500次的线性回归算法
# a0、a1为参数,初值分别设为0,0,t为学习率
a0 = 0
a1 = 0
t = 0.01
i = 0
list_cost = [] #存放代价函数值
while i < 1501:
    temp0 = 0
    temp1 = 0
    temp2 = 0
    for xi, yi in zip(data.Population, data.Profit):

        temp0 = temp0 + ((a0 + a1 * xi) - yi)
        temp1 = temp1 + ((a0 + a1 * xi) - yi) * xi
        # 由于在参数初值都是0时无需计代价函数值,因此用一个if循环跳过第一次循环。
        # 但是,这样一来,在第i+1次循环中得到的代价函数值是由第i次梯度下降的得到的参数计算而来
        # 于是总循环数改为1501,使得第1500次迭代得到的参数能计算出代价函数值。
        if i > 0:
            temp2 = temp2 + math.pow(a0 + a1 * xi - yi, 2)
    temp_a0 = a0 - t * temp0 / len(data.Profit)
    temp_a1 = a1 - t * temp1 / len(data.Profit)
    # 由于总循环数改为1501时,循环次数变味了1501次,因此使用if循环跳过最后一次迭代
    if i < 1500:
        a0 = temp_a0
        a1 = temp_a1
    if i > 0:
        temp2 = temp2 / (2 * len(data.Profit))
        list_cost.append(temp2)
    i = i + 1

         由于在参数初值都是0时无需计代价函数值,因此用一个if循环跳过第一次循环。,但是,这样一来,在第i+1次循环中得到的代价函数值是由第i次梯度下降的得到的参数计算而来 ,于是,总循环数改为1501,使得第1500次迭代得到的参数能计算出代价函数值。同时,由于总循环数改为1501时,循环次数变味了1501次,因此使用if循环跳过最后一次迭代。

        将线性回归函数和代价函数值可视化。如下图。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值