Machine learning 逻辑回归曲线未以我的数据为中心
我正在做一个关于二元分类的逻辑回归的学校项目,结果非常糟糕(准确率约为50%)。我必须从头开始做这个分类,所以我担心我的实现有问题 我用一个预测值拟合了一个模型,并绘制了结果的逻辑曲线,注意到它的中心是0,超出了我的数据范围(预测值范围为50-90)。因此,只有logistic曲线的渐近线在我的数据范围内,因此将所有示例分类为同一类 我认为使用截距权重可以解决这个问题,但在我的例子中,它没有。我还考虑过规范化我的数据并将其集中在0左右,但我希望有一种更直接的方法 有什么建议吗 编辑-这是我的实现Machine learning 逻辑回归曲线未以我的数据为中心,machine-learning,regression,Machine Learning,Regression,我正在做一个关于二元分类的逻辑回归的学校项目,结果非常糟糕(准确率约为50%)。我必须从头开始做这个分类,所以我担心我的实现有问题 我用一个预测值拟合了一个模型,并绘制了结果的逻辑曲线,注意到它的中心是0,超出了我的数据范围(预测值范围为50-90)。因此,只有logistic曲线的渐近线在我的数据范围内,因此将所有示例分类为同一类 我认为使用截距权重可以解决这个问题,但在我的例子中,它没有。我还考虑过规范化我的数据并将其集中在0左右,但我希望有一种更直接的方法 有什么建议吗 编辑-这是我的实现
class LogisticRegression:
def __init__(self, alpha, iters, intercept=True):
self.alpha = alpha
self.iters = iters
self.weights = None
self.intercept = intercept
def sigmoid(self, z):
return 1.0 / (1 + np.exp(-z))
def add_intercept(self, X):
intercept = np.ones((X.shape[0], 1))
return np.concatenate((intercept, X), axis=1)
def cost(self, h, y):
return (-y * np.log(h) - (1 - y) * np.log(1 - h)).mean()
def fit(self, X, y):
if self.intercept:
X = self.add_intercept(X)
self.weights = np.zeros(X.shape[1])
for i in range(self.iters):
z = np.dot(X, self.weights)
h = self.sigmoid(z)
gradient = np.dot(X.T, (h - y)) / len(y)
self.weights -= self.alpha * gradient
编辑-链接到数据:
目标是一个人是否打篮球,我在单一回归中使用的特征是身高
我现在想,无论如何我都必须规范化我的数据,因为在多元回归的情况下,我的np.exp()有些溢出。当我绘制身高与篮球的散点图时,数据似乎不在任何类型的S形或逻辑曲线上。基于这个数据集,我认为仅仅身高不足以对篮球做出预测
我担心我的实现有问题。
可能,但我们无法判断,因为您没有向我们展示实现。@dyukha刚刚添加了代码。请发布(或链接)数据好吗?@JamesPhillips当然,添加了链接您的算法看起来不错,我建议几件事。1.规范化您的数据(您已经考虑过)2。使用批量梯度下降,这将减少溢出3的机会。尝试小学习率4。数据的散点图是否有相关性,或者它们是完全随机的