编程实现对率回归,分析西瓜数据集3.0α上的运行结果

  • 题目理解
    • 编程实现对率回归,分析西瓜数据集3.0α上的运行结果:

      将西瓜数据集分成训练集和测试集,利用对率回归模型分析运行结果。

  • 算法原理
    • 对率回归模型是一个典型的二分类任务学习模型,二分类问题输出标记y∈{0,1},最理想的是“单位阶跃函数”:

       

      但是单位阶跃函数不连续,不能直接用于线性模型的预测。因此需要找到一个类似的连续函数,即参数在取中间值时函数变化陡峭,参数在取+∞或-∞时,函数趋近与1和0,以此来替代单位阶跃函数,即:

       

      将线性回归方程与对数几率函数合并,得到:

       

  • 算法设计
    • 使用对率回归模型预测y值以及用梯度下降法训练得到w和b的值。

      ①  求解w和b的值时,首先设定迭代次数和迭代步长,将w和b合并表示为一个增广矩阵β,并用迭代步长初始化β;

      ②  利用梯度下降法先计算出梯度:

       

       

      进而更新得到Δβ和下一步的β。

      ③  在规定的迭代次数内得到β,然后用对率回归模型对测试集进行预测并分析结果。

  • 核心代码
    • 复制代码
       1 # ①极大似然法估计w和b
       2 def likelihood_sub(x, y, beta):     # (样本变量,样本标签,3.27中的参数向量)
       3     return -y * np.dot(beta, x.T) + np.math.log(1 + np.math.exp(np.dot(beta, x.T)))
       4 
       5 def likelihood(X, y, beta):         # (样本变量矩阵,样本标签矩阵,3.27中的参数向量)
       6     sum = 0
       7     m,n = np.shape(X)       # m:X的第一个维度;n:X的第二个维度
       8     for i in range(m):
       9         sum +=likelihood_sub(X[i], y[i], beta)
      10     return sum
      复制代码

      单次迭代内部对β的更新:使用极大似然法对w,b进行估计。

      复制代码
       1 # ②基于训练集x->[x,1],给出基于3.27的似然函数的定步长梯度下降法,注意偏梯度的实现技巧
       2 def gradDscent(X, y):
       3     h = 0.1 # 迭代步长
       4     max_times = 500 # 迭代次数限制
       5     m, n = np.shape(X)
       6     beta = np.zeros(n)  # 初始化
       7     delta_beta = np.ones(n)*h
       8     print("初始化delta_beta:", delta_beta)
       9     llh = 0
      10     llh_temp = 0
      11     for i in range(max_times):
      12         beta_temp = beta.copy()     # 返回beta的拷贝
      13 
      14         # 偏导数
      15         for j in range(n):
      16             beta[j] +=delta_beta[j]
      17             llh_tmp = likelihood(X, y, beta)        # 梯度
      18             delta_beta[j] = -h * (llh_tmp - llh) / delta_beta[j]
      19             beta[j] = beta_temp[j]
      20 
      21         beta += delta_beta
      22         print(beta)
      23         llh = likelihood(X, y, beta)
      24     return beta
      复制代码

      梯度下降完成迭代:由于是基于训练集同时对w和b即β进行估计,因此将训练集X扩展到[X, 1],基于似然函数的定步长梯度下降法完成迭代。

  • 结果展示

 

posted @   Yalking  阅读(3065)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示