吴恩达机器学习课程-作业2-逻辑回归(python实现)

Machine Learning(Andrew) ex2-Logistic Regression

椰汁笔记

Logistic Regression

  • 1.1 Visualizing the data

可视化数据的第一步就是读入数据,数据形式和作业相同都是txt文件。
在这里插入图片描述
第一列为第一门课程的成绩,第二列为第二门课程的成绩。读入方式仍然是按行读入,进行分离转换。发现这样的数据读入总是存在因此,这里封装一个读取该种类型数据文件的函数。

def read_dataset(filename, type_tuple, separator=','):
    """
    从文件中读入数据,文件的数据存储应该是每组数据存在一行并用分隔符隔开
    返回列表存储
    eg:
        1.1,2.1,3.1
        1.2,2.2,3.2

    parameters:
    ----------
    filename : str
            (包括路径的)文件名
    type_tuple : tuple
            每一行数据的类型
    separator : str
            分隔符,默认为','
    """
    f = open(filename, 'r')
    lines = f.readlines()

    data = []
    if len(type_tuple) != len(lines[0]) and len(type_tuple) == 1:
        for line in lines:
            line = line[:-1]`在这里插入代码片`
            line = line.split(sep=separator)
            row = []
            for col in line:
                row.append(type_tuple[0](col))
            data.append(row)

    elif len(type_tuple) == len(lines[0].split(sep=separator)):
        for line in lines:
            line = line[:-1]
            line = line.split(sep=separator)
            row = []
            for i in range(len(line)):
                row.append(type_tuple[i](line[i]))
            data.append(row)
    else:
        data = None
    return data

要画出两种数据的散点图,我们需要根据y值将数据分为admitted和not admitted两组。同样我也实现了一个通用的方法

def separate_dataset(data, col, boundary):
    """
    将数据按照某列进行二分类

    parameters:
    ----------
    data : ndarray
            一组数据存在一行
    col : int
            分类标准应用到的列号
    boundary : double
            分类边界
    """
    data0 = np.array(data)
    data1 = np.array(data)
    dc0 = 0
    dc1 = 0
    for i in range(data.shape[0]):
        if data[i][col] < boundary:
            data1 = np.delete(data1, i - dc1, axis=0)
            dc1 += 1
        else:
            data0 = np.delete(data0, i - dc0, axis=0)
            dc0 += 1
    return data0, data1

将划分好的两组数据绘制散点图,matplotlib.pyplot.xlim()设置x坐标的范围,matplotlib.pyplot.legend()用于显示图例。

    data = read_dataset("ex2data1.txt", (float, float, float), separator=',')
    data0, data1 = separate_dataset(data, -1, 0.5)
    plt.title("raw data scatter")
    plt.xlabel("exam1 score")
    plt.ylabel("exam2 score")
    plt.xlim((20, 110))
    plt.ylim((20, 110))
    na = plt.scatter(data0[..., 0], data0[..., 1], marker='x', c='b', label='not admitted')
    a = plt.scatter(data1[..., 0], data1[..., 1], marker='x', c='y', label='admitted')
    plt.legend(handles=[na, a], loc="upper right")

在这里插入图片描述

  • 1.2.1 Warmup exercise: sigmoid function

g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1
sigmoid函数实现了将结果从R转化到0-1,用来表示概率。实现sigmoid函数,通过numpy库的支持很简单

def sigmoid(z):
    return 1 / (1 + np.exp(-z))
  • 1.2.2 Cost function and gradient

这里的损失函数不能继续使用平方代价函数,因为sigmoid函数会导致该损失函数变为非凸函数(存在多个局部最优解),进而导致梯度下降出现效果不好的问题。因此逻辑回归的损失函数更换为
J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) l o g ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] J(\theta)=\frac{1}{m}\sum_{i=1}^{m}[-y^{(i)}log(h_{\theta}(x^{(i)}))-(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))] J(θ)=m1i=1m[y(i)log(hθ(x(i)))(1y(i))log(1hθ(x(i)))]
h θ ( x ) = θ T X h_{\theta}(x)=\theta^TX h

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
根据引用内容,吴恩达机器学习课程中对逻辑回归进行了实验。逻辑回归是一种用于预测二分类问题的机器学习算法。在这个实验中,假设你是一个大学部门的管理员,想根据申请人在两次考试中的成绩来确定他们的入学机会。你可以使用以前申请人的历史数据作为逻辑回归的训练集。对于每个训练样本,你都有申请人在两门考试中的成绩和录取决定。通过建立一个逻辑回归模型,你可以根据申请人的考试成绩来预测他们是否会被大学录取。这个实验的目的是通过训练样本来构建一个逻辑回归模型,用以预测学生是否被录取。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [吴恩达机器学习--逻辑回归](https://blog.csdn.net/m0_68111267/article/details/129910241)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [吴恩达机器学习课后作业Python实现(二):逻辑回归](https://blog.csdn.net/weixin_50345615/article/details/125984757)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值