[英]Logistic Regression in scikitlearn
如果您真的想要对此特定设置使用Logistic回归,那么有前途的方法是将坐标从笛卡尔系统转换为Polar系统。 从可视化看来,在该系统中,您的数据似乎(几乎)可线性分离。
这可以按照此处所述完成: 坐标之间的Python转换
正如其他人所说,Logistic回归无法很好地处理这类数据,因为它是一个线性分类器。 您可以转换数据以使其可线性分离,或选择另一种更适合此类数据的分类器。
在scikit-learn文档中,各种分类器如何处理此问题有一个很好的可视化:请参阅http://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html 。 第二行是您的任务:
已经有几个答案,但他们都没有提到任何数据的预处理。 因此,我将展示两种方式来查看您的问题。
首先,我将看一些流量学习,将您的数据转换为另一个空间
# 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
所以你可以看到,现在你的数据是perfectally从线性可分LocallyLinearEmbedding
我们得到更好的分类准确度!
其他人提到的另一个选项是使用不同的模型。 虽然您可以使用许多选项,但我将使用RandomForestClassifier
来展示一个示例。 我只会训练一半的数据,所以我们可以评估unbias集的准确性。 我之前只使用过CV,因为它快速而简单!
clf = ensemble.RandomForestClassifier().fit(X[:100], y[:100])
print metrics.accuracy_score(y[100:], clf.predict(X[100:]))
产出 :
0.97
所以我们得到了很好的准确性! 如果你有兴趣看看发生了什么,我们可以从一个很棒的 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)
产出 :
因此,这显示了使用随机森林模型将您的空间区域分类到每个类中。
解决同一问题的两种方法。 我给读者留下最好的锻炼方法......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.