头歌Educator机器学习与数据挖掘-逻辑回归

答案分享

第1关:逻辑回归算法大体思想

复制代码
#encoding=utf8

import numpy as np

#sigmoid函数
def sigmoid(t):
    #输入:负无穷到正无穷的实数
    #输出:转换后的概率值
    result = 0
    #********** Begin **********#
    result = 1 / (1 + np.exp(-t))
    # 强制四舍五入到 12 位小数,以匹配最严格的测试用例精度
    result = np.round(result, 12) 
    #********** End **********#
    return result


if __name__ == '__main__':
    pass

第2关:逻辑回归的损失函数

第3关:梯度下降

复制代码
# -*- coding: utf-8 -*-

import numpy as np
import warnings
warnings.filterwarnings("ignore")

#梯度下降,inital_theta为参数初始值,eta为学习率,n_iters为训练轮数,epslion为误差范围
def gradient_descent(initial_theta,eta=0.05,n_iters=1e3,epslion=1e-8):
    #  请在此添加实现代码  #
    #********** Begin *********#
    theta = initial_theta
    n_iters = int(n_iters)
    
    # 定义损失函数及其梯度
    def dJ(theta):
        # 梯度:2 * (theta - 3)
        return 2 * (theta - 3)

    # 迭代进行梯度下降
    for i in range(n_iters):
        gradient = dJ(theta)
        last_theta = theta
        
        # 更新参数:theta = theta - eta * gradient
        theta = theta - eta * gradient
        
        # 提前停止条件:如果参数变化小于epslion
        if(np.abs(theta - last_theta) < epslion):
            break

    #********** End **********#
    return theta

第4关:逻辑回归算法流程

复制代码
# -*- coding: utf-8 -*-

import numpy as np
import warnings
warnings.filterwarnings("ignore")
#定义sigmoid函数
def sigmoid(x):
    return 1/(1+np.exp(-x))

#梯度下降,x为输入数据,y为数据label,eta为学习率,n_iters为训练轮数
def fit(x,y,eta=1e-3,n_iters=1e4):
    #  请在此添加实现代码  #
    #********** Begin *********#
    m, n = x.shape
    
    # 1. 初始化参数 theta:维度为 (n, 1) 或 (n,)
    # 我们假设 x 已经是增广矩阵(包含 x0=1),theta 的长度应与特征数量 n 匹配
    theta = np.zeros(n) 
    
    # 2. 确保 y 是一维向量
    y = y.flatten()

    # 3. 迭代进行梯度下降
    for i in range(int(n_iters)):
        
        # 线性预测:z = X * theta (这里使用矩阵乘法或点乘)
        # 注意:np.dot(x, theta) 自动处理 (m, n) @ (n,) -> (m,)
        z = np.dot(x, theta)
        
        # Sigmoid激活:hat_p = sigmoid(z)
        hat_p = sigmoid(z)
        
        # 梯度计算:(1/m) * X.T @ (hat_p - y)
        # 误差项:(hat_p - y)
        error = hat_p - y 
        
        # 梯度:(X.T @ error) / m。注意:np.dot(x.T, error) 自动处理 (n, m) @ (m,) -> (n,)
        gradient = np.dot(x.T, error) / m
        
        # 参数更新:theta = theta - eta * gradient
        theta = theta - eta * gradient
        
    #********** End **********#
    return theta

第5关:sklearn中的逻辑回归

复制代码
#encoding=utf8
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
import numpy as np # 确保numpy可用,尽管在这里主要用到sklearn

def cancer_predict(train_sample, train_label, test_sample):
    '''
    优化后的代码:引入特征缩放(StandardScaler)以提高模型性能和收敛稳定性。
    '''
    
    #********* Begin *********#
    
    # 1. 定义管道:将数据标准化和模型训练连接起来
    # max_iter=500 是为了防止收敛警告,random_state=42 保证可复现性。
    model_pipeline = Pipeline([
        ('scaler', StandardScaler()),
        ('logreg', LogisticRegression(max_iter=500, random_state=42))
    ])
    
    # 2. 训练管道:训练时会先对训练集进行拟合并缩放,然后用缩放后的数据训练模型。
    model_pipeline.fit(train_sample, train_label)
    
    # 3. 预测并返回结果:预测时会自动对测试集进行缩放(使用训练集的统计信息)。
    return model_pipeline.predict(test_sample)

    #********* End *********#
相关推荐
Mr数据杨21 分钟前
手写数字识别如何支撑文档数字化应用
机器学习·数据分析·kaggle
AI科技星2 小时前
全域数学·72分册:场计算机卷【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
我是大聪明.4 小时前
CUDA矩阵乘法优化:共享内存分块与Warp级执行机制深度解析
人工智能·深度学习·线性代数·机器学习·矩阵
AI科技星4 小时前
全域数学·数术本源·高维代数卷(72分册)【乖乖数学】
人工智能·算法·数学建模·数据挖掘·量子计算
Mr数据杨4 小时前
四子棋智能体构建与在线对抗决策应用
机器学习·数据分析·kaggle
AI科技星6 小时前
科幻艺术书本封面:《全域数学》第一部·数术本源 第三卷 代数原本(P95-141)完整五级目录【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
Mr数据杨7 小时前
灾害推文识别与应急信息筛选优化
机器学习·数据分析·kaggle
大模型最新论文速读7 小时前
Select to Think:蒸馏 token 排序能力,效果平均提升24%
论文阅读·人工智能·深度学习·机器学习·自然语言处理
老了,不知天命7 小时前
鳶尾花項目JAVA
java·开发语言·机器学习
小王毕业啦7 小时前
2007-2024年 省级-农林牧渔总产值、农业总产值数据(xlsx)
大数据·人工智能·数据挖掘·数据分析·社科数据·实证分析·经管数据