【问题标题】:Logistic regression visualization逻辑回归可视化
【发布时间】:2020-07-05 04:08:53
【问题描述】:

我正在学习基本的机器学习模型,但遇到了下一个问题:预测线与数据集不太吻合。我正在生成一个简单的 2 类数据集并训练 SVM 和逻辑回归。虽然指标显示出良好的结果,但可视化效果很差:训练线显然没有将两个类分开。我不太明白怎么回事,有人可以解释一下吗?

from sklearn import datasets
from sklearn.linear_model import LogisticRegression

X, y = datasets.make_blobs(n_samples=100, centers=2, n_features=2, center_box=(0, 12))

clf = LogisticRegression()
clf.fit(X_train, y_train)

plt.plot(X_train[:, 0], X_train[:, 0] * svc.coef_[:, 1] + svc.coef_[:, 0])
plt.plot(X_train[:, 0][y_train == 0], X_train[:, 1][y_train == 0], 'g^')
plt.plot(X_train[:, 0][y_train == 1], X_train[:, 1][y_train == 1], 'bs')

【问题讨论】:

  • 不清楚你的问题到底是什么。请更详细地解释它。例如,到目前为止你已经尝试过什么,你观察到了什么等等。
  • 另外,请让您的代码可重现 - X_trainy_train 来自哪里,以及“指标显示良好结果”究竟如何?

标签: machine-learning scikit-learn logistic-regression


【解决方案1】:

我想我看到了错误,虽然有点难以确定,因为您演示的代码不完整,并且您混淆了逻辑回归和 SVM。为了澄清,我将回答逻辑回归。考虑到这一点,您用来绘制决策边界的公式是错误的。

逻辑回归的公式为:

我们将决策边界定义为 x_1 和 x_2 的值,使得 h(x) 为 0。然后根据输入变量之一重写方程。

那么就将其实现到代码中。

# Gather model parameters
theta_0, theta_1, theta_2 = clf.intercept_[0], clf.coef_[:, 0], clf.coef_[:, 1]

# Choose a pair of x values that fit nicely with your data
x_vals = [np.min(X_train[:, 0]) - 2, np.max(X_train[:, 0]) + 2]

# Apply the formula
y_vals = [- (theta_0 + theta_1 * x)/theta_2 for x in v_vals]

plt.plot(x_vals, y_vals, '--', c='r')

【讨论】:

  • 非常感谢,我现在明白我哪里出错了!是的,我将代码与 SVM 混淆了,因为我尝试了不同的模型。
  • 太好了,很高兴能帮上忙! :-)
猜你喜欢
  • 1970-01-01
  • 2019-02-15
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多