編程實現對率回歸,分析西瓜數據集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],基於似然函數的定步長梯度下降法完成迭代。

  • 結果展示

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM