栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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循环跳过最后一次迭代。

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

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/422852.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号