python - 逻辑回归模型的损失不会通过梯度下降而减少
问题描述
我是机器学习的初学者,一直在尝试实现梯度下降来尝试优化模型的权重。我正在尝试从头开始开发模型,并且我已经在线查看了很多代码,但是我的实现似乎仍然没有减少模型的损失,损失在 0.2 和 0.1 之间波动。我使用的损失函数是 L = (y - 假设)**2。任何帮助,将不胜感激
for z in range(self.iterations):
print(z)
cost = 0
for x in range(self.batch_size):
derivatives = np.zeros(self.num_weights)
ran = self.random_row()
row = self.X.iloc[[ran]]
cost += self.loss(row, self.y[ran])
error = self.y[ran] - self.predict(row)
for i in range(len(derivatives)):
derivatives[i] = derivatives[i] + (error * (row.iloc[0,i] * -2))
derivatives[i] = derivatives[i] * learning_rate
self.weights[i] = self.weights[i] - derivatives[i]
解决方案
这是不正确的损失函数。对于二元/两类逻辑回归,您应该使用
其中 h 是假设。
您可以在此处的本文的“成本函数直觉”部分中找到成本函数的直觉以及它为何如此的解释。
使用此成本函数,您将需要使用不同的梯度:.
请注意,这里使用了不同的符号,成本函数由 J(θ) 表示,其中 θ 是该模型的权重向量。这个方程的推导可以在这里找到。
一般来说,这里有一些关于实现逻辑回归的有用文章:
- https://towardsdatascience.com/building-a-logistic-regression-in-python-301d27367c24
- https://www.baeldung.com/cs/gradient-descent-logistic-regression
- https://machinelearningmastery.com/implement-logistic-regression-stochastic-gradient-descent-scratch-python/
- https://medium.com/@martinpella/logistic-regression-from-scratch-in-python-124c5636b8ac
- https://dhirajkumarblog.medium.com/logistic-regression-in-python-from-scratch-5b901d72d68e
推荐阅读
- java - 如何使用外部 java 程序在我的世界中移动我的世界角色的相机
- security - 需要查看我在 RunDeck 中的 ACL 在 RunDeck 3.1.1 中失败的位置
- d3.js - D3 合并和向兄弟姐妹添加标签的问题
- c# - 类型“Microsoft.DirectoryServices.PasswordProfile”上不存在属性“$id”
- c# - 如何让两个表单从接收Arduino信息的串口接收信息?
- sql - 如何从 Lotusscript 代理批量插入 SQL 表
- azure-devops - Azure DevOps - 如何轻松切换分支以用于多个环境
- wordpress - 木材库不支持“nav_menu_link_attributes”过滤器?
- android - 将位图转换为灰度
- c++ - 显示所有数据链表的单个总和