答案 0 :(得分:2)
如果您真的想要对此特定设置使用Logistic回归,那么有希望的方法是将坐标从笛卡尔系统转换为Polar系统。从可视化看来,在该系统中,您的数据似乎(几乎)可以线性分离。
这可以按照此处所述完成:Python conversion between coordinates
答案 1 :(得分:1)
正如其他人所说,Logistic回归无法很好地处理这类数据,因为它是一个线性分类器。您可以转换数据以使其可线性分离,或选择另一种更适合此类数据的分类器。
在scikit-learn文档中,各种分类器如何处理此问题有一个很好的可视化:请参阅http://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html。第二行是您的任务:
答案 2 :(得分:1)
已经有几个答案,但他们都没有提到任何数据预处理。因此,我将展示两种方式来查看您的问题。
首先,我将介绍一些将数据转换为另一个空间的多种学习方法
# Do some imports that I'll be using
from sklearn import datasets, manifold, linear_model
from sklearn import model_selection, ensemble, metrics
from matplotlib import pyplot as plt
%matplotlib inline
# Make some data that looks like yours
X, y = datasets.make_circles(n_samples=200, factor=.5,
noise=.05)
首先让我们来看看你当前的问题
plt.scatter(X[:, 0], X[:, 1], c=y)
clf = linear_model.LogisticRegression()
scores = model_selection.cross_val_score(clf, X, y)
print scores.mean()
<强>输出强>:
0.440433749257
所以你可以看到这些数据看起来像你的,我们通过逻辑回归得到了一个糟糕的交叉验证精度。因此,如果您真的附加了逻辑回归,那么我们可以做的是使用某种流量学习将数据投影到不同的空间,例如:
Xd = manifold.LocallyLinearEmbedding().fit_transform(X)
plt.scatter(Xd[:, 0], Xd[:, 1], c=y)
clf = linear_model.LogisticRegression()
scores = model_selection.cross_val_score(clf, Xd, y)
print scores.mean()
<强>输出强>:
1.0
因此,您可以看到,现在您的数据与LocallyLinearEmbedding
完全线性可分离,我们可以获得更好的分类精度!
您可以使用的另一个选项,即其他人提到的另一个选项是使用不同的模型。虽然有很多选项可供选择,但我只是想用RandomForestClassifier
来展示一个例子。我只会训练一半的数据,所以我们可以评估unbias集的准确性。我之前只使用过CV,因为它快速而简单!
clf = ensemble.RandomForestClassifier().fit(X[:100], y[:100])
print metrics.accuracy_score(y[100:], clf.predict(X[100:]))
<强>输出强>:
0.97
所以我们得到了很好的准确性!如果您有兴趣了解发生了什么,我们可以从one of the awesome scikit-learn
教程中提取一些代码。
plot_step = 0.02
x_min, x_max = X[:, 0].min() - .1, X[:, 0].max() + .1
y_min, y_max = X[:, 1].min() - .1, X[:, 1].max() + .1
xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step),
np.arange(y_min, y_max, plot_step))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
cs = plt.contourf(xx, yy, Z, alpha=0.5)
plt.scatter(X[:, 0], X[:, 1], c=y)
<强>输出强>:
因此,这显示了使用随机森林模型将空间区域分类到每个类中。
解决同一问题的两种方法。我为读者留下了最好的锻炼方法......