python - 决策边界逻辑回归不正确

标签 python numpy machine-learning logistic-regression

我知道有很多问题,但这是行不通的。我想绘制逻辑回归模型的决策边界。但我的决策边界图与预期相去甚远。我还没有绘制新数据来验证分类器,但是,我的损失看起来符合预期并且很好地收敛。请在下面找到我的代码。

编辑1:我现在已经尝试了几种解决方案和方法来绘制决策边界,并且它看起来总是相同的,所以我的参数一定有问题。有人知道它可能是什么吗?

编辑2:出于沮丧,我随机将决策边界的参数更改为y = (-(w[2]+w[0].item()*x)/w[ 1]).T 现在它可以工作了。有人知道为什么我有两个扭转它们吗?

这就是我将得到的。我做错了什么?

import numpy as np
import matplotlib.pyplot as plt

def sig(x):
    return 1/(1+np.exp(-x))

def N(mean, cov, n):
    return np.matrix(np.random.multivariate_normal(mean, cov, n))

# Data
n = 100
mean_1, cov_1 = [3,3], [[0.7,-0.3],[0.3,0.5]]
mean_2, cov_2 = [1,2], [[0.5,0.3],[0.3,0.5]]
X_1, X_2 = N(mean_1, cov_1, n), N(mean_2, cov_2, n) # (100, 2)
X = np.vstack((X_1, X_2)) # (200, 2)
Ts = np.vstack((np.zeros((n, 1)), np.ones((n, 1)))) # (200, 1)
Xs = np.hstack((X, np.ones((n*2,1)))) # (200, 3)

# Parameters
w = np.matrix(np.random.rand(np.size(Xs,1))).T # (3, 1)
alpha = 1e-2

# Train
loss = []
epochs = 10000
for i in range(epochs):
    Ys = sig(Xs@w)
    loss += [1/(n*2) * (-Ts.T@np.log(Ys) -(1-Ts.T)@np.log(1-Ys)).item()]
    grad = Xs.T@(Ys-Ts)
    w -= alpha/(n*2) * grad

# plot loss
plot_loss = False
if plot_loss:
    plt.plot(range(len(loss)), loss)
    plt.title("Convergence of loss")
    plt.xlabel('Epochs')
    plt.ylabel('Loss')

# plot data
plot_data = True
if plot_data:
    plt.scatter([X_1[:,0]],[X_1[:,1]], color="b")
    plt.scatter([X_2[:,0]],[X_2[:,1]], color="r")
    plt.title("Data")
    plt.xlabel('Feature 1')
    plt.ylabel('Feature 2')

# plot decision boundary
plot_db = True
if plot_db:
    x = np.linspace(-1, 6, 1000)
    y = (-(w[0]+w[1].item()*x)/w[2]).T
    plt.plot(x,y,"r")

plt.show()

最佳答案

问题在于 ones 向量与特征向量连接。将其与特征向量进行切换并按照上面的代码绘制边界会产生正确的边界。

关于python - 决策边界逻辑回归不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59810466/

相关文章:

python - 使用 pip 在 Fedora 19 上安装 Numpy

python - numpy:有 `allclose(np.array, scalar)` 吗?

python-3.x - Python - 自定义采样以获取训练和测试数据

matlab - TreeBagger() (MATLAB) 以及训练集和测试集上不同数量的变量

Python html 字母表

python - 如何修复 Python Pandas 中的 "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()"?

python - Python有多快?

python - 如何正确安装最新版本的 pygame?

python - 如何在列的两个值之间选择数据框中的所有行

machine-learning - 在 Word2Vec 中合并预训练模型?