《机器学习》课后习题3.3 对率回归编程实现

本文通过使用Python编程语言实现了对西瓜数据集3.0α的逻辑回归分析,包括梯度下降法和牛顿法两种参数更新方法。此外,还对比了自定义逻辑回归模型与sklearn库中逻辑回归模型的表现。

参考了han同学的答案,西瓜数据集也可在han同学的github上下载。

3.3 编程实现对率回归,并给出西瓜数据集 3.0α 上的结果.

代码

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn import linear_model
# 下面这两行是为了让matplotlib画图时的汉字正常显示
import matplotlib
matplotlib.rc("font",family='YouYuan')


# sigmoid函数


def sigmoid(s):
    s = 1 / (1 + np.exp(-s))
    return s


# 公式 3.27,最小化对数似然的相反数


def J_cost(X, y, beta):
    """

    :param X: array , shape(num_sample, num_features)
    :param y: array, shape(num_sample, 1)
    :param beta: array, shape(num_features+1, 1)
    :return: 公式3.27的结果,即对数似然相反数的值
    """
    X_hat = np.c_[X, np.ones((X.shape[0], 1))]
    y = y.reshape(-1, 1)
    beta = beta.reshape(-1, 1)

    lbeta = -y*np.dot(X_hat, beta) + np.log(1 + np.exp(np.dot(X_hat, beta)))

    return lbeta.sum()

# 公式3.30,beta的一阶导数


def gradient(X, y, beta):
    '''

    :param X:
    :param y:
    :param beta:
    :return: result of formula 3.30
    '''
    X_hat = np.c_[X, np.ones((X.shape[0], 1))]
    beta = beta.reshape(-1, 1)
    y = y.reshape(-1, 1)
    p1 = np.exp(np.dot(X_hat, beta)) / (1 + np.exp(np.dot(X_hat, beta)))

   
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值