你是如何處理的圖表所示:Logistic迴歸在scikitlearn
使用scikitlearn的邏輯迴歸模型。有沒有辦法使用scikitlearn和一個標準的X,Y輸入輕鬆地處理這些類型的問題,這些輸入映射到像這樣的圖形?
你是如何處理的圖表所示:Logistic迴歸在scikitlearn
使用scikitlearn的邏輯迴歸模型。有沒有辦法使用scikitlearn和一個標準的X,Y輸入輕鬆地處理這些類型的問題,這些輸入映射到像這樣的圖形?
如果你真的想在這個特定的設置中使用Logistic迴歸,一個很有前途的方法是將座標從笛卡爾系統轉換到Polar系統。從可視化的角度來看,在這些系統中,數據似乎是(幾乎)線性分離的。 Python conversion between coordinates
這是一個很棒的想法,我從來沒有想過這樣做 – Rob
正如其他人說,好,因爲它是一個線性分類Logistic迴歸不能處理這種類型的數據:
這可以通過這裏所描述來完成。您可以轉換數據以使其可線性分離,或選擇另一種更適合此類數據的分類器。
在scikit-learn文檔中,各種分類器如何處理這個問題有很好的可視化:請參閱http://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html。第二行是你的任務:
很酷的圖形謝謝 – Rob
已經有幾個答案已,但他們都沒有提到數據的任何預處理。所以我會展示你的問題的兩種方式。
一起來我會看一些流形學習到你的數據轉換到另一個空間
# 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
所以你可以看到這個數據看起來像你的,我們得到了一個可怕的交叉驗證準確性與邏輯迴歸。所以,如果你真的附着Logistic迴歸,我們可以做的是使用某種形學習項目的數據轉換成不同的空間,例如:
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
來舉例說明。我只會訓練一半的數據,所以我們可以評估一個偏差集的準確性。我以前只使用簡歷,因爲它簡單快捷!
clf = ensemble.RandomForestClassifier().fit(X[:100], y[:100])
print metrics.accuracy_score(y[100:], clf.predict(X[100:]))
輸出:
0.97
因此,我們得到一個良好的精度!如果你有興趣看看發生了什麼,我們可以從one of the awesomescikit-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)
輸出:
因此,這表明,被分爲使用隨機森林模型中的每個類的空間領域。
解決同一問題的兩種方法。我離開鍛鍊哪一個最適合作爲練習讀者...
好例子!雖然前面提到的兩個答案都是預處理:「變換座標」和「變換數據以使其線性可分」。 –
謝謝!是的,我把很多術語混淆成了一個答案。我應該更加一致,但不太確定哪個是最好的術語。 – ncfirth
LR只能處理其原始形式的線性可分類。 – Kh40tiK
我不認爲這裏提供的數據是線性分離的 – Backtrack
你不能使用logistic這個,但你可以使用徑向(循環)內核的SVM。 http://scikit-learn.org/stable/modules/svm.html – Wboy