编程实现对率回归,分析西瓜数据集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],基于似然函数的定步长梯度下降法完成迭代。
-
- 结果展示
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术